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

46018
user553702

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

53
То же самое на сервере: http://serverfault.com/questions/102032/connecting-to-https-with-netcat-nc Ciro Santilli 新疆改造中心 六四事件 法轮功 9 лет назад 2

4 ответа на вопрос

118
grawity

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

Я хотел бы просто добавить ваш ответ вместо вопроса, который спрашивающий даже не удосужился пометить как принятый. Sammitch 9 лет назад 4
gnutls-cli также кажется единственным, с помощью которого я могу тестировать STARTLS с IPv6. Спасибо! karoshi 7 лет назад 0
OpenSSL `s_client` поддерживает IPv6 в версии 1.1. grawity 7 лет назад 0
@ Grawity Я был бы очень признателен, если вы можете проверить этот похожий вопрос: https://serverfault.com/questions/887224/ssl-unsupported-protocol-error Spring 6 лет назад 0
`S_client` в OpenSSL имеет« полезную »функцию, где строки, начинающиеся с R или Q, рассматриваются как команды (см. [Manual] (https://www.openssl.org/docs/manmaster/man1/s_client.html#CONNECTED- КОМАНДЫ)). Используйте `-ign_eof`, чтобы отключить это. Кроме того, `s_client` будет продолжаться, даже если проверка не удалась; Вы должны проверить, что на нем написано «Verify return code: 0 (ok)» и надеяться, что сервер не попытается подделать это сообщение. Лучше использовать `gnutls-cli`, если это возможно. tom 6 лет назад 1
К счастью, для этого также есть `-verify_return_error`. grawity 6 лет назад 1
Опция `-verify_return_error` действительно работает, при условии, что также указана опция` -verify` (это сбило меня с толку, когда я написал свой предыдущий комментарий). tom 6 лет назад 0
5
dchampion

You may want to look at openssl s_client, e.g.

# openssl s_client -connect dummy.com:8443 
2
barlop

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

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

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

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

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

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

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

1
CoolAJ86

Также есть 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  >  >  

Похожие вопросы