openssl s_client за допомогою проксі


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

це приємна команда для запуску, коли ви хочете перевірити сертифікати сервера та його ланцюжок сертифікатів.

Чи є спосіб запустити цю команду, коли ви стоїте за проксі HTTP / HTTPS?

Відповіді:



55

Ви можете використовувати проксі-тунель :

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

а потім ви можете зробити це:

openssl s_client -connect localhost:7000 -showcerts

Сподіваюся, це може вам допомогти!


Мені довелося proxytunnel -p yourproxy:8080 -d www.google.com:443 -a 7000запустити у фоновому режимі, щоб звільнити термінал для другої команди.
Michael-7,

3
proxytunnelпідтримує проксі-аутентифікацію, яка (afaict) openssl s_client -proxyне підтримує, принаймні, не через 1.1.0h.
Роджер Ліпскомб

27

для тих, хто приїде сюди станом на травень 2015 року: є нова опція "-proxy", яка буде включена до наступного випуску openssl: https://rt.openssl.org/Ticket/Display.html?id=2651&user= guest & pass = гість


5
Я щойно спробував OpenSSL 1.0.2g 1 березня 2016 р. (Windows), і він нічого не знає про опцію проксі. Чому?
Крістіан Шефер,

3
Чи добре оновити пакет openssl до версії, яка не входить до складу ОС?
Криштер

4
@ ChristianSchäfer Це тому, що версія 1.0.2xx не є "наступним випуском". Ця опція доступна лише в OpenSSL 1.1.0xx та пізніших версіях.
зед

1
Дійсно, див. Сторінку керівництва openssl.org/docs/man1.1.0/apps/openssl-s_client.html#OPTIONS
Франклін Ю

25

оскільки 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

Завантажив джерело 1.1.1, спробував цей синтаксис. Працював ідеально. Ура.
Енді Браун,

дякую, я не помітив -proxyопції, але мені цікаво, чи не замість неї слід розглядати проксі envvars.
gonzalesraul

Роле, я не знайшов "http_proxy" у вихідному коді, тому я можу вважати, що змінна середовища проксі не підтримується
Арно Грандвіль

1

Навіть з openssl v1.1.0 у мене були проблеми з передачею нашого проксі, наприклад, s_client: HTTP CONNECT failed: 400 Bad Request це змусило мене написати мінімальний клас Java, щоб показати 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);
}

При такій залежності:

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

Ви можете запустити його з увімкненим журналом Java SSL Logging

Це має дати хороший результат, як

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
(....)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.