web-dev-qa-db-ja.com

Charlesをプロキシとして使用してWiresharkでHTTPSメッセージを復号化する方法は?

復号化されたHTTPSデータをCharlesで直接表示できることは知っています。しかし、Wiresharkで低レベルのSSLメッセージを表示したいと思います。そこで、自分の証明書を使用してCharlesをSSLプロキシとして設定し、WiresharkでローカルIPアドレスと秘密鍵を使用してSSLディセクタ設定を設定します。

enter image description hereenter image description hereenter image description here

ただし、Wiresharkのメッセージは引き続き暗号化されています。

enter image description here

私は何を取りこぼしたか?

2
an0

私は、Wiresharkと組み合わせたCharlesProxyでまったく同じ問題に遭遇しました。

問題は、チャールズが2つ(またはそれ以上)の証明書をクライアントに送信することだと思います(プロキシからクライアントに送信される証明書メッセージを確認してください)。次に、Wiresharkはそのリストの最初の証明書を使用します。これは、生成した秘密鍵とはおそらく一致しません。

(これはまさにユーザーがコメントで疑問に思っていることです dave_thompson_85 。)

Wiresharkから証明書を抽出してこれを確認しました。 Wiresharkは証明書を.der形式で抽出することに注意してください。次に、.derファイルを.pem証明書に変換しました。

openssl x509 -inform DER -outform PEM -text -in wireshark_charles.der -out wireshark_charles.pem

また、.pem.crtに変換しましたが、これは必須ではありません。

チャールズからクライアントに送信された証明書

$ openssl x509 -noout -modulus -in wireshark_charles.crt | openssl md5

7a37a32781daf79402623c19ac9c8d7f

チャールズで設定されたカスタム証明書

$ openssl x509 -noout -modulus -in charles_custom.crt | openssl md5

62ea5ed061fca62efaaecbbb0226b08e

対応する秘密鍵

$ openssl rsa -noout -modulus -in charles_custom.pem | openssl md5

62ea5ed061fca62efaaecbbb0226b08e

Charlesから送信された証明書のモジュラスは、カスタム生成された秘密鍵のモジュラスと一致しません。

また、WiresharkはSSL分析中にこの問題をログに記録します。

ssl_decrypt_pre_master_secret wrong pre_master_secret length (128, expected 48)
ssl_generate_pre_master_secret: can't decrypt pre master secret

Charlesは、カスタム証明書をルート証明書として使用して、新しいホストごとの証明書を生成します。残念ながら、Charlesによって生成されたこのホストごとの秘密鍵を抽出する方法が見つかりませんでした。 BurpProxyを使用することをお勧めします。 Burpでは、使用する証明書のタイプを選択できます。

1
Safaci