デバッグと分析のためにサーバーのhttpsトラフィックを復号化したいのですが。私のサーバーは、mod_wsgiとDjangoを実行するdebian 9 Apache2サーバーです。
私はこの投稿を見ました: OpenSSLアプリケーションからプリマスターキーを抽出する
そして、私は https://httpd.Apache.org/docs/2.4/mod/mod_ssl.html#sslopensslconfcmd を使用できる可能性があると考えました
apacheにこれらのdhキーを出力させるにはどうすればよいのかわかりません。
多くのセキュリティアプリケーションやベンダー(IPS/IDSシステムなど)によって行われているため、可能であることはわかっています。
何か案は?
Apache om Debian 9(Stretch)はOpenSSL 1.0.2( Apache2-binlibssl1. への依存関係を参照)を使用するため、そのリンクされた投稿に記載されているアプローチを使用できます。スタートアップスクリプトを変更して、LD_PRELOAD=/path/to/libsslkeylog.so
およびSSLKEYLOGFILE=/tmp/your.keys
をエクスポートできます。
その方法は、アプリケーションによって異なります。 systemdの場合、systemctl edit Apache2
を試してオーバーライドを作成できます。 それでもApacheのような古典的なsysvinit initスクリプトである場合は、上記の2つの環境変数を使用して Apacheはsysvinitスクリプトを使用していないようなので、systemdユニットファイルを変更する必要があります。/etc/init.d/Apache2
を変更してみてください。 export
キーワードを忘れないでください。
これにより、SSLKEYLOGFILE環境変数で指定されたファイルにマスターシークレットが書き込まれます。これは正確にはプリマスターシークレットではありませんが、Wiresharkでの復号化を有効にするために使用できます。後者の詳細については、次も参照してください https://wiki.wireshark.org/TLS
ユースケースによっては、サーバーの変更をスキップして、クライアント側のキーをタップする方が簡単な場合があります。 FirefoxとChromiumには、SSLKEYLOGFILE環境変数のサポートが組み込まれています。 curlの新しいバージョンもサポートしていますが、curlの古いバージョンやOpenSSLを使用するその他のアプリケーションでは、上記のsslkeylog.shアプローチのようなものが必要です。
sslkeylog.so
ライブラリはOpenSSLバージョンに固有です。バージョン1.0.2( libssl1.0.2 Debian Stretchの場合)はOpenSSL 1.1.0( libssl1.1 Debian Stretchの場合)と互換性がありません。ライブラリをビルドするには、対応する開発ヘッダーファイルが必要です。これらは、それぞれのバージョンの libssl1.0-dev または libssl-dev パッケージから入手できます。
ソースを取得してライブラリを構築するのは簡単です。
Sudo apt install git make gcc libssl1.0-dev
git clone --depth=1 https://git.lekensteyn.nl/peter/wireshark-notes
cd wireshark-notes/src
make
# Optional: install to a specific location. Adjust paths below if you skip this.
Sudo install libsslkeylog.so /usr/local/lib/
これにより、現在のディレクトリにlibsslkeylog.so
ファイルが作成されます。機能するかどうかをテストするには:
$ ./sslkeylog.sh curl https://example.com -sI
CLIENT_RANDOM ... ... <-- expected for TLS 1.2
HTTP/2 200
...
$ ldd /usr/bin/curl | grep ssl
libssl.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 (0x00007fc5a088d000)
最後のコマンドは、プログラムがリンクされたlibsslのバージョンを示しています。 Apacheでも同様のことができます。プライマリプログラム(Apache2)は、別のライブラリを介してTLSサポートをロードするため、次のことを確認する必要があります。
$ ldd /usr/lib/Apache2/modules/mod_ssl.so | grep ssl
libssl.so.1.0.2 => /usr/lib/x86_64-linux-gnu/libssl.so.1.0.2 (0x00007f8dbb6ed000)
何らかの理由でlibssl.so.1.1が表示される場合は、代わりにSudo apt install libssl-dev
を使用し、make -B
で再構築する必要があります。
次のステップは、Apache2
サービスのsystemdユニットファイルを変更することです。 systemctl edit Apache2
を実行すると、/etc/systemd/system/Apache2.service.d/override.conf
のエディターが開き、追加する必要があります。
[Service]
Environment=LD_PRELOAD=/usr/local/lib/libsslkeylog.so
Environment=SSLKEYLOGFILE=/tmp/your.keys
(Sudo systemctl restart Apache2
)を再起動した後、/tmp/systemd-private-*-Apache2.service-*/tmp/your.keys
のどこかにキーが作成されます。短いパスが必要な場合は、/home/user/your.keys
のように入力できますが、www-data
ユーザーがファイルに書き込み可能であることを確認してください。
テストが完了したら、必ず削除してください。この種のテストを実行する代わりに、クライアントを一時的に変更することをお勧めします。上記のように、sslkeylog.sh
はクライアントでも機能します。