Quali strumenti possono essere utilizzati per MitM in un ambiente controllato per decifrare + ritrasmettere HTTPS su traffico MTLS con SNI?

5

Ho un ambiente completamente controllato (routing, DNS, CA, chiavi private, certificati) tra due appliance chiuse che comunicano su HTTPS. Il traffico si trova su un reciproco canale autenticato TLS, utilizzando l'indicazione del nome del server, nonché le chiavi della curva ellittica.

Ho bisogno di uno strumento (o di un set di strumenti) che possa usare le mie chiavi e certificati privati del client e del server, nonché in grado di eseguire SNI, per "impersonare" il server verso il client, copiare / scaricare il traffico decrittografato, quindi inoltrare sul traffico come se provenisse dal client e viceversa.

Non posso fare molto contro gli apparecchi stessi (ad esempio escludendo le chiavi EC / DH, per consentire una semplice decrittografia del traffico in una fase successiva) ma ho tutti i certificati e le chiavi private e posso inviare manualmente il traffico dove Voglio, non ho bisogno di particolari trucchi per il proxy.

Ho avuto un moderato successo con openssl s_client / s_server + tee in una pipe, ma questo sembra interrompersi dopo una sola connessione.

Altri strumenti che ho provato o non sono in grado di gestire SNI, o insistono su certificati "falsi", che non ho davvero bisogno o voluto (specialmente se i certificati falsi non soddisfano i miei requisiti / app) e sono generalmente più generali scopo delle mie esigenze.

Non sto cercando un'appliance o un software di livello commerciale e non ho bisogno della possibile soluzione per generare certificati. Li ho, così come le chiavi private.

Ho bisogno di qualcosa che può ascoltare su tcp / 443 con il PK / cert / chain fornito e stabilire la sessione TLS, memorizzare / scaricare i dati non crittografati, quindi riprodurre il contenuto ricevuto dal client verso il server, in un'altra sessione TLS che utilizza SNI e il client PK / catena / catena forniti come strettamente corrispondenti all'originale possibile. Dovrebbe essere in grado di gestire e inoltrare i dati di risposta anche sulla stessa sessione TLS, oltre a connessioni multiple (come in serie, non parallele). Ho bisogno di catturare il traffico rigorosamente tra le due scatole conosciute.

    
posta Zoltán Kelemen 14.01.2018 - 17:22
fonte

2 risposte

5

Oh, bene, dal 1.7.8, Nginx supporta le proxy_ssl_certificate [_key] direttive che fanno esattamente ciò di cui hai bisogno. Imposta un proxy inverso con certificato server e percorsi chiave inseriti rispettivamente in ssl_certificate e ssl_certificate_key e aggiungi certificato e chiave del client in modo simile tramite proxy_ssl_certificate e proxy_ssl_certificate_key .

Non dimenticare di abilitare l'autenticazione del certificato client tramite la direttiva ssl_client_certificate . Il tuo certificato CA client dovrebbe essere usato per quello. Ecco un semplice tutorial .

SNI è supportato specificando diverse direttive server sul lato client e aggiungendo proxy_ssl_server_name direttive sul lato proxy.

P.S. La differenza tra questa domanda e quella che ho considerato un duplicato di questo è che non vuoi generare al volo certificati client (cosa che Nginx non può fare comunque per te).

    
risposta data 15.01.2018 - 04:16
fonte
-1

Suggerirei di provare Apache con mod_proxy e mod_dumpio. Puoi usare mod_headers per copiare le intestazioni di autenticazione del client - vedi qui .

    
risposta data 14.01.2018 - 23:14
fonte

Leggi altre domande sui tag