345 votes

Comment puis-je lister les suites de chiffrement SSL/TLS qu'un site Web particulier propose ?

Comment puis-je récupérer une liste des suites de chiffrement SSL/TLS qu'un site Web particulier propose?

J'ai essayé openssl, mais si vous examinez la sortie:

$ echo -n | openssl s_client -connect www.google.com:443 
CONNECTED(00000003)
depth=1 /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
   i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
   i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM
MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x
MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh
MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw
FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN
gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L
05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM
BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl
LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF
BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw
Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0
ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF
AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5
u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6
z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
---
No client certificate CA names sent
---
SSL handshake has read 1777 bytes and written 316 bytes
---
New, TLSv1/SSLv3, Cipher is AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
    Session-ID: 748E2B5FEFF9EA065DA2F04A06FBF456502F3E64DF1B4FF054F54817C473270C
    Session-ID-ctx: 
    Master-Key: C4284AE7D76421F782A822B3780FA9677A726A25E1258160CA30D346D65C5F4049DA3D10A41F3FA4816DD9606197FAE5
    Key-Arg   : None
    Start Time: 1266259321
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---

il montre simplement que la suite de chiffrement est quelque chose avec AES256-SHA. Je sais que je pourrais filtrer via le vidage hexadécimal de la conversation, mais j'espérais quelque chose de plus élégant.

Je préférerais faire cela sous Linux, mais Windows (ou autre) serait bien aussi. Cette question est motivée par les tests de sécurité que je fais pour le PCI et les tests de pénétration généraux.

Mise à jour:

GregS souligne ci-dessous que le serveur SSL choisit parmi les suites de chiffrement du client. Il semble donc que je devrais tester toutes les suites de chiffrement une par une. Je pense que je peux bricoler quelque chose, mais y a-t-il un moyen plus simple, plus évolutif (par exemple, de nouveaux chiffrements) pour faire cela?

0 votes

Peut-être gnutls-cli?

0 votes

Après le changement de titre, cette question ne demande vraiment pas de recommandation de logiciel. Vote pour rouvrir.

0 votes

@fixer1234 Si cela vous rend plus heureux, j'ai supprimé toute occurrence du mot "outil". La question principale consiste à demander comment accomplir une tâche spécifique de toute façon ; il s'agit d'une reformulation mineure et loin des questions plus ouvertes de type "liste de logiciels".

305voto

indiv Points 3945

J'ai écrit un script bash pour tester les suites de chiffrement. Il obtient une liste de suites de chiffrement prises en charge par OpenSSL et essaie de se connecter en utilisant chacune d'entre elles. Si la poignée de main réussit, il affiche OUI. Si la poignée de main échoue, il affiche NON, suivi du texte d'erreur OpenSSL.

#!/usr/bin/env bash

# OpenSSL nécessite le numéro de port.
SERVEUR=$1
DELAY=1
ciphers=$(openssl ciphers 'ALL:eNULL' | sed -e 's/:/ /g')

echo Obtenir la liste des suites de chiffrement à partir de $(openssl version).

for cipher in ${ciphers[@]}
do
echo -n Tester $cipher...
result=$(echo -n | openssl s_client -cipher "$cipher" -connect $SERVEUR 2>&1)
if [[ "$result" =~ ":error:" ]] ; then
  error=$(echo -n $result | cut -d':' -f6)
  echo NON \($error\)
else
  if [[ "$result" =~ "Cipher is ${cipher}" || "$result" =~ "Cipher    :" ]] ; then
    echo OUI
  else
    echo RÉPONSE INCONNUE
    echo $result
  fi
fi
sleep $DELAY
done

Voici un exemple de sortie montrant 3 suites de chiffrement non prises en charge, et 1 suite de chiffrement prise en charge :

