Os clientes telnet ou netcat podem se comunicar por SSL?

62

Gostaria de testar conexões de clientes com IMAP sobre SSL, HTTPS e outros protocolos seguros da Internet baseados em texto sobre SSL / TLS, da mesma maneira que usaria telnet ou netcat se eles não estivessem encapsulados em um protocolo seguro. Existe uma maneira de fazer com que o telnet ou o netcat passem pelo SSL / TLS, como em um canal ou programa alternativo?

user553702
fonte
2
Mesmo no serverfault: serverfault.com/questions/102032/…
Ciro Santilli escreveu:

Respostas:

131

Não há cliente Telnet / Netcat - eles são dois programas separados e existem pelo menos 10 clientes Telnet diferentes e pelo menos 6 versões diferentes do Netcat (netcat original, GNU netcat, OpenBSD netcat, ncat do nmap; esqueceu o resto).

As ferramentas preferidas vêm das próprias bibliotecas TLS. Eles podem ser um pouco detalhados, no entanto.

  • O GnuTLS possui uma ferramenta cliente TLS no Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Use -spara STARTTLS; você precisará inserir manualmente os comandos de protocolo necessários e pressionar CtrlDquando estiver pronto.

    Suporta IPv6, valida certificados de servidor por padrão.

  • O OpenSSL possui uma ferramenta cliente TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Está disponível para todos os sistemas operacionais. STARTTLS é suportado via -starttls imapou -starttls smtpoptions, e o programa o negociará automaticamente. (Embora descarte a resposta inicial do servidor depois de fazer isso, mas geralmente é bom.)

    Somente a versão ≥ 1.1 suporta IPv6.

    Somente a versão ≥ 1.0.2 (IIRC) valida o certificado do servidor por padrão; versões mais antigas requerem especificação -CApath manual.

Gostaria de ter também ferramentas para testar o NSS e o SChannel, mas não consegui encontrar nenhuma.

Os programas também usam as mesmas bibliotecas, mas podem ter menos botões de configuração. Alguns até ignoram as verificações de certificado de pares por padrão ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    O modo readline pode ser usado por conveniência:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS não é suportado.

  • O ncat do nmap suporta TLS (mas não STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Alguns clientes Telnet, como o pacote telnet-ssl no Debian, também suportam TLS:

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

    O STARTTLS pode ser ativado usando starttls-se no Ctrl]menu de escape.

gravidade
fonte
4
Eu gostaria de poder simplesmente favorito sua resposta em vez da pergunta que o autor da pergunta nem se deu ao trabalho de marcar como aceito.
Sammitch
O gnutls-cli também parece ser o único, com o qual eu posso testar o STARTLS com IPv6. Obrigado!
karoshi
O OpenSSL s_clientpossui suporte para IPv6 na versão 1.1.
grawity
1
O OpenSSL s_clientpossui um recurso "útil", onde as linhas que começam com R ou Q são tratadas como comandos (consulte o manual ). Use -ign_eofpara desativar isso. Além disso, s_clientcontinuará mesmo se a verificação falhar; você deve verificar se diz "Verificar código de retorno: 0 (ok)" e esperar que o servidor não tente falsificar esta mensagem. Melhor usar gnutls-clise possível.
Tom
1
Felizmente, isso também tem -verify_return_errorpara isso.
grawity
5

Você pode querer olhar para openssl s_client , por exemplo

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

Sim, há um programa chamado stunnel

tem um arquivo de configuração,

você diz em qual porta escutar, em qual porta encaminhar.

funciona para o lado do cliente, servidor ou ambos.

para que ele possa transformar um servidor que não oferece suporte a ssl, efetivamente, um que suporte.

ou um cliente que não oferece suporte a SSL, efetivamente em um que oferece.

ou faça com que um cliente e um servidor tenham uma conexão SSL.

barlop
fonte
1

Também há sclient ( git ) se você precisar de suporte para várias plataformas (por exemplo, Windows).

Crie um servidor local que desembrulhe tls por exemplo.com

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

Faça um pedido para example.com 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
fonte