復号化されたHTTPSデータをCharlesで直接表示できることは知っています。しかし、Wiresharkで低レベルのSSLメッセージを表示したいと思います。そこで、自分の証明書を使用してCharlesをSSLプロキシとして設定し、WiresharkでローカルIPアドレスと秘密鍵を使用してSSLディセクタ設定を設定します。
ただし、Wiresharkのメッセージは引き続き暗号化されています。
私は何を取りこぼしたか?
私は、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では、使用する証明書のタイプを選択できます。