Czy klienci Telnet lub Netcat mogą komunikować się przez SSL?

62

Chciałbym przetestować połączenia klienckie z IMAP przez SSL, HTTPS i inne bezpieczne tekstowe protokoły internetowe przez SSL / TLS, w taki sam sposób, w jaki użyłbym telnet lub netcat, gdyby nie były tunelowane przez bezpieczny protokół. Czy istnieje sposób, aby telnet lub netcat przechodziły przez SSL / TLS, na przykład za pomocą potoku lub innego programu?

użytkownik553702
źródło
2
To samo dotyczy serverfault: serverfault.com/questions/102032/…
Ciro Santilli 事件 改造 中心 法轮功 六四 事件

Odpowiedzi:

131

Nie ma klienta Telnet / Netcat - są to dwa osobne programy i istnieje co najmniej 10 różnych klientów Telnet i co najmniej 6 różnych wersji Netcat (oryginalny netcat, GNU netcat, OpenBSD netcat, nmap's ncat; zapomniałem reszty).

Preferowane narzędzia pochodzą z samych bibliotek TLS. Mogą być jednak nieco gadatliwi.

  • GnuTLS ma narzędzie klienta TLS w systemie Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Użyj -sdla STARTTLS; musisz ręcznie wprowadzić niezbędne polecenia protokołu i nacisnąć, CtrlDgdy będzie gotowy.

    Obsługuje IPv6, domyślnie sprawdza poprawność certyfikatów serwera.

  • OpenSSL ma narzędzie klienta TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Jest to dostępne dla wszystkich systemów operacyjnych. STARTTLS jest obsługiwany przez -starttls imaplub -starttls smtpopcje, a program automatycznie go negocjuje. (Mimo to odrzuca początkową odpowiedź serwera po wykonaniu tej czynności, ale zwykle jest w porządku).

    Tylko wersja ≥ 1.1 obsługuje IPv6.

    Tylko wersja ≥ 1.0.2 (IIRC) domyślnie sprawdza certyfikat serwera; starsze wersje wymagają ręcznej specyfikacji ścieżki -CApath.

(Chciałbym również mieć narzędzia do testowania NSS i SChannel, ale nie mogłem ich znaleźć.)

Programy również używają tych samych bibliotek, ale mogą mieć mniej pokręteł konfiguracyjnych. Niektórzy nawet domyślnie pomijają sprawdzanie certyfikatów równorzędnych ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    Dla wygody można użyć trybu readline :

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS nie jest obsługiwany.

  • ncat z nmap obsługuje TLS (ale nie STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Niektóre klienty Telnet, takie jak pakiet telnet-ssl w Debianie, również obsługują TLS:

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

    STARTTLS można aktywować za pomocą starttlsz Ctrl]menu ucieczki.

grawitacja
źródło
4
Chciałbym po prostu ulubioną odpowiedź zamiast pytania, że ​​pytający nawet nie zadał sobie trudu, by oznaczyć jako zaakceptowane.
Sammitch,
gnutls-cli również wydaje się być jedynym, z którym mogę przetestować STARTLS z IPv6. Dzięki!
karoshi
OpenSSL s_clientma obsługę IPv6 w wersji 1.1.
grawity
1
OpenSSL s_clientma „użyteczną” funkcję, w której linie zaczynające się od R lub Q są traktowane jak polecenia (patrz instrukcja ). Użyj, -ign_eofaby to wyłączyć. Ponadto s_clientbędzie kontynuowane, nawet jeśli weryfikacja się nie powiedzie; musisz sprawdzić, czy wyświetla się komunikat „Zweryfikuj kod powrotu: 0 (ok)” i mieć nadzieję, że serwer nie spróbuje sfałszować tej wiadomości. Lepiej używać, gnutls-clijeśli to możliwe.
tom
1
Na szczęście tak też jest -verify_return_error.
grawity
5

Możesz spojrzeć na openssl s_client , np

# openssl s_client -connect dummy.com:8443
dchampion
źródło
2

Tak, jest program o nazwie stunnel

ma plik konfiguracyjny,

mówisz, do którego portu nasłuchiwać, do jakiego portu przekierować.

działa po stronie klienta, po stronie serwera lub obu.

dzięki czemu może zmienić serwer, który nie obsługuje SSL, w efektywny.

lub klienta, który nie obsługuje ssl, skutecznie w taki, który to robi.

lub upewnij się, że zarówno klient, jak i serwer mają połączenie ssl.

barlop
źródło
1

Istnieje również sclient ( git ), jeśli potrzebujesz pomocy na wielu platformach (np. Windows).

Utwórz serwer lokalny, który rozpakowuje tls na przykład.com

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

Złóż wniosek do example.com za pomocą usługi telnet

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
CoolAJ86
źródło