今日、メールサーバーに仮想ドメインを追加してから、DovecotTLS接続のセキュリティをチェックしました。テストは、Thunderbirdを使用してリモートホストから実行されました。 tcpdump
で接続をキャプチャし、それをssldump
に渡しました。また、許可された暗号を確認するためにnmap
を使用しました。それはすべてPastebinにあります ここ 。
サーバー->クライアントChangeCipherSpec
(TLS_RSA_WITH_RC4_128_MD51 10 0.5695
を使用すると表示されます)がわかりませんTLS接続の設定方法について混乱しているかもしれませんが、RC4タイプの暗号が有効になっていないので(またはなんでこんなことが起こっているの?
私は最近この問題に自分で遭遇しました。 ssldump
とopenssl s_client
を同時に実行します-openssl
は、アクティブな暗号がAES256-SHA
であることを示しますが、ssldump
は出力にTLS_RSA_WITH_RC4_128_MD5
を出力します。
バグを見つけたと思いますssldump
に。ソースコードを調べてみると、次のことがわかりました。
ssl/ssl_enum.c:20
の関数decode_ContentType_handshake()
でデコードされます。ssl_decode_switch(ssl,HandshakeType_decoder,t,dir,seg,data)
を呼び出します。ここで、HandshakeType_decoder
はdecoder
構造体の配列です\ssl_decode_switch(ssl,dtable,value,dir,seg,data)
(ssl/ssl_print.c:204
)は、type == value
またはtype == -1
( "not found")のdtable
エントリが見つかるまで、decoder
配列を繰り返し処理します。HandshakeType_decoder
のssl/ssl_enum.c:212
の定義を見ると、配列はtype == -1
を含むdecoder
構造体で終了していません-最後に0
がありますHandshakeType_decoder
定義の直後には、同じ構造体decoder
の配列であるcipher_suite_decoder
(ssl/ssl_enum.c:266
)の定義があります。この配列には、暗号のリストが含まれています。HandshakeType_decoder
で見つからない場合、ssl_decode_switch()
はcipher_suite_decoder
データの直後のメモリにあるため、HandshakeType_decoder
で検索を続行します。decode_ContentType_handshake()
はハンドシェイクパケットを4
タイプにデコードしましたが、ssl_decode_switch()
はHandshakeType_decoder
で見つかりませんでした。ただし、偶然にも、4
は、cipher_suite_decoder
エントリのtype
値とname == TLS_RSA_WITH_RC4_128_MD5
です。この問題を調査する時間がなくなったため、ssldump
が無効なタイプのハンドシェイクパケットをデコードしようとしている理由がわかりません。ただし、オーバーランを防ぐために、HandshakeType_decoder
配列は-1
で終了する必要があると確信しています。
SSLDumpがそこで何をしているのかわかりません。
ただし、クライアントは2つの暗号スイートのサポートのみを通知し、サーバーはラベルの付いたものを選択します
cipherSuite Unknown value 0xc014
そして この16進値はにデコードされます :
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
したがって、RC4はありません。