3

双方向SSL認証を必要とするサーバーおよびクライアントベースのアプリに取り組んでいます。(クライアントはサーバーを認証し、サーバーは両方とも SSL 証明書を使用してクライアントを認証します。)

私は Netty を初めて使用するので、これに関してはほとんど疑問がありません。

  1. Netty を使用して双方向認証は可能ですか?
  2. サーバーとクライアントの両方のパイプラインファクトリーに別の SslHandler を追加することで簡単に実現できますか?
  3. 上記が当てはまる場合、ChannelConnected() メソッドで必要な SslHandler を取得して SslHandshake を実行するにはどうすればよいですか? また、パイプラインを再度呼び出すことにより、ChannelConected() メソッドで 2 番目のハンドシェイクを呼び出すことは可能ですか?
  4. これに関して参照できる例はありますか?

これ、答え、または正しい方向へのプッシュに関する助けに本当に感謝しています。

4

3 に答える 3

11

Netty を使用して双方向認証は可能ですか?

はい

サーバーとクライアントの両方のパイプラインファクトリーに別の SslHandler を追加することで簡単に実現できますか?

はい

上記が当てはまる場合、ChannelConnected() メソッドで必要な SslHandler を取得して SslHandshake を実行するにはどうすればよいですか?

を作成するときは、キーストアとトラストストアを正しくセットアップする必要がありますSSLContext

また、パイプラインを再度呼び出すことにより、ChannelConected() メソッドで 2 番目のハンドシェイクを呼び出すことは可能ですか?

メモリから、クライアントとサーバーの認証は最初のハンドシェイクで行われます。

クライアントで、クライアントの秘密鍵をキーストアにインストールし、サーバーの公開鍵をトラストストアにインストールします。

サーバーで、サーバーの秘密鍵をキーストアにインストールし、クライアントの公開鍵をトラストストアにインストールします。

これに関して参照できる例はありますか?

  • これは私がウェブソケットに対して行ったです。サーバーキーストアのセットアップ方法のみを示します。の 2 番目のパラメーターとしてトラストストアを追加する必要があります。serverContext.init(kmf.getKeyManagers(), null, null);

  • トラスト ストアを設定した Scala での同様の例を次に示します。

  • SSLContext のセットアップ方法に関する適切なJava ガイドを次に示します。

お役に立てれば。

于 2012-05-16T00:46:42.833 に答える
3

双方向認証では、サーバーとクライアントの両方が他方が信頼する証明書を持っている必要があります。クライアントは秘密鍵を生成し、それを自分の鍵ストアに保管し、サーバーのトラストストアが信頼する誰かによって署名される必要があります。

どんなコードを書くかだけの問題ではありません。

于 2012-05-15T10:17:19.467 に答える
1

SSL はプレゼンテーション層プロトコルであり、SSL ハンドシェイクはソケット接続が確立された直後、アプリケーション層が使用可能なソケット接続を取得する前に発生します。使用しているアプリケーションに関係なく、SSL プロトコル層が整っていれば、SSL で作業できます。

上記の @EJP で述べたように、双方向認証は単なる設定の問題です。両者が互いの信頼チェーンを確立して検証できる場合、ハンドシェイクは成功します。SSL トラストストアの構成については、netty 構成マニュアルを参照してください。

于 2012-05-15T10:27:12.987 に答える