Я столкнулся с точно такой же проблемой с Чарльзом Прокси в сочетании с Wireshark.
Я думаю, что проблема в том, что Чарльз отправляет два (или более) сертификата клиенту (проверьте сообщение сертификата, отправленное с прокси-сервера клиенту). Затем 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
Модуль сертификата, отправленного Чарльзом, не совпадает с модулем сгенерированного пользователем закрытого ключа.
И 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
Чарльз генерирует новый сертификат для каждого хоста, используя пользовательский сертификат в качестве корневого сертификата. К сожалению, я не нашел способа извлечь этот закрытый ключ для каждого хоста, сгенерированный Чарльзом. Я предлагаю использовать Burp Proxy. В Burp вы можете выбрать, какой тип сертификата вы хотите использовать.