Können die Telnet- oder Netcat-Clients über SSL kommunizieren?

62

Ich möchte Clientverbindungen mit IMAP über SSL, HTTPS und andere sichere textbasierte Internetprotokolle über SSL / TLS testen, genauso wie ich es mit Telnet oder Netcat tun würde, wenn diese nicht über ein sicheres Protokoll getunnelt würden. Gibt es eine Möglichkeit, Telnet oder Netcat dazu zu bringen, SSL / TLS zu durchlaufen, z. B. mit einer Pipe oder einem alternativen Programm?

user553702
quelle
2
Dasselbe gilt für serverfault: serverfault.com/questions/102032/…
Ciro Santilli am

Antworten:

131

Es gibt keinen Telnet / Netcat-Client - es handelt sich um zwei separate Programme, und es gibt mindestens 10 verschiedene Telnet-Clients und mindestens 6 verschiedene Netcat-Versionen (Original- Netcat , GNU- Netcat , OpenBSD- Netcat , nmaps ncat; den Rest vergessen).

Die bevorzugten Tools stammen aus TLS-Bibliotheken. Sie könnten jedoch etwas ausführlich sein.

  • GnuTLS hat ein TLS-Client-Tool unter Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Verwenden Sie -sfür STARTTLS; Sie müssen die erforderlichen Protokollbefehle manuell eingeben und drücken, CtrlDwenn Sie fertig sind.

    Unterstützt IPv6 und überprüft standardmäßig Serverzertifikate.

  • OpenSSL verfügt über ein TLS-Client-Tool:

    openssl s_client -connect imap.gmail.com:993
    

    Dies ist für alle Betriebssysteme verfügbar. STARTTLS wird über -starttls imapoder -starttls smtpOptionen unterstützt und das Programm wird es automatisch aushandeln. (Die erste Serverantwort wird danach zwar verworfen, ist aber normalerweise in Ordnung.)

    Nur Version ≥ 1.1 unterstützt IPv6.

    Nur Version ≥ 1.0.2 (IIRC) überprüft das Serverzertifikat standardmäßig. ältere Versionen erfordern die manuelle Angabe des Pfads.

(Ich möchte auch Tools zum Testen von NSS und SChannel haben, konnte aber keine finden.)

Die Programme verwenden auch dieselben Bibliotheken, haben jedoch möglicherweise weniger Konfigurationsknöpfe. Einige überspringen sogar standardmäßig die Überprüfung von Peer-Zertifikaten ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    Der Readline- Modus kann wie folgt verwendet werden:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS wird nicht unterstützt.

  • ncat von nmap unterstützt TLS (aber nicht STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Einige Telnet-Clients, wie das Paket telnet-ssl unter Debian, unterstützen auch TLS:

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

    STARTTLS kann über starttlsdas Ctrl]Escape-Menü aktiviert werden .

Grawity
quelle
4
Ich wünschte, ich könnte einfach Ihre Antwort favorisieren, anstatt die Frage, die der Fragesteller nicht einmal als akzeptiert markiert hat.
Sammitch
gnutls-cli scheint auch das einzige zu sein, mit dem ich STARTLS mit IPv6 testen kann. Vielen Dank!
Karoshi
OpenSSL s_clientunterstützt IPv6 in der Version 1.1.
Grawity
1
OpenSSLs s_clienthaben eine "nützliche" Funktion, bei der Zeilen, die mit R oder Q beginnen, als Befehle behandelt werden (siehe Handbuch ). Verwenden Sie -ign_eof, um dies zu deaktivieren. Wird auch s_clientdann fortgesetzt, wenn die Überprüfung fehlschlägt. Sie müssen überprüfen, ob dort "Verify return code: 0 (ok)" steht und hoffen, dass der Server nicht versucht, diese Nachricht zu fälschen. Besser zu benutzen, gnutls-cliwenn möglich.
Tom
1
Zum Glück hat es auch -verify_return_errordafür.
Grawity
5

Vielleicht möchten Sie sich openssl s_client ansehen , z

# openssl s_client -connect dummy.com:8443
dchampion
quelle
2

Ja, es gibt ein Programm namens Stunnel

es hat eine Konfigurationsdatei,

Sie geben an, welchen Port Sie abhören und an welchen Port Sie weiterleiten möchten.

es funktioniert für Client-Seite oder Server-Seite oder beides.

Auf diese Weise kann ein Server, der ssl nicht unterstützt, effektiv zu einem Server werden, der ssl nicht unterstützt.

oder ein Client, der ssl nicht unterstützt, effektiv einer, der dies tut.

oder stellen Sie sicher, dass sowohl ein Client als auch ein Server eine SSL-Verbindung haben.

barlop
quelle
1

Es gibt auch sclient ( git ), wenn Sie plattformübergreifende Unterstützung benötigen (z. B. Windows).

Erstellen Sie einen lokalen Server, der tls für example.com entpackt

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

Stellen Sie mit telnet eine Anfrage an example.com

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
CoolAJ86
quelle