【问题标题】:fsockopen on SSL does not working on specific hostSSL 上的 fsockopen 在特定主机上不起作用
【发布时间】:2019-12-02 00:08:41
【问题描述】:

在工作的生产服务器上,在某个时间点(6 月 24 日 13:18),fsockopen 开始无缘无故地失败。

$sock = fsockopen("ssl://mail.dupcheck.org",993, $errno, $errstr, 300);
  • 它返回:$sock = false, errno = 0, errstr = "" 很快。
  • 它会打开其他服务器。

重要的是,

  • 它在 linux Web 服务器和 Windows (WAMP) 开发服务器上都不起作用
  • MS Outlook 和其他邮件客户端完美连接到此服务器并获取邮件。
  • 那天(6 月 24 日)我们的 GoDaddy SSL 证书出现了一些问题 - 它开始显示不正确的日期!我们当时打电话给 GoDaddy 的支持,他们说问题已解决。
  • 从那时起,差不多一个月,有时 fsockopen 工作,我们收到电子邮件,没有人注意,没有人检查特定的邮件发送日志......直到今天它达到了 300M!

====

PHP 7.3.3-1,ubuntu16.04.1


是的,我阅读了手册,在 Google 上搜索了几个小时,但没有任何缓解。没有人知道那是什么,包括系统管理员。

【问题讨论】:

  • 也许详细说明“它开始显示不正确的日期”......这是怎么发生的?假设问题不在服务器端,那么“改变了什么”这句老话很有用。 OpenSSL 的变化? CA Bundle 已过期(缺少更改)?与fsockopen 通话相关的日志中没有警告?问题是间歇性的?
  • tls.imirhil.fr/tls/mail.dupcheck.org:993 似乎没有表现出什么特别之处。您应该增加日志记录,并尝试在 PHP 之外同时重现该问题。就目前而言,您的问题与编程无关,因此Super UserServer Fault 可能是更好的场所。
  • 请参阅 stackoverflow.com/help/on-topic 仅使用 fsockopen 并不自动意味着您的问题符合此处描述的 4 个项目符号中的任何一个。
  • “我就是不能再增加日志” 为什么?当问题发生时,您是否使用openssl s_client 或任何其他 TLS 客户端来重现它?你能嗅探网络并查看交换了什么吗?您是否尝试过其他主机的相同代码?另一个 PHP/OpenSSL 版本?等等。
  • 也来自文档:“如果 errno 中返回的值为 0 并且函数返回 FALSE,则表明错误发生在 connect() 调用之前。这很可能是由于问题初始化套接字。”这意味着它根本不是 TLS 问题。也许您遇到了 DNS 解析问题,或者您的程序在任何给定时间可以打开的套接字数量受到了一些限制。这应该写在一些日志文件的某个地方,如果它们足够详细的话。

标签: php ssl fsockopen


【解决方案1】:

来自评论:

... openssl s_client 完美运行...

它的工作原理是连接并进行 TLS 握手。但它并不完美,因为它清楚地表明证书验证失败:

$ openssl s_client -connect mail.dupcheck.org:993
...
Certificate chain
 0 s:/OU=Domain Control Validated/CN=mail.dupcheck.org
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
...
    Verify return code: 10 (certificate has expired)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

仔细查看证书:

    Serial Number:
        92:a0:2d:2a:2f:28:6a:d5
Signature Algorithm: sha256WithRSAEncryption
    Issuer: C=US, ST=Arizona, L=Scottsdale, O=GoDaddy.com, Inc., OU=http://certs.godaddy.com/repository/, CN=Go Daddy Secure Certificate Authority - G2
    Validity
        Not Before: Jun 24 10:16:38 2016 GMT
        Not After : Jun 24 10:16:38 2019 GMT

因此,该证书已在几周前过期。这可能是连接失败的原因。

... tls.imirhil.fr/tls/mail.dupcheck.org:993 似乎没有表现出任何异常。

此站点似乎根本不检查证书的有效性。

【讨论】:

  • (它仍然没有回答这是如何发生的,因为我们在 6 月 24 日突然出现了这个错误,尽管证书到 2023 年......所以重新安装了)
  • @AlexeyAbraham:证书的安装与此代码无关,但与服务器的设置有关。关于这个设置以及那里的事情是如何搞砸的以及可能是谁或什么做了它,我们一无所知。
  • GoDaddy 的证书在 6 月份出现了一些问题 - 一些证书在实际到期日期之前就已过期。但确实如此。您对证书安装的了解与我几乎相同:)
猜你喜欢
  • 2011-12-24
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 1970-01-01
  • 2015-02-25
相关资源
最近更新 更多