¿Pueden los clientes telnet o netcat comunicarse a través de SSL?

62

Me gustaría probar las conexiones de clientes con IMAP sobre SSL, HTTPS y otros protocolos de Internet seguros basados ​​en texto sobre SSL / TLS, de la misma manera que usaría telnet o netcat si no estuvieran en un protocolo seguro. ¿Hay alguna manera de hacer que telnet o netcat pasen por SSL / TLS, como con una tubería o un programa alternativo?

usuario553702
fuente
2
Lo mismo en serverfault: serverfault.com/questions/102032/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

131

No hay un cliente Telnet / Netcat: son dos programas separados y existen al menos 10 clientes Telnet diferentes y al menos 6 versiones diferentes de Netcat (netcat original, GNU netcat, OpenBSD netcat, nmap's ncat; olvidé el resto).

Las herramientas preferidas provienen de las propias bibliotecas TLS. Sin embargo, pueden ser un poco detallados.

  • GnuTLS tiene una herramienta de cliente TLS en Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Usar -spara STARTTLS; deberá ingresar manualmente los comandos de protocolo necesarios y presionar CtrlDcuando esté listo.

    Admite IPv6, valida los certificados del servidor de forma predeterminada.

  • OpenSSL tiene una herramienta de cliente TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Esto está disponible para todos los sistemas operativos. STARTTLS es compatible a través de -starttls imapu -starttls smtpopciones, y el programa lo negociará automáticamente. (Aunque descarta la respuesta inicial del servidor después de hacerlo, pero generalmente está bien).

    Solo la versión ≥ 1.1 es compatible con IPv6.

    Solo la versión ≥ 1.0.2 (IIRC) valida el certificado del servidor por defecto; las versiones anteriores requieren la especificación manual -CApath.

(Me gustaría tener también herramientas para probar NSS y SChannel, pero no pude encontrar ninguna).

Los programas también usan las mismas bibliotecas, pero pueden tener menos botones de configuración. Algunos incluso omiten las verificaciones de certificados de pares de forma predeterminada ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    El modo readline se puede usar por conveniencia:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS no es compatible.

  • ncat de nmap admite TLS (pero no STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Algunos clientes Telnet, como el paquete telnet-ssl en Debian, también admiten TLS:

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

    STARTTLS se puede activar starttlsdesde el Ctrl]menú de escape.

Gravedad
fuente
44
Desearía poder simplemente preferir tu respuesta en lugar de la pregunta de que el autor de la pregunta ni siquiera se molestó en marcar como aceptado.
Sammitch
gnutls-cli también parece ser el único, con el que puedo probar STARTLS con IPv6. ¡Gracias!
karoshi
OpenSSL s_clienttiene soporte para IPv6 en la versión 1.1.
Grawity
1
OpenSSL s_clienttiene una característica "útil" donde las líneas que comienzan con R o Q se tratan como comandos (consulte el manual ). Use -ign_eofpara deshabilitar esto. Además, s_clientcontinuará incluso si la verificación falla; debe comprobar que dice "Verificar código de retorno: 0 (ok)" y esperar que el servidor no intente falsificar este mensaje. Mejor usar gnutls-clisi es posible.
tom
1
Por suerte también tiene -verify_return_errorpara eso.
Grawity
5

Es posible que desee ver openssl s_client , por ejemplo

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

Sí, hay un programa llamado Stunnel

tiene un archivo de configuración

le dices en qué puerto escuchar, a qué puerto reenviar.

funciona para el lado del cliente, del servidor o de ambos.

para que pueda convertir un servidor que no admite ssl, en uno que sí lo haga

o un cliente que no admite SSL, efectivamente en uno que sí lo hace.

o hacer que tanto un cliente como un servidor tengan una conexión SSL.

barlop
fuente
1

También hay sclient ( git ) si necesita soporte multiplataforma (es decir, Windows).

Cree un servidor local que desenvuelva tls por ejemplo.com

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

Haga una solicitud a example.com con 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
fuente