Como usar Charles como proxy para descriptografar mensagens HTTPS no Wireshark?

2

Eu sei que posso visualizar dados HTTPS descriptografados diretamente em Charles. Mas quero ver mensagens SSL de nível inferior no Wireshark. Então eu configurei Charles como proxy SSL, usando meu próprio certificado, e configurei a preferência do dissector SSL no Wireshark com o endereço IP local e minha chave privada.

Noentanto,asmensagensnoWiresharkaindaestãocriptografadas.

O que eu senti falta?

    
por an0 11.02.2015 / 22:50

1 resposta

1

Eu encontrei exatamente o mesmo problema com Charles Proxy em combinação com o Wireshark.

Acho que o problema é que Charles envia dois (ou mais) certificados para o cliente (verifique a mensagem de Certificado enviada do proxy para o cliente). O Wireshark usará o primeiro certificado dessa lista, que provavelmente não corresponderá à chave privada que você gerou.

(É exatamente isso que o usuário dave_thompson_85 está querendo saber nos comentários.)

Eu verifiquei isso extraindo o certificado do Wireshark. Observe que o Wireshark extrai o certificado no formato .der . Em seguida, convertei o arquivo .der para um certificado .pem :

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

Eu também convertei o .pem para um .crt , mas isso não é necessário.

Certificado enviado por Charles ao cliente

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

7a37a32781daf79402623c19ac9c8d7f

Certificado personalizado configurado no Charles

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

62ea5ed061fca62efaaecbbb0226b08e

A chave privada correspondente

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

62ea5ed061fca62efaaecbbb0226b08e

O módulo do certificado enviado por Charles não corresponde ao módulo da chave privada gerada por costume.

E o Wireshark também registra esse problema durante a Dissecação de 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 gera um novo certificado por host usando o certificado personalizado como certificado raiz. Infelizmente, não encontrei uma maneira de extrair essa chave privada por host gerada por Charles. Eu sugiro usar o Burp Proxy. No Burp, você pode selecionar o tipo de certificado que deseja usar.

    
por 17.07.2015 / 13:02