.getPublicKey()
公開鍵の型を返すメソッドを認識しています。ただし、この関数は、使用された鍵交換のタイプ (EDH または RSA) を通知しません。私が正しければ、公開鍵のタイプのみを返します。私の質問は: リモート サーバーとの SSL 接続を開始するときに使用されるキー交換と認証プロトコルを取得するにはどうすればよいですか?
2 に答える
SSLSocket
またはからSSLEngine
、まず を取得しSSLSession
ます。これにより、現在の SSL/TLS セッションに関する情報が得られます。
を使用するgetCipherSuite()
と、キー交換タイプ (および暗号化アルゴリズム) を含む暗号スイート名が取得されます。Oracle JRE に実装されている暗号スイートは、SunJSSE プロバイダーのドキュメントにリストされています。TLS 仕様で命名規則を見つけることができます: 後TLS_
(またはSSL_
古い名前の場合) と前の最初の部分_WITH_
は、鍵交換アルゴリズム ( DHE_DSS
、DHE_RSA
、DH_anon
、DH_DSS
、または)DH_RSA
を示します: 比較的単純な正規表現で抽出できるはずです関連情報。NULL
RSA
(あなたは言及してgetPublicKey()
いますが、それをどこで呼んでいるのかは言っていません。サーバーの証明書にも適用する必要がありますSSLSession
. .)
それが証明書.getPublicKey()
の方法だと思い
ます。PublicKey#getAlgorithm()を使用してアルゴリズムを見つけることができます
文字列 getAlgorithm()
このキーの標準アルゴリズム名を返します。たとえば、「DSA」は、この鍵が DSA 鍵であることを示します。標準のアルゴリズム名については、Java Cryptography Architecture API Specification & Reference の Appendix A を参照してください。