Comment utiliser OpenSSL pour vérifier une connexion SSL/TLS

OpenSSL est une librairie libre SSL disponible dans toutes les distributions Linux.
Il fournit aussi différentes fonctionnalités et outils pour les opérations liées à SSL/TLS.
s_client est une sous commande utilisée pour se connecter, vérifier, lister les information TLS/SSL.
Nous pouvons simplement vérifier la connexion TLS/SSL à distance avec s_client dans le cas d'un serveur WEB en HTTPS ou d'un serveur SMTP.
Ainsi il est possible de debuger et résoudre les problèmes de connexion SSL.

Dans ce tutoriel, nous examinerons différents cas d'utilisation de s_client d'OpenSSL.

Comment utiliser OpenSSL pour vérifier une connexion SSL/TLS

Comment utiliser OpenSSL s_client pour vérifier et vérifier SSL/TLS

Vérifier une connexion SSL/TLS d'un site HTTPS

Grâce à ces sous-commandes, openSSL se fera passer pour un programme client et vous montrera les résultats de sa négociation SSL/TLS avec le serveur.
Vous pouvez indiquer à s_client quel protocole utiliser ou ne pas utiliser. Les options -ssl2, -ssl3, -tls1, -tls1_1 et -tls1_2 obligent s_client à utiliser uniquement SSLv2, SSLv3, TLSv1.0, TLSv1.1 ou TLS1.2, respectivement.
Il n'essaiera pas d'utiliser une autre version. Il existe également des options pour empêcher l'utilisation d'une (ou de plusieurs) version(s) de protocole particulière(s) pendant la négociation. Ils ont les mêmes noms mais avec « no_ » préfixé à la version ; par exemple, -no_ssl2. Il existe une page de manuel pour la sous-commande ("man s_client") qui répertorie ses options.

Pour comprendre l'établissement d'une connexion sécurisée HTTPs, lire :

Voici la syntaxe simple d'openssl afin de télécharger le certificat SSL d'un site et vérifier la connexion TLS :

openssl s_client -connect www.malekal.com:443
Vérifier une connexion SSL/TLS d'un site HTTPS avec OpenSSL

Tout au début, on obtient la chaîne de certification.
Puis la négociation SSL puis les informations avec le type de chiffrement (Cipher), la clé publique.

---
SSL handshake has read 2511 bytes and written 387 bytes
Verification: OK
---
New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
Server public key is 256 bit
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 4B8AA4BB3723A95D1CE216A0B52E4A32BF2DF2765219E7E173D44220C3A1CA77
    Session-ID-ctx:
    Resumption PSK: DC9AEEE1811395A7BCC89CAC87447504FB31D28D6FCC4A410B1A738A387ECCBD3A3FDD365F518ACA8539300C7B577686
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 64800 (seconds)
    TLS session ticket:

Pour afficher la chaîne de certification complète, utilisez l'option -showcerts :

openssl s_client -showcerts -servername www.malekal.com -connect www.malekal.com:443 2>/dev/null

Pour vérifier la connexion SSL en spécifiant un certificat d'autorité :

openssl s_client -connect www.malekal.com:443 -CAfile /etc/ssl/CA.crt

On peut aussi spécifier un chemin contenant des certificats d'autorité :

openssl s_client -port 443 -CApath /usr/share/ssl/certs/ -host www.malekal.com -prexit

Spécifier le type de chiffrement ou de chiffrement (cipher) :

openssl s_client -connect www.malekal.com:443 -cipher RC4-SHA

Pour vérifier la connexion SSL en désactivant TLS1 et TLS 2 :

openssl s_client -connect www.malekal.com:443 -tls1_2

Désactiver SSL2 dans la vérification de la connexion SSL :

openssl s_client -connect www.malekal.com:443 -no_ssl2

Ainsi on peut vérifier la version TLS ou SSL avec OpenSSL avec les paramètres suivants :

  • -ssl2
  • –ssl3
  • –tls1
  • -tls1_2

Vérifier la date d'expiration du certificat de l'URL SSL :

openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect www.malekal.com:443

Pour aller plus loin dans la vérification de la configuration SSL de son site HTTPS :

Vérifier une connexion SMTPS

Il est aussi possible d'installer un certificat électronique TLS sur un serveur SMTP.
Cela permet de faire transiter les mails à travers une connexion SMTP entre les serveurs SMTP.

Par exemple avec StartTTLS :

openssl s_client -starttls smtp -connect locahost:25
Vérifier une connexion SMTP TLS avec openSSL