「クライアント認証が必要」で構成されたSslFilterでMinaを使用しています。
接続が確立され、ハンドシェイクが完了したら、サーバー上の IoHandler のサブクラスから接続の反対側にあるピアの証明書 (またはプリンシパル) を取得する方法は?
編集:つまり、ハンドシェイクが完了して IoHandler.sessionOpened() が呼び出されたときに、IoSession とプリンシパルの間の関係を取得する方法。
「クライアント認証が必要」で構成されたSslFilterでMinaを使用しています。
接続が確立され、ハンドシェイクが完了したら、サーバー上の IoHandler のサブクラスから接続の反対側にあるピアの証明書 (またはプリンシパル) を取得する方法は?
編集:つまり、ハンドシェイクが完了して IoHandler.sessionOpened() が呼び出されたときに、IoSession とプリンシパルの間の関係を取得する方法。
SSLSession
を使用して取得できるようですSslFilter.getSslSession(...)
。次に、 を使用SSLSession.getPeerCertificateChain()
してクライアント証明書チェーンを取得します。実際のクライアント証明書は、その配列の位置 0 にあります。
そのために IoHandler を直接操作するのではなく、 SslFilterコンストラクターに提供する必要があるSSLContextを使用して行われます。エコー サーバーの例を見ると、実際のチェックは DefaultTrustManagerFactory で行われていることがわかります。個人的には、その例は少し複雑すぎると思います。もっと簡単なものを見つけたら投稿します。