前置き
「Splunk Streamを使ってhttps通信のWire Dataを可視化」から続いて、今度はhttps通信をサーバーの秘密鍵を用いて復号したいと思います。
ポイント
- Splunk Streamを使って、SSL復号が正常にできた場合、以下のstream:httpデータのように見えてきます。

手順
参考元公式情報はこれだけ!Use SSL keys for decryption
-
まず、公開サーバの秘密鍵(privatekey)を手元に用意します。
-
公開サーバの秘密鍵をSplunkサーバ上の任意のフォルダにアップロードします。
-
秘密鍵をSplunk Stream Appに読み込ませて独自の鍵DBを作成します。
- こちらのSplunk Stream紹介記事では Splunkサーバ(Deployment Server兼用)を使用しているため、鍵DBの作成はSplunkサーバにて実施します。
-
$SPLUNK_HOME/etc/apps/Splunk_TA_stream/linux_x86_64/bin
配下に移動- 例:
cd /opt/splunk/etc/deployment-apps/Splunk_TA_stream/linux_x86_64/bin
- 例:
-
./streamfwd --addsslkey <key_name> <pem_file> <password>
コマンドを実行- *key_nameは任意。pem_fileは公開サーバの秘密鍵。passwordはパスワードなければ無しでも良し。
- 例:
./streamfwd --addsslkey serverA_key private.key
- 成功すると以下のメッセージが表示される
- 例:
key 'serverA_key' added to /opt/splunk/etc/deployment-apps/Splunk_TA_stream/local/keystore.db
- 例:
-
~deployment-apps/Splunk_TA_streamを再度、Deployment Server経由でWebサーバに配布します。
-# /opt/splunk/bin/splunk reload deploy-server
-
SSL復号テスト確認
- QualysのSSL Server Testを利用すると、以下のようなデータが届きかつ、復号できていることがわかる。
-
学びと課題点
- Splunk Stream Appが復号をサポートしている鍵交換形式(kx)がRSAのみである点。
- 今回一番苦労したのは、Webサーバ側のssl.confのSSLCipherSuiteを変更して、なるべくRSAベースの鍵交換を使っているSSLCipherSuiteをネゴシエート元のクライアントに利用させるためのWebサーバ側の設定確認に時間を使いました。
- OSとブラウザの組み合わせによっては、 RSAベースの鍵交換を利用してくれないため、その場合、Streamでは復号できない制限があることもわかりました。
- Splunk internalログを見ると、「cipher suiteが復号できない形式です」的なメッセージが出ています。
-
- 以上のことから、Webサーバ側でサポートしているCipher Suiteが広範囲(Diffie-Hellmanなども対応)の場合、全ての HTTPS通信を Splunk Streamで復号することは現実的にはできないことも分かりました。
- Webリクエストの内、何割かは復号できないものもあることを理解した上でSSL復号機能とは付きあう必要がありそうです。
その他参考記事
-
理解してるつもりの SSL/TLS でも、もっと理解したら面白かった話
- 良記事です。cipher suiteの理解ができます。