diffie hellmanキー交換に依存するSSL暗号を使用する場合、使用される秘密キーのサイズは、そのキー交換のセキュリティにとって非常に重要です。
「openssl s_client」ツールを使用してサーバーに接続する場合、使用されているDHパラメーターを照会するにはどうすればよいですか?
diffie hellmanキー交換に依存するSSL暗号を使用する場合、使用される秘密キーのサイズは、そのキー交換のセキュリティにとって非常に重要です。
「openssl s_client」ツールを使用してサーバーに接続する場合、使用されているDHパラメーターを照会するにはどうすればよいですか?
回答:
使いやすいコマンドラインスイッチについては知りませんが、openssl s_client
コマンドラインで-msg
は、ハンドシェイクメッセージの16進ダンプを取得するオプションを追加できます。次に、ServerKeyExchange
メッセージを探します。次のようになります。
<<< TLS 1.2 Handshake [length 030f], ServerKeyExchange
0c 00 03 0b 01 00 ff ff ff ff ff ff ff ff c9 0f
da a2 21 68 c2 34 c4 c6 62 8b 80 dc 1c d1 29 02
4e 08 8a 67 cc 74 02 0b be a6 3b 13 9b 22 51 4a
(...)
そして、それはそのように読みます:
0c 00 03 0b
:長さが0x00030Bバイトの「ServerKeyExchange」タイプ(「0c」)のメッセージ。01 00
、0x0100バイトでエンコードされた整数を意味します。256バイトであるため、モジュラスの長さは2041〜2048ビットです。ff ff ff ff...
。モジュラスの長さは正確に2048ビットです。ECDHE暗号スイート(楕円曲線)を使用する場合ServerKeyExchange
、もちろん形式は異なります。
メッセージの定義については、標準を参照してServerKeyExchange
ください。DHE暗号スイートの場合、モジュラスp、ジェネレーターgおよびサーバーDH公開キーyがこの順序で含まれ、それぞれ上記の形式の大きな整数として表されます(バイト単位の長さを含む16ビットヘッダー、次に整数符号なしビッグエンディアンエンコーディングの値)。
最近のOpenSSLのバージョンは、サーバーの鍵ペアの強さ(セキュリティの観点から)マッチが(に使用したDHの係数サイズを選択する傾向が署名しServerKeyExchange
たメッセージを)。上記の例では、サーバーは2048ビットのRSAキーを持っているため、OpenSSLは2048ビットのDHモジュラス(この場合、RFC 3526、セクション3で説明されている既知のモジュラス)の使用を選択しました。
他の一部のサーバーは、より大きなDHグループをサポートしない既存のクライアントとの互換性を確保するために1024ビットDHグループに固執します(最大の犯罪者はJavaのSSL実装であり、2012年のJava 8ビルド56で修正されました)。DHE暗号スイートのTLSプロトコルの既知の欠陥は、クライアントがサポートするモジュラスサイズを指定する方法がないことです(クライアントは受け入れる曲線の正確なリストを指定できるため、これはECDHEで修正されます) 。
ServerKeyExchange
と0c 00 03 0b
。出力を取得するための正確なコマンドを提供できますか?で始まるハンドシェイクがありません0c
PEM形式の証明書がある場合は、このコマンドを試すことができます。Opensslコマンドから適切な出力が得られるはずです。
openssl dhparam -inform PEM -in ./imapd.pem -check -text (出力例) PKCS#3 DHパラメーター:(512ビット) プライム: xx:xx:xx:xx xx:xx:xx:xx xx:xx:xx:xx ジェネレーター:2(0x2) DHパラメータは問題ないようです。 -----開始DHパラメーター----- XXXX XXXX ----- END DHパラメーター-----
これがあなたが探しているものであることを願っています。
s_client
では、「ハンドシェイクがxを読み取りyを書き込む」直前に、「Temp server key」DH&sizeまたはECDH&curveを常に表示します。デコードします。DHEを自動選択するのは最近のApache mod_sslです:httpd.apache.org/docs/trunk/mod/mod_ssl.html#sslcertificatefile(Javaクライアントに関する問題に注意してください)。