0

セットアップ:

  • 接続を保護するためにSSLHandlerを使用してNetty(v4.0.8)クライアント/サーバーを使用してセットアップしました。
  • Jetty 環境内で Netty パーツを実行しているサーバーでは、クライアントはコマンド ラインから呼び出す JAR です。
  • クライアントとサーバーの自己署名証明書があります。
  • 両側(サーバーとクライアント)で使用するトラストストアにCA証明書があります。JREキーストアにCA証明書もあります(念のため)
  • 私が抱えている問題を追跡するために、独自のトラストストアを実装しています。

問題:

  • クライアントとサーバーが同じマシンで実行されている場合、すべて問題ありません。
  • クライアントとサーバーが異なるマシンで実行されている場合、最初にサーバーで (次にクライアントで) SSLPeerUnverifiedException を取得します。
  • クライアントの Python 実装もあります (SSL 接続を使用)。これ自体は、同じマシンでも別のマシンでも問題なく動作します。

これまでの分析が示している

  • Trust-Manager はクライアントとサーバーで getAcceptedIssuers() を正しく呼び出します
  • checkServerTrusted() がクライアントで呼び出されます
  • サーバー上で checkClientTrusted() が呼び出されない

代わりに、例外が発生します。

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificateChain(SSLSessionImpl.java:401)

これにはサーバーで時間がかかるため、クライアント側ではタイムアウトが発生します

javax.net.ssl.SSLException: handshake timed out

そしてその後

SSLPeerUnverifiedException:  javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

発生します。

Handler-Class の netty の userEventTriggered() メソッドで例外が発生します。着信イベントが SslHandshakeCompletionEvent であるかどうか、および SSLSession から証明書を取得しようとしたときにチェックします。

4

1 に答える 1