[@linux ~]$ ./test_ciphers 192.168.1.11:443
Obtenir la liste des suites de chiffrement à partir d'OpenSSL 0.9.8k 25 mars 2009.
Tester ADH-AES256-SHA...NON (sslv3 alert handshake failure)
Tester DHE-RSA-AES256-SHA...NON (sslv3 alert handshake failure)
Tester DHE-DSS-AES256-SHA...NON (sslv3 alert handshake failure)
Tester AES256-SHA...OUI

ÉDITER : Ajouter de la flexibilité car l'hôte et le port sont fournis en tant que paramètre au script

246voto

Matthew Dresser Points 4466

Nmap with ssl-enum-ciphers

Il n'y a pas de meilleure ou plus rapide manière d'obtenir une liste des chiffrements disponibles à partir d'un service réseau. De plus, nmap fournira une évaluation de la force de chaque chiffrement disponible en fort, faible ou inconnu.

Tout d'abord, téléchargez le script nmap ssl-enum-ciphers.nse (explication ici). Ensuite, depuis le même répertoire que le script, exécutez nmap comme suit:

Liste des chiffrements pris en charge par un serveur HTTP

$ nmap --script ssl-enum-ciphers -p 443 www.example.com

Liste des chiffrements pris en charge par un serveur IMAP

$ nmap --script ssl-enum-ciphers -p 993 mail.example.com

Voici un extrait de la sortie d'un serveur IMAP Dovecot :

993/tcp open  imaps
| ssl-enum-ciphers:
|   SSLv3:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - strong
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - strong
|       TLS_RSA_WITH_IDEA_CBC_SHA - faible
...
|   TLSv1.0:
|     ciphers:
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA - fort
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA - fort
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA - fort
|       TLS_RSA_WITH_IDEA_CBC_SHA - faible
...
|_  force minimale : faible

Nmap terminé : 1 adresse IP (1 hôte actif) scannée en 1,03 secondes

128voto

zobie Points 539

Y a-t-il un outil qui peut tester quelles suites de chiffrement SSL/TLS un site Web particulier propose ?

Oui, vous pouvez utiliser l'outil en ligne sur le site Web de SSL Labs pour interroger la base de données publique des serveurs SSL.

Voici un extrait d'informations qu'il fournit :

texte alternatif

