Je cherchais un moyen d'énumérer les cipher suite (suites cryptographiques) après avoir configuré un serveur web (Apache).
En effet j'avais des clients qui n'acceptaient que certains type de cipher suite pour dialoguer avec le serveur (un peu tatillons les clients 😁).
Plusieurs façons existent pour lister les cipher suite, voyons comment ⬇️
Avec NMAP
C'est possible dans nmap avec le script ssl-enum-ciphers :
nmap -sV --script ssl-enum-ciphers -p 443 blogmotion.fr
Exemple :
PORT STATE SERVICE VERSION 443/tcp open ssl/ssl Apache httpd (SSL-only mode) | ssl-enum-ciphers: | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A | TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | compressors: | NULL | cipher preference: server |_ least strength: A
Tout comme Qualys nmap vous donne une note "least strengh" (ici grade A), bien que les critères ne soient pas identiques.
Avec testssl.sh
J'ai découvert cet outil grâce à @F4FIA qui me l'a recommandé (en 2018) sur twitter en remplacement de cryptcheck.
Example :
./testssl.sh -e secure.blogmotion.fr:443 Testing 364 ciphers via OpenSSL plus sockets against the server, ordered by encryption strength Hexcode Cipher Suite Name (OpenSSL) KeyExch. Encryption Bits Cipher Suite Name (RFC) ----------------------------------------------------------------------------------------------------------------------------- xc030 ECDHE-RSA-AES256-GCM-SHA384 ECDH 256 AESGCM 256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 xc028 ECDHE-RSA-AES256-SHA384 ECDH 256 AES 256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 xc014 ECDHE-RSA-AES256-SHA ECDH 256 AES 256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA x9f DHE-RSA-AES256-GCM-SHA384 DH 2048 AESGCM 256 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 x6b DHE-RSA-AES256-SHA256 DH 2048 AES 256 TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 x39 DHE-RSA-AES256-SHA DH 2048 AES 256 TLS_DHE_RSA_WITH_AES_256_CBC_SHA xc02f ECDHE-RSA-AES128-GCM-SHA256 ECDH 256 AESGCM 128 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 xc013 ECDHE-RSA-AES128-SHA ECDH 256 AES 128 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA x9e DHE-RSA-AES128-GCM-SHA256 DH 2048 AESGCM 128 TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 x33 DHE-RSA-AES128-SHA DH 2048 AES 128 TLS_DHE_RSA_WITH_AES_128_CBC_SHA x2f AES128-SHA RSA AES 128 TLS_RSA_WITH_AES_128_CBC_SHA
Avec OpenSSL
Vous pouvez aussi utiliser ce script :
for v in ssl3 tls1 tls1_1 tls1_2 tls1_3; do for c in $(openssl ciphers 'ALL:eNULL' | tr ':' ' '); do openssl s_client -connect google.com:443 -cipher $c -${v} < /dev/null > /dev/null 2>&1 && echo -e "$v:\t$c" done done
Note : SSLv3 ou les protocoles plus anciens ainsi que TLS 1.0 et 1.1 ne doivent plus être utilisés. Utilisez TLS 1.2 minimum.
Compléments
- Correspondances RFC/OpenSSL : 1
L'illustration vient de chez Microsoft
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
Le premier commentaire c'est pour vous 👇