Чи можуть клієнти telnet або netcat спілкуватися через SSL?


62

Я хотів би перевірити клієнтські зв’язки з IMAP через SSL, HTTPS та іншими захищеними текстовими протоколами Інтернету через SSL / TLS, так само, як і telnet чи netcat, якби вони не були налаштовані на захищений протокол. Чи є спосіб отримати telnet або netcat, щоб пройти SSL / TLS, наприклад, з трубою або альтернативною програмою?


2
Те саме на сервері за замовчуванням: serverfault.com/questions/102032/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Відповіді:


131

Немає клієнта Telnet / Netcat - це дві окремі програми, і існує як мінімум 10 різних клієнтів Telnet і принаймні 6 різних версій Netcat (оригінальний netcat, GNU netcat, OpenBSD netcat, nmap's ncat; забув решту).

Кращі інструменти надходять із самих бібліотек TLS. Вони можуть бути дещо багатослівними.

  • GnuTLS має клієнтський інструмент TLS в Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Використовувати -sдля STARTTLS; вам потрібно буде вручну ввести необхідні команди протоколу та натиснути, CtrlDколи буде готово.

    Підтримує IPv6, перевіряє сертифікати сервера за замовчуванням.

  • OpenSSL має клієнтський інструмент TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Це доступно для всіх операційних систем. STARTTLS підтримується через -starttls imapабо -starttls smtpпараметри, і програма автоматично узгоджує його. (Хоча після цього він відкидає початкову відповідь сервера, але зазвичай це нормально.)

    Тільки версія ≥ 1.1 підтримує IPv6.

    Тільки версія ≥ 1.0.2 (IIRC) підтверджує сертифікат сервера за замовчуванням; старіші версії вимагають специфікації вручну -CApath.

(Я хотів би також мати інструменти для тестування NSS та SChannel, але не зміг знайти жодного.)

Програми також використовують ті самі бібліотеки, але можуть мати менше регуляторних ручок. Деякі навіть пропускають перевірку рівних сертифікатів за замовчуванням ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    Для зручності можна використовувати режим читання :

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS не підтримується.

  • ncat з nmap підтримує TLS (але не STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Деякі клієнти Telnet, такі як пакет telnet-ssl на Debian, також підтримують TLS:

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

    STARTTLS можна активувати з допомогою starttlsз Ctrl]меню втечі.


4
Я б хотів, щоб я міг просто вподобати вашу відповідь замість того, щоб запитуючий навіть не турбував маркування як прийняте.
Саммітч

gnutls-cli також здається єдиним, з яким я можу протестувати STARTLS за допомогою IPv6. Дякую!
karoshi

OpenSSL s_clientмає підтримку IPv6 у версії 1.1.
grawity

1
OpenSSL s_clientмає "корисну" функцію, коли рядки, що починаються з R або Q, трактуються як команди (див. Посібник ). Використовуйте, -ign_eofщоб вимкнути це. Також s_clientбуде продовжено, навіть якщо перевірка не вдасться; Ви повинні перевірити, що на ньому написано "Перевірити код повернення: 0 (нормально)" і сподіватися, що сервер не намагається підробити це повідомлення. Краще використовувати по gnutls-cliможливості.
tom

1
На щастя, це теж є -verify_return_errorдля цього.
grawity

5

Ви можете подивитися на openssl s_client , наприклад

# openssl s_client -connect dummy.com:8443

2

Так, є програма під назвою stunnel

у ньому є файл конфігурації,

ви кажете йому, який порт слухати, який порт переслати.

він працює на стороні клієнта, або на сервері, або на обох.

тож він може перетворити сервер, який не підтримує ssl, в фактично такий, який робить.

або клієнт, який не підтримує ssl, фактично в тому, хто це робить.

або зробити так, щоб клієнт і сервер мали з'єднання ssl.


1

Також вам важливо ( git ), якщо вам потрібна підтримка між платформами (тобто Windows).

Створіть локальний сервер, який розгортає tls для example.com

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

Зробіть запит на example.com за допомогою telnet

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.