【问题标题】:Openssl shows a different server certificate while browser shows correctlyOpenssl 显示不同的服务器证书,而浏览器正确显示
【发布时间】:2014-02-20 15:25:47
【问题描述】:

我正在使用 openssl s_client -showcerts -connect test.abc.com:443 -state -debug 来检查服务器证书。服务器正在使用 nginx。但是当我请求上面的 openssl 时,将服务器证书显示为 *.xyz.com。我想知道 openssl 在哪里获取它作为服务器证书。操作系统是Linux。签入 /etc/pki/tls 但 openssl 读取为服务器证书的证书不存在。并且 nginx 配置指向 abc.com 的正确证书。此外,如果我使用浏览器访问,则会显示正确的证书。这只发生在 openssl 上。 :(

【问题讨论】:

  • 能否提供浏览器使用的URL和OpenSSL命令使用的服务器?另外,您使用的是什么版本的 OpenSSL(openssl-1.0.2 添加了名称检查和验证,可能有一些东西被撞到了不合适的地方)。
  • apitest.ethormapp.com,openssl 的版本是 OpenSSL 1.0.1e-fips 11 Feb 2013

标签: linux nginx openssl ssl-certificate


【解决方案1】:

openssl 存在 SNI 问题,请尝试使用以下命令:

openssl s_client -showcerts -connect www.example.com:443 -servername www.example.com </dev/null

根据this article添加-servername应该可以清除它。

【讨论】:

    【解决方案2】:

    服务器正在向ethornetworks.com 发出永久重定向。要查看它,首先发出您的s_client 命令:

    $ openssl s_client -CAfile AddTrustExternalCARoot.crt -connect apitest.ethormapp.com:443
    CONNECTED(00000003)
    depth=4 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
    verify return:1
    depth=3 C = US, ST = UT, L = Salt Lake City, O = The USERTRUST Network, OU = http://www.usertrust.com, CN = UTN - DATACorp SGC
    verify return:1
    depth=2 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = COMODO Certification Authority
    verify return:1
    depth=1 C = GB, ST = Greater Manchester, L = Salford, O = COMODO CA Limited, CN = EssentialSSL CA
    verify return:1
    depth=0 OU = Domain Control Validated, OU = EssentialSSL Wildcard, CN = *.ethornetworks.com
    verify return:1
    ...
    

    在最底部,得到验证结果后,输入GET / HTTP/1.0命令并按两次RETURN:

        ...
        Start Time: 1390985154
        Timeout   : 300 (sec)
        Verify return code: 0 (ok)
    ---
    GET / HTTP/1.0
    
    HTTP/1.1 301 Moved Permanently
    Server: nginx/1.4.4
    Date: Wed, 29 Jan 2014 08:46:01 GMT
    Content-Type: text/html
    Content-Length: 184
    Connection: close
    Location: https://www.ethornetworks.com/
    
    <html>
    <head><title>301 Moved Permanently</title></head>
    <body bgcolor="white">
    <center><h1>301 Moved Permanently</h1></center>
    <hr><center>nginx/1.4.4</center>
    </body>
    </html>
    closed
    $ 
    

    如果你遵循重定向,那么你会得到预期的结果:

    $ openssl s_client -CAfile AddTrustExternalCARoot.crt -connect www.ethornetworks.com:443
    CONNECTED(00000003)
    depth=4 C = SE, O = AddTrust AB, OU = AddTrust External TTP Network, CN = AddTrust External CA Root
    verify error:num=19:self signed certificate in certificate chain
    verify return:0
    ---
    Certificate chain
     0 s:/OU=Domain Control Validated/OU=EssentialSSL Wildcard/CN=*.ethornetworks.com
       i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=EssentialSSL CA
     1 s:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=EssentialSSL CA
       i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO Certification Authority
    ...
    

    最后,您可以使用AddTrust External CA Root 来确保链按预期进行验证。如果没有它和-CAfile 选项,s_client 将报告19 (self signed certificate in certificate chain)

    【讨论】:

    • 谢谢,但问题是为什么我通过网络浏览器访问时得到正确的证书和 URL?
    • 您的浏览器正在跟踪重定向,而 OpenSSL 的 s_client 没有。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多