openssl s_client -connect some.https.server:443 -showcerts
est une commande intéressante à exécuter lorsque vous souhaitez inspecter les certificats du serveur et sa chaîne de certificats.
Existe-t-il un moyen d'exécuter cette commande lorsque vous êtes derrière un proxy HTTP/HTTPS?
Officiellement pas.
Mais voici le patch http://rt.openssl.org/Ticket/Display.html?id=2651&user=guest&pass=guest
Vous pouvez utiliser proxytunnel :
proxytunnel -p yourproxy:8080 -d www.google.com:443 -a 7000
et alors vous pouvez faire ceci:
openssl s_client -connect localhost:7000 -showcerts
J'espère que cela peut vous aider!
pour ceux qui viendront ici après mai 2015: une nouvelle option "-proxy" sera incluse dans la prochaine version de openssl: https://rt.openssl.org/Ticket/Display.html?id= 2651 & user = guest & pass = guest
depuis openssl v1.1.0
C:\openssl>openssl version
OpenSSL 1.1.0g 2 Nov 2017
C:\openssl>openssl s_client -proxy 192.168.103.115:3128 -connect www.google.com -CAfile C:\TEMP\internalCA.crt
CONNECTED(00000088)
depth=2 DC = com, DC = xxxx, CN = xxxx CA interne
verify return:1
depth=1 C = FR, L = CROIX, CN = svproxysg1, emailAddress = [email protected]
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = www.google.com
verify return:1
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
i:/C=xxxx/L=xxxx/CN=svproxysg1/[email protected]
1 s:/C=xxxx/L=xxxx/CN=svproxysg1/[email protected]
i:/DC=com/DC=xxxxx/CN=xxxxx CA interne
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDkTCCAnmgAwIBAgIJAIv4/hQAAAAAMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
BAYTAkZSMQ4wDAYDVQQHEwVDUk9JWDETMBEGA1UEAxMKc3Zwcm94eXNnMTEeMBwG
Même avec openssl v1.1.0, j'ai eu quelques problèmes pour transmettre notre proxy, par exemple. s_client: HTTP CONNECT failed: 400 Bad Request
Cela m'a obligé à écrire une classe Java minimale pour afficher le protocole SSL Handshake
public static void main(String[] args) throws IOException, URISyntaxException {
HttpHost proxy = new HttpHost("proxy.my.company", 8080);
DefaultProxyRoutePlanner routePlanner = new DefaultProxyRoutePlanner(proxy);
CloseableHttpClient httpclient = HttpClients.custom()
.setRoutePlanner(routePlanner)
.build();
URI uri = new URIBuilder()
.setScheme("https")
.setHost("www.myhost.com")
.build();
HttpGet httpget = new HttpGet(uri);
httpclient.execute(httpget);
}
Avec les dépendances suivantes:
<dependency>
<groupId>org.Apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
<type>jar</type>
</dependency>
vous pouvez l'exécuter avec Java SSL Logging activé
Cela devrait produire une sortie Nice comme
trustStore provider is :
init truststore
adding as trusted cert:
Subject: CN=Equifax Secure Global eBusiness CA-1, O=Equifax Secure Inc., C=US
Issuer: CN=Equifax Secure Global eBusiness CA-1, O=Equifax Secure Inc., C=US
Algorithm: RSA; Serial number: 0xc3517
Valid from Mon Jun 21 06:00:00 CEST 1999 until Mon Jun 22 06:00:00 CEST 2020
adding as trusted cert:
Subject: CN=SecureTrust CA, O=SecureTrust Corporation, C=US
Issuer: CN=SecureTrust CA, O=SecureTrust Corporation, C=US
(....)