Могут ли клиенты telnet или netcat взаимодействовать через SSL?

62

Я хотел бы протестировать клиентские соединения с IMAP по SSL, HTTPS и другим защищенным текстовым интернет-протоколам по SSL / TLS, так же, как я бы использовал telnet или netcat, если они не были туннелированы по безопасному протоколу. Есть ли способ заставить telnet или netcat проходить через SSL / TLS, например, с помощью pipe или альтернативной программы?

user553702
источник
2
То же самое на serverfault: serverfault.com/questions/102032/…
Сиро Сантилли,

Ответы:

131

Клиент Telnet / Netcat отсутствует - это две отдельные программы, и существует как минимум 10 разных клиентов Telnet и как минимум 6 разных версий Netcat (оригинальная netcat, GNU netcat, OpenBSD netcat, nmap 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 openssl:imap.gmail.com:993 stdio
    

    Режим readline можно использовать для удобства:

    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]меню выхода.

grawity
источник
4
Я хотел бы просто добавить ваш ответ вместо вопроса, который спрашивающий даже не удосужился пометить как принятый.
Sammitch
gnutls-cli также кажется единственным, с помощью которого я могу тестировать STARTLS с IPv6. Спасибо!
Кароши
OpenSSL s_clientимеет поддержку IPv6 в версии 1.1.
grawity
1
OpenSSL s_clientимеет «полезную» функцию, где строки, начинающиеся с R или Q, рассматриваются как команды (см. Руководство ). Используйте, -ign_eofчтобы отключить это. Кроме того, s_clientбудет продолжаться, даже если проверка не удалась; Вы должны убедиться, что в нем написано «Verify return code: 0 (ok)», и надеяться, что сервер не попытается подделать это сообщение. Лучше использовать, gnutls-cliесли это возможно.
Том
1
К счастью, это также имеет -verify_return_errorдля этого.
Гравитация
5

Вы можете посмотреть на openssl s_client , например,

# openssl s_client -connect dummy.com:8443
dchampion
источник
2

Да, есть программа под названием Stunnel

у него есть файл конфигурации,

вы говорите ему, какой порт слушать, какой порт пересылать.

это работает на стороне клиента, или на стороне сервера, или на обоих.

таким образом, он может превратить сервер, который не поддерживает ssl, в эффективно работающий.

или клиент, который не поддерживает ssl, эффективно в тот, который делает.

или сделать так, чтобы и клиент, и сервер имели ssl-соединение.

barlop
источник
1

Также есть sclient ( 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 
> 
> 
CoolAJ86
источник