1

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);

}

渡されたのは別の公開鍵であることがわかりました。そのため、param で指定された公開鍵とサーバーが持っている公開鍵を比較することになっていると思います。しかし、私はそれを行う方法がわかりません。

私が見つけた1つのことは、この実装です。公開鍵のモジュラスをそれ自体と比較しているように見えるため、これは無意味に思えます。この実装にバグがあり、各公開鍵のモジュラスを比較する必要があると仮定すると、認証にはこれで十分でしょうか?モジュライは一致しますか? 公開されている公開鍵をこの関数に入力しただけで、認証されるのでしょうか?

4

2 に答える 2

8

のソースで答えを見つけたと思いますorg.apache.sshd.server.auth.UserAuthPublicKey#auth。このクラスは、キーを使用して実際の認証を行います。私を混乱させたのは、メソッドの名前だと思います - authenticate()。実際に何が起こるかは次のとおりです。

  • サーバーはクライアントの公開鍵を要求します

  • 公開鍵が渡されるPublickeyAuthenticator#authenticate

  • あなたがすることになっているのauthenticate()は、これが許可したい公開鍵であることを確認することだけです

  • authenticate()true を返す場合はUserAuthPublicKey#auth、メッセージが秘密鍵で署名されていることを確認します。存在する場合、認証は検証されています。

于 2013-03-13T17:42:58.307 に答える