apache sshd公钥认证

nor*_*end 1 java authorization sshd public-key mina

我正在尝试使用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);

}
Run Code Online (Sandbox Code Playgroud)

我看到传递的是另一个公钥.所以我假设您应该将param中给出的公钥与服务器所具有的公钥进行比较.但我不知道该怎么做.

我发现的一件事是这个实现.这似乎毫无意义,因为它似乎比较了公钥的模数与自身.假设这个实现有一个bug,并且应该比较每个公钥的模数,这是否足以进行身份​​验证 - 模数是否一致?当然,如果我只是将公开的公钥提供给此功能,那么我会得到身份验证吗?

nor*_*end 8

我想我找到了答案org.apache.sshd.server.auth.UserAuthPublicKey#auth.这个类用密钥进行实际的auth.我觉得困惑的是方法的名称 - authenticate().真正发生的事情如下:

  • 服务器请求客户端的公钥

  • 公钥传递给 PublickeyAuthenticator#authenticate

  • 你应该做的authenticate()只是检查这是你想要允许的公钥

  • 如果authenticate()返回true,UserAuthPublicKey#auth则将检查消息是否已使用私钥签名.如果有,则验证已经过验证.