(capture d'écran des résultats de google.com)

74voto

indiv Points 3945

sslscan est un petit utilitaire intéressant.

Il teste la connexion avec TLS et SSL (et le script de construction peut se lier avec sa propre copie d'OpenSSL afin de vérifier également les versions obsolètes de SSL) et rapporte les suites de chiffrement et le certificat du serveur.

Exemple de sortie pour google.com (réduit pour la lisibilité) :

$ sslscan google.com
Testing SSL server google.com on port 443

 TLS renegotiation:
Session de renégociation sécurisée prise en charge

  Compression TLS:
Compression désactivée

  Heartbleed:
TLS 1.2 non vulnérable à heartbleed
TLS 1.1 non vulnérable à heartbleed
TLS 1.0 non vulnérable à heartbleed

  Cipher(s) de serveur pris en charge:
Préféré TLSv1.2  128 bits  ECDHE-RSA-AES128-GCM-SHA256   Courbe P-256 DHE 256
Accepté  TLSv1.2  128 bits  ECDHE-RSA-AES128-SHA          Courbe P-256 DHE 256
Accepté  TLSv1.2  128 bits  ECDHE-RSA-RC4-SHA             Courbe P-256 DHE 256
Accepté  TLSv1.2  128 bits  AES128-GCM-SHA256
Accepté  TLSv1.2  128 bits  AES128-SHA

Préféré TLSv1.1  128 bits  ECDHE-RSA-AES128-SHA          Courbe P-256 DHE 256
Accepté  TLSv1.1  128 bits  ECDHE-RSA-RC4-SHA             Courbe P-256 DHE 256
Accepté  TLSv1.1  128 bits  AES128-SHA

Préféré TLSv1.0  128 bits  ECDHE-RSA-AES128-SHA          Courbe P-256 DHE 256
Accepté  TLSv1.0  128 bits  ECDHE-RSA-RC4-SHA             Courbe P-256 DHE 256
Accepté  TLSv1.0  128 bits  AES128-SHA

Préféré SSLv3    128 bits  RC4-SHA
Accepté  SSLv3    128 bits  RC4-MD5

  Certificat SSL:
Algorithme de signature : sha256WithRSAEncryption
Force de la clé RSA :    2048

Sujet :  *.google.com
Altnames : DNS:*.google.com, DNS:*.android.com, 
Émetteur :   Google Internet Authority G2

Non valide avant : 7 avril 2016 08:24:31 GMT
Non valide après: 30 juin 2016 08:20:00 GMT

16voto

Étant donné que c'est un excellent fil de référence pour les outils de balayage SSL, je vais mentionner CipherScan qui a été créé il y a un an et qui peut également identifier les problèmes avec les chiffrements d'échange de clés. https://github.com/jvehent/cipherscan

Si vous voulez ma version qui prend en charge SNI et FreeBSD, l'URL est https://github.com/oparoz/cipherscan

C'est un script qui appelle openssl s_client et prend en charge l'utilisation de votre propre binaire OpenSSL afin que vous puissiez tester des fonctionnalités à venir ou de nouveaux chiffrements (chacha20+poly1305 par exemple).

Il vous permet également de vous connecter à n'importe quel port et d'utiliser starttls.

Voici une sortie typique

# ./cipherscan -o ./openssl api.mycompany.com:443
...................
prio  ciphersuite                  protocols              pfs_keysize
1     DHE-RSA-AES256-GCM-SHA384    TLSv1.2                DH,4096bits
2     DHE-RSA-AES256-SHA256        TLSv1.2                DH,4096bits
3     ECDHE-RSA-AES256-GCM-SHA384  TLSv1.2                ECDH,P-384,384bits
4     ECDHE-RSA-AES256-SHA384      TLSv1.2                ECDH,P-384,384bits
5     DHE-RSA-AES128-GCM-SHA256    TLSv1.2                DH,4096bits
6     DHE-RSA-AES128-SHA256        TLSv1.2                DH,4096bits
7     ECDHE-RSA-AES128-GCM-SHA256  TLSv1.2                ECDH,P-384,384bits
8     ECDHE-RSA-AES128-SHA256      TLSv1.2                ECDH,P-384,384bits
9     DHE-RSA-CAMELLIA256-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
10    DHE-RSA-AES256-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
11    ECDHE-RSA-AES256-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
12    DHE-RSA-CAMELLIA128-SHA      TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
13    DHE-RSA-AES128-SHA           TLSv1,TLSv1.1,TLSv1.2  DH,4096bits
14    ECDHE-RSA-AES128-SHA         TLSv1,TLSv1.1,TLSv1.2  ECDH,P-384,384bits
15    CAMELLIA256-SHA              TLSv1,TLSv1.1,TLSv1.2
16    AES256-SHA                   TLSv1,TLSv1.1,TLSv1.2
17    CAMELLIA128-SHA              TLSv1,TLSv1.1,TLSv1.2
18    AES128-SHA                   TLSv1,TLSv1.1,TLSv1.2

Certificat : de confiance, 4096 bits, signature sha256WithRSAEncryption
Indication de durée de vie du ticket TLS : 300
Agrafage OCSP : pris en charge

Et voici une liste d'options

-a | --allciphers   Tester individuellement tous les chiffrements connus à la fin.
-b | --benchmark    Activer le mode de benchmark.
-d | --delay        Mettre en pause pendant n secondes entre les connexions
-D | --debug        Afficher TOUTES les informations.
-h | --help         Affiche ce texte d'aide.
-j | --json         Afficher les résultats au format JSON.
-o | --openssl      chemin/vers/votre/binaire/openssl que vous souhaitez utiliser.
-v | --verbose      Augmenter la verbosité.

La sortie json est utile si vous appelez cela à partir d'autres scripts.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X