openssl
コマンドラインツールを使用して、手動でデータを抽出/暗号化/復号化しようとしています。
私はRFC5246をレビューして、何をする必要があるかを理解してきました。そのツールでこのステップを実行できるかどうかは、私にははっきりしません。説明の秘密鍵は、自己署名証明書を作成したときに生成された秘密鍵であると想定しています。
サーバー認証と鍵交換にRSAを使用する場合、48バイトのpre_master_secretがクライアントによって生成され、サーバーの公開鍵で暗号化されてサーバーに送信されます。サーバーは秘密鍵を使用してpre_master_secretを復号化します。次に、上記のように、両方の当事者がpre_master_secretをmaster_secretに変換します。
私の仮定が正しいかどうか誰かに教えてもらえますか? openssl
コマンドラインツールを使用して、サーバーの秘密鍵とクライアントから暗号化されたpre_master_secretを提供して、サーバーのpre_master鍵を生成し、マスター鍵の作成に使用できますか?
もしそうなら、私はツールにあまり精通していないので、それを行う方法がわかりません。
私が使用している暗号スイートはTLS_RSA_WITH_AES_256_CBC_SHAであり、Wiresharkでクライアントからのpre_master_secretの長さが256バイトであることがわかります。
完全にはわかりませんが、答えはノーだと思います。 openssl
コマンドラインクライアントは、ツールの異種コレクションです。 X.509コマンドは証明書の操作に役立ちますが、暗号化コマンドがOpenSSL自体のテスト以外に役立つことはめったにありません。
一般的なアルゴリズムを使用して暗号計算を行う必要がある場合は、Pythonインタラクティブコマンドラインと Cryptodome ライブラリを使用することをお勧めします。
ただし、SSL接続を復号化するには、通常、Wiresharkを使用するのが最も簡単な方法です。 秘密鍵の場所をWiresharkに伝えます これにより、RSA暗号化を使用するTLS接続が復号化されます。一時的なDiffie-Hellmanを使用する接続の場合、キーだけでトラフィックを復号化することはできません。必要なのは クライアントまたはサーバーからの追加情報 です。
TLS_RSA_WITH_AES_256_CBC_SHA
暗号スイートを使用することは、いくつかの理由から悪い考えであることに注意してください。
SSL/TLS-through-1.2プレーンRSA鍵交換が使用するRSAES-PKCS1v1_5は、OpenSSLコマンドライン操作rsautl
またはpkeyutl
(2010年の1.1.0以降の後者)。それぞれのマニュアルページを参照してください。Windowsでない場合はシステムで利用できるはずです。または オンライン 。
これにより、プリマスターシークレットが提供され、それ自体ではトラフィックを復号化(または認証)できないことに注意してください。 premasterとnonceを使用してマスターシークレットを導出し、次にmaster secretとnonceを使用して作業キー(複数形)を導出する必要があります。導出関数「PRF」は、SSLv3(使用されなくなった)、TLS 1.0および1.1(RFC 2246および4346)、およびTLS 1.2(RFC 5246)で異なります。 (ドラフトされたTLS 1.3ではPRFが再び異なりますが、プレーンRSAキー交換も完全に排除されます。)
コマンドラインはSSL/TLS PRFに直接アクセスできませんが、それらが構築されたHMACを実行できます(SSLv3を除く)。上記と同じ場所にあるdgst
のマニュアルページを参照してください。-hmac $key
はShellなどから渡すことができるバイトシーケンスのみを処理できることに注意してください。これはすべてではないため、代わりに-mac hmac -macopt hexkey:$hexkey
が必要になる場合があります。
そうは言っても、私はGillesに同意しますが、wiresharkにそれをさせる方がはるかに簡単です。問題がキャプチャファイル以外の形式のデータである場合、wiresharkディストリビューションには、通常は偽のキャプチャを構築できるファイルを操作するためのいくつかの補助コマンドラインツールが付属しています。この場合、wiresharkまたはtsharkmainは復号化できます。