openssl s_client mit einem Proxy

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

ist ein netter Befehl, der ausgeführt werden soll, wenn Sie die Zertifikate des Servers und seine Zertifikatkette überprüfen möchten.

Gibt es eine Möglichkeit, diesen Befehl auszuführen, wenn Sie sich hinter einem HTTP / HTTPS-Proxy befinden?

pushNpop
quelle

Antworten:

55

Sie können Proxy-Tunnel verwenden :

proxytunnel -p yourproxy:8080 -d www.google.com:443 -a 7000

und dann können Sie dies tun:

openssl s_client -connect localhost:7000 -showcerts

Hoffe das kann dir helfen!

Francesco Carlucci
quelle
Ich musste proxytunnel -p yourproxy:8080 -d www.google.com:443 -a 7000im Hintergrund laufen, um das Terminal für den zweiten Befehl freizugeben.
Michael-7
3
proxytunnelunterstützt die Proxy-Authentifizierung, was (afaict) openssl s_client -proxynicht tut, zumindest nicht in 1.1.0h.
Roger Lipscombe
26

Für alle, die nach Mai 2015 hierher kommen: Es gibt eine neue "-proxy" -Option, die in der nächsten Version von openssl enthalten sein wird: https://rt.openssl.org/Ticket/Display.html?id=2651&user= Gast & Pass = Gast

Erich Eichinger
quelle
5
Ich habe gerade OpenSSL 1.0.2g am 1. März 2016 (Windows) ausprobiert und es weiß nichts über eine Proxy-Option. Warum?
Christian Schäfer
3
Ist es in Ordnung, das openssl-Paket auf eine Version zu aktualisieren, die nicht im Lieferumfang des Betriebssystems enthalten ist?
Krishter
4
@ ChristianSchäfer Es liegt daran, dass Version 1.0.2xx keine "nächste Version" ist. Diese Option ist nur in OpenSSL 1.1.0xx und höher verfügbar.
Zed
1
In der Tat, siehe Handbuch Seite openssl.org/docs/man1.1.0/apps/openssl-s_client.html#OPTIONS
Franklin Yu
21

seit 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
Arnaud Grandville
quelle
Heruntergeladen 1.1.1 Quelle, versuchte diese Syntax. Hat perfekt funktioniert. Prost.
Andy Brown
danke, ich habe die -proxyOption nicht bemerkt , aber ich frage mich, ob stattdessen Proxy-Envvars in Betracht gezogen werden sollten.
Gonzalesraul
Raul, ich habe "http_proxy" nicht im Quellcode gefunden, daher kann ich davon ausgehen, dass die Proxy-Umgebungsvariable nicht unterstützt wird
Arnaud Grandville,
0

Selbst mit openssl v1.1.0 hatte ich einige Probleme beim Übergeben unseres Proxys, z. B. s_client: HTTP CONNECT failed: 400 Bad Request zwang mich dies, eine minimale Java-Klasse zu schreiben, um den SSL-Handshake anzuzeigen

    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);
}

Mit folgender Abhängigkeit:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
        <type>jar</type>
    </dependency>

Sie können es mit aktivierter Java SSL-Protokollierung ausführen

Dies sollte eine schöne Ausgabe wie erzeugen

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
(....)
gratinierer
quelle