【问题标题】:openssl s_client using a proxyopenssl s_client 使用代理
【发布时间】:2011-03-14 07:42:25
【问题描述】:
openssl s_client -connect some.https.server:443 -showcerts

当您想要检查服务器的证书及其证书链时,这是一个很好的运行命令。

当您使用 HTTP/HTTPS 代理时,有没有办法运行此命令?

【问题讨论】:

    标签: openssl


    【解决方案1】:

    【讨论】:

    • 实际上,截至 2015 年 5 月 22 日,该补丁似乎已实际实施。我也看到了
    【解决方案2】:

    你可以使用proxytunnel:

    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 在后台运行以释放终端以执行第二个命令。
    • proxytunnel 支持代理身份验证,(afaict)openssl s_client -proxy 不支持,至少在 1.1.0h 中不支持。
    【解决方案3】:

    对于 2015 年 5 月后来到这里的任何人:有一个新的“-proxy”选项将包含在下一个版本的 openssl 中:https://rt.openssl.org/Ticket/Display.html?id=2651&user=guest&pass=guest

    【讨论】:

    • 我刚刚在 2016 年 3 月 1 日尝试了 OpenSSL 1.0.2g (Windows),它对代理选项一无所知。为什么?
    • 是否可以将 openssl 包更新为未与操作系统捆绑的版本?
    • @ChristianSchäfer 这是因为 1.0.2xx 版本不是“下一个版本”。此选项仅在 OpenSSL 1.1.0xx 及更高版本中可用。
    【解决方案4】:

    从 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 选项,但我想知道是否应该考虑代理环境变量。
    • Raul,我在源代码中没有找到“http_proxy”,所以我可以考虑不支持代理环境变量
    【解决方案5】:

    即使使用 openssl v1.1.0 我在通过代理时也遇到了一些问题,例如s_client: HTTP CONNECT failed: 400 Bad Request 这迫使我编写了一个最小的 Java 类来显示 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);
    }
    

    具有以下依赖关系:

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

    你可以用Java SSL Logging turned on运行它

    这应该会产生不错的输出,例如

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

    【讨论】:

      猜你喜欢
      • 2016-06-20
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2019-09-30
      • 2014-01-16
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多