我正在尝试使用apache mina sshd设置ssh服务器。我想使用公钥身份验证,基本上我想知道如何实现
package org.apache.sshd.server;
import java.security.PublicKey;
import org.apache.sshd.server.session.ServerSession;
public interface PublickeyAuthenticator {
boolean authenticate(String username, PublicKey key, ServerSession session);
}
我看到传递的是另一个公钥。因此,我假设您应该将参数中给出的公钥与服务器拥有的公钥进行比较。但是我不知道该怎么做。
我发现的一件事是this实现。这似乎毫无意义,因为它似乎将公钥的模数与其自身进行了比较。假设此实现有一个错误,并且应该比较每个公钥的模数,这是否足以进行身份验证-模数一致?当然,如果我仅将公共可用的公共密钥提供给此功能,那么我将获得身份验证吗?
最佳答案
我想我在org.apache.sshd.server.auth.UserAuthPublicKey#auth
的来源中找到了答案。此类使用密钥进行实际的身份验证。我认为让我感到困惑的是方法的名称-authenticate()
。实际发生的情况如下:
服务器要求客户端的公钥
公钥传递给PublickeyAuthenticator#authenticate
您应该在authenticate()
中要做的就是检查这是您要允许的公共密钥
如果authenticate()
返回true,则UserAuthPublicKey#auth
将检查消息是否已使用私钥签名。如果已经验证,则验证已通过。
关于java - apache sshd公钥认证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15372360/