Comment puis-je récupérer une liste des suites de chiffrement SSL / TLS offertes par un site Web particulier?
J'ai essayé openssl, mais si vous examinez le résultat:
$ 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)
---
cela montre simplement que la suite de chiffrement est quelque chose avec AES256-SHA. Je savais que je pouvais passer à travers le vidage de la conversation, mais j'espérais quelque chose d'un peu plus élégant.
Je préférerais le faire sous Linux, mais Windows (ou autre) serait bien. Cette question est motivée par les tests de sécurité que je fais pour les tests d'intrusion PCI et généraux.
Mise à jour:
GregS indique 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 à la fois. Je pense que je peux pirater quelque chose ensemble, mais existe-t-il un moyen plus simple et plus évolutif (par exemple, de nouveaux chiffres) de le faire?
gnutls-cli
- être ?Réponses:
J'ai écrit un script bash pour tester les suites de chiffrement. Il obtient une liste des suites de chiffrement prises en charge auprès d'OpenSSL et essaie de se connecter à l'aide de chacune d'entre elles. Si la poignée de main est réussie, elle est imprimée
YES
. Si la négociation échoue, il est impriméNO
, suivi du texte d'erreur OpenSSL.Voici un exemple de sortie montrant 3 chiffrements non pris en charge et 1 chiffrement pris en charge:
EDIT: Ajoutez de la flexibilité car l'hôte et le port sont fournis comme paramètres du script
la source
if [[ "$result" =~ "Cipher :" ]] ; then
au lieu deif [[ "$result" =~ "Cipher is " ]] ; then
tester également SSL2 et la renégociation sécurisée:echo -n Testing ssl2... result=$(echo -n | openssl s_client -ssl2 -connect $SERVER 2>&1) if [[ "$result" =~ "Cipher :" ]] ; then echo supported. INSECURE! else echo no support, OK fi echo -n Testing SSL secure renegotiation... echo -n "" | openssl s_client -connect $SERVER 2>&1 | grep 'Secure Renegotiation'
Nmap avec ssl-enum-ciphers
Il n’existe pas de moyen plus rapide ni meilleur d’obtenir une liste des chiffrements disponibles à partir d’un service réseau. De plus, nmap fournira une évaluation de force forte, faible ou inconnue pour chaque chiffre disponible.
Tout d’abord, téléchargez le script nmap ssl-enum-ciphers.nse ( explication ici ). Ensuite, à partir du même répertoire que le script, exécutez nmap comme suit:
Lister les chiffrements supportés par un serveur HTTP
Lister les chiffrements supportés par un serveur IMAP
Voici un extrait de la sortie d'un serveur IMAP Dovecot:
la source
portrule = function() \n return true \n end
AUTH TLS
etc., mais c'est possible.Oui, vous pouvez utiliser l'outil en ligne sur le site Web de SSL Labs pour interroger la base de données publique du serveur SSL.
Voici un extrait d'information qu'il fournit:
(capture d'écran des résultats de google.com)
la source
sslscan est un joli petit utilitaire.
Il teste la connexion avec TLS et SSL (le script de génération peut également être lié à sa propre copie d'OpenSSL afin que les versions SSL obsolètes soient également vérifiées) et des rapports sur les suites de chiffrement et le certificat du serveur.
Exemple de sortie pour
google.com
(réduit pour des raisons de lisibilité):la source
yum install sslscan
fonctionne sur CentOS 6.sudo dnf install sslscan
sur Fedora 22 aussi.brew install sslscan
sur OSXsudo apt-get install sslscan
sur Ubuntu (12.04 - donc toutes les versions ultérieures devraient bien se passer).Comme il s’agit d’un excellent fil de référence pour les outils d’analyse SSL, je vais énumérer CipherScan qui a été créé il ya un an et qui peut également identifier les problèmes liés aux chiffreurs d’échange de clés. https://github.com/jvehent/cipherscan
Si vous voulez mon fork qui supporte 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 fichier binaire OpenSSL afin que vous puissiez tester les fonctionnalités à venir ou les nouveaux chiffrements (chacha20 + poly1305 par exemple).Il vous permet également de vous connecter à n’importe quel port et d’utiliser starttlss.
Voici une sortie typique
Et voici une liste d'options
La sortie json est utile si vous appelez cela à partir d'autres scripts.
la source
https://github.com/iSECPartners/sslyze
Celui-ci est basé sur Python, fonctionne sous Linux / Mac / Windows en ligne de commande.
la source
Après un peu de recherche sur Google, j'ai trouvé ce test pour SSL-TLS (OWASP-CM-001) :
et aussi: Foundstone SSL Digger est un outil permettant d'évaluer la puissance des serveurs SSL en testant les chiffrements pris en charge. On sait que certains de ces chiffrements sont peu sûrs.
la source
J'utilise pour la plupart des tests SSL testssl.sh (voir https://testssl.sh / devel version @ https://github.com/drwetter/testssl.sh . Il teste les vulnérabilités, les algorithmes de chiffrement, les protocoles, etc.
la source
SSLScan est génial; Un nouvel outil, SSLDiagnos, fonctionne pour Windows. Vous pouvez également écrire un script à l’aide du fichier openssl s_client.
la source
Le script ssl-enum-ciphers de Nmap peut répertorier les chiffrements et les versions SSL / TLS pris en charge, ainsi que les compresseurs pris en charge.
la source
ssl-enum-ciphers
beaucoup plus complète.Si vous voulez une belle sortie grepable (et un support pour vérifier toutes les versions de SSL / TLS)
Utilisation: ./script.sh www.url.com
la source
openssl ciphers -tls1.1
etopenssl ciphers -tls1.2
pourtant ces paramètres ne semblent pas exister ... Il n'y en a que-tls1
(du moins sur les plateformes que j'ai essayées).tls1_1
ettls1_2
mais elles ne sont montrées que dans la version principale d'OpenSL et même pas dans la 1.0.2 ....)Pentesterscripting.com propose un petit script qui utilise SSLScan et OpenSSL pour vérifier:
http://www.pentesterscripting.com/discovery/ssl_tests (via Internet Archive Wayback Machine )
Dupliqué ici pour l'avenir, car le site principal est maintenant mort:
Utilisation: ./ssltest.sh HOST PORT
la source
Sur la base de la réponse de @ indiv et de sa suggestion de l'afficher comme sa propre réponse, je fournis ma version modifiée du script de @ indiv. Vous pouvez fournir un hôte en tant que premier argument et il produira les mêmes résultats que le script d'origine, mais un peu plus formaté:
la source
Le livre de recettes OpenSSL (gratuit) d'Ivan Ristić, qui a mis au point l'outil en ligne SSL Labs mentionné dans la réponse de Kez , indique:
(Mon emphase.)
Le SSLTest de Stephen Bradshaw est un outil que je n'ai pas vu mentionné dans d'autres réponses. Il vise notamment à comparer "les chiffrements et les protocoles détectés aux normes de conformité telles que DSD ISM et PCI-DSS".
Alors, essayez ceci ou l’un des outils mentionnés dans les autres réponses, ou construisez le vôtre et envisagez d’utiliser l’approche de Ristić sur les poignées de main partielles.
la source
J'ai écrit un outil qui fait exactement cela. Il s'appelle tlsenum et est disponible sur GitHub .
Voici un exemple de sortie de l'outil contre
twitter.com
.Cela ressemble à ce que fait SSL Lab, mais je trouve qu’avoir un outil de ligne de commande que vous pouvez automatiser et analyser est bien plus utile.
la source
SSLyze, à l’origine sur https://github.com/iSECPartners/sslyze , se trouve maintenant sur https://github.com/nabla-c0d3/sslyze . Cela a été mentionné dans une autre réponse , mais sans beaucoup de détails.
SSLyze est basé sur Python et fonctionne sous Linux / Mac / Windows à partir de la ligne de commande. Il utilise OpenSSL, et sous Windows, il est livré avec une copie fournie d’OpenSSL.
Répertorie les protocoles, les suites de chiffrement et les détails clés, ainsi que des tests pour détecter certaines vulnérabilités courantes. Il est possible d'activer ou de désactiver certaines vérifications, d'obtenir plus de données ou d'accélérer l'analyse.
la source
La seule chose que vous puissiez faire est de toutes les essayer, une à la fois, et de voir celles qui sont acceptées. Je ne suis pas au courant d'un outil pour ce faire, même s'il ne devrait pas être difficile d'en combiner un à partir d'outils de script et
openssl s_client
.Tandis que le client annonce les suites de chiffrement qu’il acceptera, le serveur en choisit un et l’utilise ou échoue la connexion s’il ne trouve rien qu’il aime.
la source
Toutes ces réponses sont bonnes. Une partie de la réponse pourrait expliquer pourquoi nous avons besoin d’un outil pour découvrir une liste de serveurs et non pas demander directement à TLS que ce serveur donne toutes ses suites de chiffrement prises en charge, comme le fait le client TLS lorsqu’il se connecte à un serveur.
La réponse est que le serveur n’envoie jamais de liste , il suffit de sélectionner dans la liste de chiffrement du client le chiffrement qu’il souhaite utiliser, c’est ainsi que le protocole SSL / TLS est écrit: http://wiki.opensslfoundation.com/index.php/ SSL_and_TLS_Protocols # Cipher_Suites
C'est pourquoi le client doit énumérer les chiffrements pour pouvoir trouver ceux qui sont pris en charge par le serveur et pour cela faire au moins une nouvelle poignée de main de démarrage (ClientHello) pour chaque suite de chiffrement.
la source
En cherchant quelque chose qui fonctionne
AUTH TLS
sur FTP, j'ai découvert cet outil: ssl-cipher-suite-enumC'est un script Perl qui fait fondamentalement ce que le script shell de hackajar fait, mais plus sophistiqué.
Il propose également une évaluation de base des algorithmes de chiffrement et des protocoles proposés. C'est un peu comme les outils SSL Labs, seulement pour un usage domestique. :)
Par défaut, il ne prend
AUTH SSL
en charge que le FTP, mais une simple recherche et remplacement peut résoudre ce problème. En prime, il prétend également prendre en charge SMTP avecSTARTTLS
et RDP.la source
TestSSLServer est une solution purement Java. Avantages:
il fonctionne très bas niveau, uniquement sur des sockets simples, il est donc indépendant des chiffrements indisponibles possibles de JDK ou d'OpenSSL .
il ne nécessite aucun port supplémentaire (comme ICMP pour le ping) pour être ouvert
ça marche avec les certificats clients présents
Désavantages:
Mon expérience personnelle: avec un serveur restreint n’ayant qu’un seul port HTTPS ouvert (aucun autre port), des certificats clients requis et iptables étant actif, il était toujours possible de répertorier les chiffrements disponibles, alors que les solutions les mieux choisies ne l’étaient pas (j’étais essayer un petit script shell, SSL Labs, NMap, sslscan)
la source