web-dev-qa-db-fra.com

Comment utiliser «openssl s_client» pour tester (l'absence de) prise en charge SSLv3?

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?

119
Roger Lipscombe

OpenSSL s_client

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.

Nmap

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: 
157
P4cK3tHuNt3R

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

32
Anonymous Platypus

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:

  • Écrit pour le bash sur Mac OS X, donc je ne peux pas dire avec certitude que cela fonctionnera partout
  • Utilise gtimeout vs timeout car Mac est bizarre à propos de ces utilitaires de base
  • allexternal.txt est un fichier avec un nom d'hôte ou IP par ligne

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
6
theterribletrivium

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
4
Mathias R. Jessen

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

3
matttyg