Les clients telnet ou netcat peuvent-ils communiquer via SSL?


62

Je souhaite tester les connexions client avec IMAP sur SSL, HTTPS et d'autres protocoles Internet sécurisés basés sur du texte sur SSL / TLS, de la même manière que j'utiliserais telnet ou netcat si elles n'étaient pas transmises via un protocole sécurisé. Existe-t-il un moyen de forcer telnet ou netcat à passer par SSL / TLS, par exemple avec un tube ou un autre programme?


Réponses:


131

Il n'y a pas de client Telnet / Netcat. Il s'agit de deux programmes distincts. Il existe au moins 10 clients Telnet différents et au moins 6 versions Netcat différentes (netcat d'origine, GNU netcat, OpenBSD netcat, nmap's ncat; vous avez oublié le reste).

Les outils préférés proviennent des bibliothèques TLS elles-mêmes. Ils pourraient être un peu verbeux, cependant.

  • GnuTLS a un outil client TLS sous Linux:

    gnutls-cli imap.gmail.com -p 993
    

    Utilisez -spour STARTTLS; vous devrez saisir manuellement les commandes de protocole nécessaires et appuyer sur CtrlDlorsque vous êtes prêt.

    Prend en charge IPv6, valide les certificats de serveur par défaut.

  • OpenSSL a un outil client TLS:

    openssl s_client -connect imap.gmail.com:993
    

    Ceci est disponible pour tous les systèmes d'exploitation. STARTTLS est supporté via -starttls imapou -starttls smtpoptions, et le programme le négociera automatiquement. (Bien qu'il jette la réponse initiale du serveur après l'avoir fait, mais c'est généralement correct.)

    Seule la version ≥ 1.1 prend en charge IPv6.

    Seule la version ≥ 1.0.2 (IIRC) valide le certificat de serveur par défaut. les anciennes versions nécessitent la spécification manuelle -CApath.

(J'aimerais également disposer d'outils pour tester NSS et SChannel, mais je n'en ai trouvé aucun.)

Les programmes utilisent également les mêmes bibliothèques, mais peuvent avoir moins de boutons de configuration. Certains omettent même les vérifications de certificats homologues par défaut ...

  • socat :

    socat openssl:imap.gmail.com:993 stdio
    

    Le mode readline peut être utilisé pour plus de commodité:

    socat ssl:imap.gmail.com:993 readline
    

    STARTTLS n'est pas pris en charge.

  • ncat de nmap supporte TLS (mais pas STARTTLS):

    ncat --ssl imap.gmail.com 993
    
  • Certains clients Telnet, tels que le paquet telnet-ssl sur Debian, prennent également en charge TLS:

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

    STARTTLS peut être activé en utilisant starttlsle Ctrl]menu d'échappement.


4
J'aimerais pouvoir simplement ajouter votre réponse préférée à la question que le demandeur n'a même pas pris la peine de marquer comme acceptée.
Sammitch

gnutls-cli semble également être le seul, avec lequel je peux tester STARTLS avec IPv6. Merci!
Karoshi

OpenSSL s_clientprend en charge IPv6 dans la version 1.1.
Grawity

1
OpenSSL s_clientpossède une fonctionnalité "utile" dans laquelle les lignes commençant par R ou Q sont traitées comme des commandes (voir le manuel ). Utilisez -ign_eofpour désactiver ceci. En outre, s_clientcontinuera même si la vérification échoue; vous devez vérifier que le message "Vérifiez le code de retour: 0 (ok)" et espérez que le serveur n'essaie pas d'usurper ce message. Mieux vaut utiliser gnutls-clisi possible.
Tom

1
Heureusement, il a aussi -verify_return_errorpour cela.
Grawity

5

Vous voudrez peut-être consulter openssl s_client , par exemple

# openssl s_client -connect dummy.com:8443

2

Oui, il y a un programme appelé Stunnel

il a un fichier de configuration,

vous lui dites sur quel port écouter, quel port transférer.

cela fonctionne pour le côté client, le côté serveur ou les deux.

il peut donc transformer un serveur qui ne prend pas en charge SSL en un serveur qui le fait.

ou un client qui ne prend pas en charge le SSL, en fait un qui le fait.

ou faire en sorte qu'un client et un serveur aient une connexion ssl.


1

Il y a aussi sclient ( git ) si vous avez besoin d'un support multiplateforme (Windows).

Créez un serveur local qui ouvre les tls pour example.com

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

Faites une demande à example.com avec telnet

$ telnet localhost 3000
  Trying 127.0.0.1...
  Connected to localhost.
  Escape character is '^]'.
> GET / HTTP/1.1
> Host: example.com
> Connection: close 
> 
> 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.