Come decifri i pacchetti ssl (traffico) con la chiave privata? Ho provato a farlo con ssldump e opensl, ma niente ha funzionato.
Come decifri i pacchetti ssl (traffico) con la chiave privata? Ho provato a farlo con ssldump e opensl, ma niente ha funzionato.
Ssldump dovrebbe essere in grado di farlo, ma sembra essere non mantenuto (nell'archivio sorgente dell'ultima versione, la data dell'ultima modifica di tutti i file è nel 2002 o prima) quindi è del tutto possibile che non supporti SSL / TLS più recenti; in realtà, è altamente improbabile che un software del 2002 possa elaborare i nuovi formati di crittografia definiti in TLS 1.2 (AES / GCM). TLS 1.1 è stato pubblicato nel 2006 e TLS 1.2 nel 2008.
OpenSSL è una libreria che implementa il protocollo, ma non è pensata per analizzare una sessione registrata.
Potresti avere migliori possibilità con Wireshark , che ha un'ampia documentazione su come usarlo per decifrare le sessioni registrate.
C'è un parametro importante da ricordare: la decrittografia di una sessione passivamente registrata (con una copia della chiave privata del server) funziona solo se lo scambio di chiavi era di tipo RSA o statico DH; con le suite di crittografia "DHE" e "ECDHE", non sarà possibile decrittografare tale sessione, anche con la conoscenza della chiave privata del server. In tal caso, sarà necessario il "master secret" negoziato o utilizzare la chiave privata del server per intercettare attivamente la connessione (in un Man-in-the-middle setup).
Se hai accesso al lato client che effettua le connessioni e il browser è Firefox (o, credo, basato su NSS), puoi scaricare le chiavi effimere stabilite per qualsiasi sito. Per eseguire questa corsa:
$ export SSLKEYLOGFILE=/path/to/logfile.log
$ firefox
Troverai logfile.log
contiene una serie di linee lungo le linee di CLIENT_RANDOM <hex>
- puoi trovare queste documentate qui .
In wireshark, puoi quindi andare a Edit | Preferences | Protocols | SSL
e impostare il "nome del file di log pre-master-secret" nel file che hai impostato sopra.
Tutte le connessioni tramite la sessione di navigazione Firefox verranno quindi decodificate e visibili, indipendentemente dall'host.
Come avvertimento, potresti non vedere più facilmente l'http di facile comprensione; Ho appena provato questo su google.com e ora sto usando apparentemente http / 2.
Sto presumendo che tu abbia un servizio abilitato a ssl e la tua chiave privata per questo e vorresti vedere la sessione non criptata - un esempio veramente utile di questo è vedere http / 2 in pratica, dato che raramente distribuito senza tls (la maggior parte dei browser non lo usa su http) e si stanno chiedendo perché non si può, in una configurazione moderna. Il problema, come dice Tom, è che ti servono le chiavi effimere.
Puoi provare il seguente comando con tshark (wiresharel basato sul terminale) per decodificare una sessione live:
tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list:,443,http,./private_key.pem" -o "ssl.debug_file:rsa_private.log" -R "(tcp.port eq 443)" port 443
Si noti che questo non decrittografa i dati dell'applicazione.