Comment puis-je me connecter à un site Web HTTPS à l'aide d'un chiffrement SSL spécifique et afficher la sortie?
Cela serait utile lorsque vous effectuez une analyse de vulnérabilité et éliminez les faux positifs, par exemple lorsqu'un appareil annonce qu'il prend en charge un chiffrement faible mais affiche une page informant qu'un chiffrement fort doit être utilisé.
La façon la plus simple de faire ce que vous demandez est simplement d'utiliser openssl s_client pour vous connecter au site avec un chiffrement restreint liste. Et, en fait, la même approche fonctionnera pour un certain nombre d'outils - certainement avec la plupart des langages de programmation ou de script (Python (comme @ terry-chia le suggère), Perl, tcl, C ...) et avec les navigateurs (certains - commentaire utile ici ).
Voyons comment vous pouvez le faire avec openssl.
Déterminez les chiffres que vous souhaitez essayer
Vous pouvez utiliser l'outil sslscan pour déterminer les chiffres qu'un site donné accepte ou rejette:
$ sslscan www.google.com | grep Rejected | head -1
Rejected SSLv3 256 bits ECDHE-ECDSA-AES256-SHA
$ sslscan www.google.com | grep Accepted | head -1
Accepted SSLv3 256 bits ECDHE-RSA-AES256-SHA
$
Et cela nous a indiqué un chiffre que www.google.com rejette et un autre qu'il accepte. Maintenant, nous pouvons tester les deux avec openssl s_client.
Test d'un chiffre rejeté
Utilisez simplement l'argument '-cipher' pour openssl pour limiter la suite de chiffrement que votre client prendra en charge au seul chiffrement que vous souhaitez tester. Ici, je choisis celui qui est marqué Rejeté par sslscan:
$ openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect www.google.com:443
CONNECTED(00000003)
140465833367232:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:741:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 127 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
$
Nous voyons un échec de la poignée de main vers le haut, puis nous voyons "Le chiffrement est (AUCUN)", ce qui indique clairement que le serveur n'était pas disposé à accepter un client qui ne négociait que le seul chiffrement que nous avons spécifié. Je suppose que c'est ce que vous voulez dire lorsque vous dites que vous souhaitez vous connecter avec un chiffrement SSL spécifique et "afficher la sortie".
Test d'un chiffrement accepté
Maintenant, si nous faisons de même avec le chiffrement que nous savons que le serveur prend en charge, nous voyons une connexion complète passer et nous pouvons taper des commandes HTTP. Ci-dessous la sortie, je vais énumérer certaines choses que vous avez remarquées:
$ openssl s_client -cipher 'ECDHE-RSA-AES256-SHA' -connect www.google.com:443
CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global 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=US/O=Google Inc/CN=Google Internet Authority G2
1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEdjCCA16gAwIBAgIIRYUpUVjSfHQwDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
...
OEK3nH1sBk2Hy5ZBcyludHyUzqTHsXSjnIjwZNPpihVmFrs5I1Ma7iEj
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 3750 bytes and written 277 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.1
Cipher : ECDHE-RSA-AES256-SHA
Start Time: 1385691323
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
TRACE / HTTP/1.0
HTTP/1.0 405 Method Not Allowed
Content-Type: text/html; charset=UTF-8
Content-Length: 960
Date: Fri, 29 Nov 2013 02:15:31 GMT
Server: GFE/2.0
...
Notez les signes suivants:
Mises en garde
C'est relativement facile en ligne de commande openssl. Le faire en code peut être plus difficile, selon la langue et la bibliothèque utilisées. Le faire dans les navigateurs peut être douloureux, car un tel contrôle à grain fin n'est pas facilement accessible - par exemple, si Chrome utilise le système d'exploitation pour SSL sur Windows, vous devez déterminer les clés de registre utilisé pour manipuler SSL.
Un autre problème peut être de déterminer la chaîne de chiffrement que vous souhaitez tester. Si vous étudiez le rapport d'un autre outil, comme votre question le suggère, il ne décrit probablement pas le problème de chiffrement qu'il voit en termes de chaîne de chiffrement OpenSSL. Plus d'une fois, je me suis retrouvé au téléphone avec une assistance demandant "À quoi exactement faites-vous référence lorsque vous dites" chiffrement faible "?"