2013-03-12 83 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