2013-03-12 84 views
1

我想设置一个使用apache mina sshd的ssh服务器。我想使用公钥认证,基本上我想知道如何实现apache sshd公钥认证

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的实现。这似乎毫无意义,因为它似乎将公钥与自身的模数进行比较。假设这个实现有一个bug,并且应该比较每个公钥的模数,这对于验证足够了 - 模数是否同意?当然,如果我只是将我公开可用的公钥加入到这个函数中,那么我会得到认证?

回答

7

我想我找到了答案在org.apache.sshd.server.auth.UserAuthPublicKey#auth的来源。这个类用关键字进行实际的认证。我认为使我感到困惑的是方法的名称 - authenticate()。真正发生的情况如下:

  • 的服务器请求的客户端

  • 公钥传递给PublickeyAuthenticator#authenticate

  • 所有的公共密钥,你应该在authenticate()是做检查这是你想允许的公钥

  • 如果authenticate()返回true,那么UserAuthPublicKey#auth将检查消息是否已经被用私钥签名。如果它已经验证了验证。

+0

帮我解决了谢谢。 – 2013-04-30 17:04:10

+0

有用内容谢谢 – btiernay 2013-11-13 01:51:00