brain www.christophe-casalegno.com
SxTLSCheck (ScalarX TLS Checker) : vérification de conformité TLS / SSL en bash – Christophe Casalegno
UTC

SxTLSCheck (ScalarX TLS Checker) : vérification de conformité TLS / SSL en bash

SxTLSCheck (ScalarX TLS Checker)

SxTLSCheck est un script Bash sous licence GPL conçu pour auditer rapidement la configuration TLS d’un endpoint (host ou URL) en s’appuyant uniquement sur openssl s_client. Il est pensé pour un usage opérationnel: diagnostic express, vérification de compatibilité, et contrôle de points de sécurité concrets (protocoles, certificats, handshake, options avancées TLS).

J’utilisais précédemment le test de Qualys TLS scanner (sslabs), mais j’ai eu la désagréable surprise de découvrir qu’il n’existait plus. Plutôt que de passer sur un énième service en ligne, j’ai préféré développer mon propre outil en langage bash pour répondre à mon besoin, qui offre l’avantage de tourner en local et d’être fonctionnel même sans connexion internet.

Il fonctionne en environnement hétérogène (différentes versions d’OpenSSL) et adapte certains tests selon les capacités locales détectées via openssl s_client -help.

Fonctionnalités principales

Ergonomie et compatibilité :

– Support d’entrée host, host:port, URL, et IPv6 au format [addr] ou [addr]:port (refus explicite si IPv6 non bracketée).
– Paramètres: –port, –sni, –timeout, –quiet, –no-color, –date, –full-ciphers.
– Timeout via la commande timeout si disponible, sinon fallback sans timeout.
– Détection de support local des flags OpenSSL (tests conditionnels).

Handshake et couche TLS :

– Test de handshake de base et extraction Protocol + Cipher.
– Détection pragmatique d’erreurs usuelles (handshake failure, no peer certificate, timeout, refused, alert).

Protocoles supportés :

– Tests explicites: TLS 1.0, TLS 1.1, TLS 1.2, TLS 1.3.
– Tests legacy si supportés localement: SSLv2, SSLv3.
– Test TLS_FALLBACK_SCSV (protection downgrade) si le flag est disponible.

Certificat et chaîne :

– Récupération du certificat leaf (-showcerts), extraction des dates, subject/issuer, algo de signature, type de clé et taille.
– Contrôles X509 de base: Basic Constraints, Key Usage, Extended Key Usage (serverAuth).
– Extraction SAN (DNS / IP) et vérification de correspondance hostname <-> certificat, avec wildcard strict type « left-most label ».
– Contrôle de chaîne: détection d’intermédiaires faibles (md5/sha1), expirés, ou clés trop courtes.
– Détection must-staple via extension TLS Feature (status_request).

Chiffrement :

– Tests rapides de familles faibles sur TLS 1.2: NULL, aNULL, EXPORT, RC4, 3DES, DES, MD5, SHA1.
– Mode –full-ciphers pour énumérer l’ensemble des ciphers TLS 1.2 (plus lent), et marquer les ciphers faibles.

Mode date uniquement

Le mode –date (ou -d) sert à aller à l’essentiel: vérifier que le certificat est récupérable, que le nom correspond, et estimer le nombre de jours restants avant expiration.

sxtlscheck --date example.com
sxtlscheck --date https://example.com
sxtlscheck --date [2001:db8::1]

Utilisation

Audit standard :

sxtlscheck example.com
sxtlscheck example.com:8443
sxtlscheck https://example.com
sxtlscheck [2001:db8::1]:443

Forcer un SNI différent (cas reverse-proxy / multi-cert) :

sxtlscheck --sni site.example.com 1.2.3.4

Timeout personnalisé :

sxtlscheck --timeout 3 example.com

Sortie minimale :

sxtlscheck --quiet example.com

Désactiver les couleurs :

sxtlscheck --no-color example.com

Enumération complète des ciphers TLS 1.2 :

sxtlscheck --full-ciphers example.com

Architecture technique

Moteur: OpenSSL s_client.

– Les tests sont exécutés via wrappers (avec ou sans SNI) et timeouts optionnels.
– Les capacités sont détectées localement via openssl s_client -help avant d’exécuter certains flags.
– Les sorties sont parsées de manière pragmatique (grep/awk/sed) pour extraire protocoles, ciphers, erreurs et éléments X509.

Parsing SAN et matching:

– Extraction SAN DNS: et IP Address: via normalisation de la sortie et découpage par virgules.
– Matching wildcard volontairement restreint: support de *.domain.tld uniquement sur le premier label.

Hygiène d’exécution:

Répertoire temporaire dédié (/tmp/sxtlscheck-$$) + cleanup via trap.

Notes de conception

SxTLSCheck est un outil de diagnostic « terrain »: pas de dépendances exotiques, pas de framework, uniquement des primitives Unix + OpenSSL. L’objectif est de fournir une réponse exploitable en quelques secondes:

« Quels protocoles passent, lesquels doivent être désactivés ? »
« Le certificat est-il sain, et correspond-il au host/SNI ? »
« Y a-t-il des signaux faibles (legacy, downgrade, algo faible, chain douteuse) ? »

Todo list

Support explicite d’OpenSSL 3.x vs 1.1.x sur certains champs de sortie (parsing encore plus robuste).

Ressources

Script : sxtlscheck.sh


Christophe Casalegno (retrouvez tous mes réseaux sur : all.bo)