1
2

Python httpsサーバーとWiresharkでのTLS復号

Posted at

PythonでのhttpsサーバーとWiresharkによるTLS復号化

もともとはWiresharkで暗号化データを見たいというところからスタートし、そのためには、簡単にhttpsサーバーを構築したい、ついでにPythonにて作成で、、、ということなった。調べると下記内容の単なる組み合わせで済んだが、備忘録として記録に残す。

Pythonでのhttpsサーバー

上述リンク先のコードとほぼ同じ。

server.py
import ssl
from http.server import HTTPServer, SimpleHTTPRequestHandler

PORT = 443
CERTFILE = "./oreore.pem"
Handler = SimpleHTTPRequestHandler

context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain(CERTFILE)

with HTTPServer(("", PORT), Handler) as httpd:
    print("serving at address", httpd.server_address, "using cert file", CERTFILE)
    httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
    httpd.serve_forever()

証明書を本ファイルがあるディレクトリの”oreore.pem”としている(オレオレ証明書)。同ディレクトリにあるindex.htmlは下記となっている。

index.html
<html>
  <h1>Test12345</h1>
</html>

実行する。

% python3 server.py
$ SSLKEYLOGFILE=./key.log /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --user-data-dir=./tmp

”key.log”はWiresharkで利用されるログファイルである(後述)。

WiresharkでTLS復号化

こちらも上述リンクのとおりに実施。
Wiresharkのコピー.png
PreferenceのProtocol TLSにて、シークレットログファイル(ここではkey.log)を定める。

検証

アクセス

ループバックアドレス”https://127.0.0.1/”へアクセスする。オレオレ証明書なので下記メッセージが表示されるが、無視して進む。
プライバシーエラー.png
Test12345.png
index.htmlの内容が表示されている。

Wiresharkで取得したデータ

同じキャプチャファイルを、シークレットログファイル指定がある場合とない場合とで比較してみる。ログファイル指定がある場合が下記。
key指定ありのコピー.png
HTTPのコマンドやレスポンスが見えるが、ログファイル指定がない場合が下記となり、それらが見えない。
key指定なしのコピー.png
ポート番号が443であることも確認(下記)。
Port443のコピー.png
シークレットログファイル指定がある場合で、シーケンスを表示してみる。ここでは、TLSストリームを選択。
追跡.png
その結果が下記となる。
TLSストリーム.png
HTTPの詳細が見える。まずは意図したことは実施できた。

server.pyログ

参考までに、server.pyログを表示。

serving at address ('0.0.0.0', 443) using cert file ./oreore.pem
127.0.0.1 - - [18/May/2024 16:32:23] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/May/2024 16:38:33] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/May/2024 16:44:36] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/May/2024 16:44:36] code 404, message File not found

EOF

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2