I client telnet o netcat possono comunicare su SSL?


62

Vorrei testare le connessioni client con IMAP su SSL, HTTPS e altri protocolli Internet sicuri basati su testo su SSL / TLS, allo stesso modo in cui utilizzerei telnet o netcat se non fossero sottoposti a tunneling su un protocollo sicuro. C'è un modo per ottenere telnet o netcat per passare attraverso SSL / TLS come con una pipe o un programma alternativo?


Risposte:


131

Non esiste un client Telnet / Netcat: sono due programmi separati e esistono almeno 10 client Telnet diversi e almeno 6 versioni Netcat diverse (netcat originale, netcat GNU, netcat OpenBSD, ncat di nmap; dimenticato il resto).

Gli strumenti preferiti provengono dalle stesse librerie TLS. Potrebbero essere un po 'prolissi, però.

  • GnuTLS ha uno strumento client TLS su Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Utilizzare -sper STARTTLS; dovrai inserire manualmente i comandi di protocollo necessari e premere CtrlDquando sei pronto.

    Supporta IPv6, convalida i certificati del server per impostazione predefinita.

  • OpenSSL ha uno strumento client TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Questo è disponibile per tutti i sistemi operativi. STARTTLS è supportato tramite -starttls imapo -starttls smtpoptions e il programma lo negozia automaticamente. (Anche se getta via la risposta iniziale del server dopo averlo fatto, ma di solito va bene.)

    Solo la versione ≥ 1.1 supporta IPv6.

    Solo la versione ≥ 1.0.2 (IIRC) convalida il certificato del server per impostazione predefinita; le versioni precedenti richiedono la specifica manuale del percorso.

(Mi piacerebbe avere anche strumenti per testare NSS e SChannel, ma non ne ho trovati.)

I programmi usano anche le stesse librerie, ma potrebbero avere meno manopole di configurazione. Alcuni addirittura saltano sui controlli dei certificati peer per impostazione predefinita ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    la modalità readline può essere utilizzata per comodità:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS non è supportato.

  • ncat da nmap supporta TLS (ma non STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Alcuni client Telnet, come il pacchetto telnet-ssl su Debian, supportano anche TLS:

    telnet-ssl -z ssl imap.gmail.com 993
    

    STARTTLS può essere attivato utilizzando starttlsdal Ctrl]menu di escape.


4
Vorrei poter semplicemente aggiungere la tua risposta preferita invece della domanda che il richiedente non si è nemmeno preoccupato di contrassegnare come accettato.
Sammitch,

Anche gnutls-cli sembra essere l'unico, con il quale posso testare STARTLS con IPv6. Grazie!
Karoshi,

OpenSSL s_clientha il supporto IPv6 nella versione 1.1.
Grawity

1
OpenSSL s_clientha una funzione "utile" in cui le linee che iniziano con R o Q sono trattate come comandi (vedi manuale ). Utilizzare -ign_eofper disabilitare questo. Inoltre, s_clientcontinuerà anche se la verifica fallisce; devi controllare che indichi "Verifica codice di ritorno: 0 (ok)" e speri che il server non tenti di falsificare questo messaggio. Meglio usare gnutls-clise possibile.
Tom,

1
Fortunatamente ha anche -verify_return_errorper questo.
Grawity

5

Si consiglia di consultare openssl s_client , ad es

# openssl s_client -connect dummy.com:8443

2

Sì, c'è un programma chiamato stunnel

ha un file di configurazione,

gli dici su quale porta ascoltare, su quale porta inoltrare.

funziona per lato client, lato server o entrambi.

così può trasformare un server che non supporta SSL, in realtà uno che lo fa.

o un client che non supporta SSL, efficacemente in uno che lo fa.

oppure fare in modo che sia un client che un server dispongano di una connessione ssl.


1

C'è anche sclient ( git ) se hai bisogno di supporto multipiattaforma (cioè Windows).

Crea un server locale che non tls tls per esempio.com

$ sclient example.com:443 localhost:3000
> [listening] example.com:443 <= localhost:3000

Invia una richiesta a example.com con telnet

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.