【问题标题】:How to debug a SSL https hang ERR_CONNECTION_TIMED_OUT如何调试 SSL https 挂起 ERR_CONNECTION_TIMED_OUT
【发布时间】:2016-08-22 20:41:17
【问题描述】:

虽然我的 SSL 证书没有过期,并且配置它的 AWS ELB 中没有任何更改,但通过 HTTPS 访问我的站点突然挂起并在 ERR_CONNECTION_TIMED_OUT 中终止。调试时我注意到它甚至没有到达 PHP 脚本。

如何调试浏览器、ELB 中的证书和我的服务器之间的路径以查看它“卡住”的位置?

在 Ubuntu 上是否有我可以查看对 SSL 端口的请求的 Apache 日志?

【问题讨论】:

    标签: php apache amazon-web-services ssl https


    【解决方案1】:

    您可以在apache中启用登录:

    <IfModule mod_ssl.c>
        ErrorLog /var/log/apache2/ssl_engine.log
        LogLevel debug
    </IfModule>
    

    并使用openssl s_client 从客户端检查 ssl 协商的外观,例如:

    openssl s_client -connect stackoverflow.com:443
    

    基本 TCP 连接(与 ssl 无关)可以通过telnet 进行检查:

    • 第 1-4 层运行良好,已建立连接:

      $ telnet stackoverflow.com 443
      Trying 104.16.35.249...
      Connected to stackoverflow.com.
      Escape character is '^]'.
      
    • 解析主机,但不能握手:

      $ telnet stackoverflow.com 443
      Trying 104.16.37.249...
      
    • 无法解析主机:

      $ telnet stackoverflow.com 443
      telnet: could not resolve stackoverflow.com/443: Name or service not known
      

    【讨论】:

    • 当运行 openssl s_client -connect mydomain.com:443 它只是挂起而没有任何输出。 (为stackoverflow运行相同的显示调试信息)。这对于请求被卡在哪里意味着什么?我猜在这种情况下,在 .htaccess 中添加 ErrorLog 不会有帮助,对吧?
    • 其实并没有无限期挂,我终于得到了connect: Operation timed out connect:errno=60
    • 然后telnet mydomain.com 443 确认端口已打开并且服务器对其进行侦听。 tcpdump/ wireshark 或任何其他嗅探器以获取有关数据包级别的详细信息,如果握手实际发生。
    • telnet mydomain.com 443 也挂起,没有任何输出。卡在哪里意味着什么?
    • 关于 TCP 握手。来自SYN - SYN,ACK - ACK 序列的数据包之一没有通过。第二个是由服务器返回的,所以它要么是防火墙,要么服务器没有侦听端口/接口。问题出在传输层,与 ssl 库/证书无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多