秘密鍵を使用して、sslパケット(トラフィック)をどのように復号化しますか?私はssldumpとopensslでこれを実行しようとしましたが、何も機能しませんでした。
Ssldump はそれを実行できるはずですが、メンテナンスされていないようです(最新バージョンのソースアーカイブでは、すべてのファイルの最終変更日は2002年以前です)。新しいSSL/TLSをサポートしない可能性は十分にあります。実際、2002年のソフトウェアがTLS 1.2(AES/GCM)で定義された新しい暗号化フォーマットを処理できる可能性は非常にありません。 TLS 1.1 は2006年に公開され、 TLS 1.2 は2008年に公開されました。
OpenSSLはプロトコルを実装するライブラリですが、記録されたセッションを分析するためのものではありません。
Wireshark を使用すると、記録されたセッションの暗号化を解除するための十分なドキュメントがあるので、チャンスが増えるかもしれません。
覚えておくべき重要なパラメーターがあります。パッシブに記録されたセッション(サーバーの秘密キーのコピーを使用)の復号化は、キー交換のタイプがRSAまたは静的DHの場合にのみ機能します。 「DHE」および「ECDHE」暗号スイートを使用すると、サーバーの秘密鍵を知っていても、そのようなセッションを復号化することはできません。その場合、ネゴシエートされた「マスターシークレット」が必要になるか、サーバーの秘密キーを使用して接続をアクティブにインターセプトする必要があります( Man-in-the-Middle の設定で)。
接続を行うクライアント側にアクセスでき、ブラウザがFirefox(または、NSSに基づく)である場合、任意のサイトに対して確立された一時キーをダンプできます。これを実行するには:
$ export SSLKEYLOGFILE=/path/to/logfile.log
$ firefox
あなたはlogfile.log
がCLIENT_RANDOM <hex>
の行に沿った一連の行を含んでいることを発見します-これらは文書化された here を見つけることができます。
WiresharkでEdit | Preferences | Protocols | SSL
に移動し、「マスター前のシークレットログファイル名」を上記で設定したファイルに設定できます。
ホストに関係なく、Firefoxブラウジングセッションを介したすべての接続が復号化されて表示されます。
注意点として、理解しやすいhttpが表示されるとは限りません。私はgoogle.comに対してこれを試したところ、どうやら現在はhttp/2を使用しているようです。
ここでは、SSL対応のサービスとこのための独自の秘密鍵があり、セッションを暗号化せずに表示したいと想定しています。これは、tlsなしでデプロイされることはめったにないので、実際にhttp/2を表示することです。 (ほとんどのブラウザはhttp経由でそれを使用しません)、そして現代の設定ではなぜ使用できないのか疑問に思っています。トムが言うように、問題は短命の鍵が必要なことです。
次のコマンドをtshark(ターミナルベースのWireshark)で試して、ライブセッションを復号化できます。
tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list:,443,http,./private_key.pem" -o "ssl.debug_file:rsa_private.log" -R "(tcp.port eq 443)" port 443
これはアプリケーションデータを復号化しないことに注意してください。