Afin d'atténuer la vulnérabilité "Poodle" , je voudrais désactiver la prise en charge SSLv3 sur mon serveur (dans ce cas, TLS, plutôt que HTTPS). Comment puis-je utiliser openssl s_client
pour vérifier que je l'ai fait?
Pour vérifier si vous avez désactivé la prise en charge SSLv3, exécutez ensuite ce qui suit
openssl s_client -connect example.com:443 -ssl3
qui devrait produire quelque chose comme
3073927320:error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1258:SSL alert number 40
3073927320:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:596:
ce qui signifie que SSLv3 est désactivé sur le serveur. Sinon, la connexion sera établie avec succès.
Alternativement, vous pouvez tiliser nmap pour scanner le serveur pour la version prise en charge:
# nmap --script ssl-enum-ciphers example.com
Starting Nmap 6.47 ( http://nmap.org ) at 2014-10-15 03:19 PDT
Nmap scan report for example.com (203.0.113.100)
Host is up (0.090s latency).
rDNS record for 203.0.113.100: Edge.example.com
Not shown: 997 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
| ssl-enum-ciphers:
| **SSLv3: No supported ciphers found**
| TLSv1.0:
Sur une note latérale, vous pouvez utiliser nmap
avec le script ssl-enum-ciphers comme suit
nmap --script ssl-enum-ciphers -p 443 example.com
Vous obtiendrez une réponse comme celle-ci.
PORT STATE SERVICE
443/tcp open https
| ssl-enum-ciphers:
| SSLv3:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_MD5 - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| compressors:
| NULL
| TLSv1.0:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_RSA_WITH_RC4_128_MD5 - strong
| TLS_RSA_WITH_RC4_128_SHA - strong
| compressors:
| NULL
| TLSv1.1:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| compressors:
| NULL
| TLSv1.2:
| ciphers:
| TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong
| TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong
| compressors:
| NULL
|_ least strength: strong
Comme vous pouvez le voir, il répertorie toutes les versions prises en charge de ssl/tls ainsi que les suites de chiffrement
J'ai créé ce test pour la disponibilité du protocole SSLv3. Il existe probablement un meilleur moyen de rechercher une chaîne qui montre également que les chiffres CBC sont utilisés, mais la plupart des gens semblent simplement vouloir savoir si SSLv3 est disponible.
Quelques points à noter:
scénario:
for ip in `awk '{print $1}' < allexternal.txt`; do
if gtimeout 30 openssl s_client -connect $ip:443 -ssl3 | grep -q 'Protocol : SSLv3' ; then
echo $ip SSLv3 detected >> sslv3output;
else
echo $ip SSLv3 NOT detected >> sslv3output;
fi;
done
Si seulement SSLv3 est désactivé, vous pouvez également forcer openssl s_client
pour utiliser uniquement TLS:
openssl s_client -connect exmaple.com:443 -tls1
Il convient de noter que l'option -ssl3 dans OpenSSL doit maintenant être activée au moment de la compilation. Si vous utilisez des binaires précompilés, l'option peut ne pas être disponible. Voir ce problème: https://github.com/openssl/openssl/issues/6801
Un autre outil est testssl.sh. Cela vérifie les protocoles, les chiffres et les vulnérabilités sélectionnées: https://github.com/drwetter/testssl.sh