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,并且应该比较每个公钥的模数,这是否足以进行身份验证 - 模数是否一致?当然,如果我只是将公开的公钥提供给此功能,那么我会得到身份验证吗?
我想我找到了答案org.apache.sshd.server.auth.UserAuthPublicKey#auth.这个类用密钥进行实际的auth.我觉得困惑的是方法的名称 - authenticate().真正发生的事情如下:
服务器请求客户端的公钥
公钥传递给 PublickeyAuthenticator#authenticate
你应该做的authenticate()只是检查这是你想要允许的公钥
如果authenticate()返回true,UserAuthPublicKey#auth则将检查消息是否已使用私钥签名.如果有,则验证已经过验证.