le client d'openssl utilisant un proxy

openssl s_client -connect some.https.server:443 -showcerts

est une commande agréable à exécuter lorsque vous voulez inspecter les certificats du serveur et sa chaîne de certificats.

y a-t-il un moyen d'exécuter cette commande lorsque vous êtes derrière un mandataire HTTP/HTTPS ?

44
demandé sur pushNpop 2010-07-10 22:42:57

5 réponses

14
répondu mtomy 2011-12-29 13:22:06

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!

36
répondu francarl 2017-03-07 01:36:07

pour toute personne venant ici depuis mai 2015: il y a une nouvelle option "- proxy "qui sera incluse dans la prochaine version d'openssl: https://rt.openssl.org/Ticket/Display.html?id=2651&user=guest&pass=guest

12
répondu Erich Eichinger 2015-07-20 17:05:17

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 = xxxx@xxxx.xx
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/emailAddress=xxxx@xxxx.xx
 1 s:/C=xxxx/L=xxxx/CN=svproxysg1/emailAddress=xxxx@xxxx.xx
   i:/DC=com/DC=xxxxx/CN=xxxxx CA interne
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDkTCCAnmgAwIBAgIJAIv4/hQAAAAAMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV
BAYTAkZSMQ4wDAYDVQQHEwVDUk9JWDETMBEGA1UEAxMKc3Zwcm94eXNnMTEeMBwG
4
répondu Arnaud Grandville 2018-03-08 09:57:08

même avec openssl v1.1.0 j'ai eu quelques problèmes pour passer notre procuration, par exemple s_client: HTTP CONNECT failed: 400 Bad Request Cela m'a forcé à écrire une classe Java minimale pour montrer la poignée de main SSL

    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 la dépendance suivante:

    <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 belle sortie 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
(....)
0
répondu gratinierer 2018-09-10 09:54:03