我正在尝试验证客户端从其私钥生成的签名并发送到服务器 .
我能在图书馆找到的唯一合适的认证者是 PublickeyAuthenticator
. 如果这是错误的类,请纠正我 .
我目前有:
this.sshServer.setPublickeyAuthenticator(new PublickeyAuthenticator() {
@Override
public boolean authenticate(String username, PublicKey key, ServerSession session) {
if (username.equals("client")) {
//if signature == valid??
return true;
}
}
});
有谁知道mina是否支持签名验证,如果支持,如何实施?
我的理解是,我首先必须将用户公钥分配/添加到服务器 . 如果客户端提供了 id_rsa.pub
文件,我该如何将此文件作为公钥添加到服务器?
1 回答
Mina SSH有一些
PublickeyAuthenticator
的实现 .请看
org.apache.sshd.server.config.keys.AuthorizedKeysAuthenticator
和org.apache.sshd.server.auth.pubkey.KeySetPublickeyAuthenticator
.PublickeyAuthenticator
的实现仅检查给定的公钥是否与用户相关联 .验证后,签名的实际验证在内部处理到MINA SSH .
AuthorizedKeysAuthenticator
仅支持一个用户(它不会检查用户名),但您可以将其指向您的id_rsa.pub
文件,它应该可以正常工作 .您可以编写自己的
PublicKeyAuthenticator
,根据用户 Map 检查密钥,如下所示:您需要编写一些代码来使用您的密钥数据填充 Map .
AuthorizedKeyEntry
具有从文件,输入流或字符串执行此操作的实用方法 .从用户命名的授权密钥文件中读取的示例: