【发布时间】:2016-11-10 17:58:02
【问题描述】:
以前已经回答过类似的问题,但我无法解决这个特殊情况。
在 PHP 5.6+ 机器上,当我尝试在特定域上使用 fsockopen 时,我收到以下信息(不是真实域):
$ php -r "var_dump(fsockopen(\"ssl://www.domain.net\", 9085, \$errnum, \$errstr, 5));"
PHP Warning: fsockopen(): Failed to enable crypto in Command line code on line 1
PHP Warning: fsockopen(): unable to connect to ssl://www.domain.net:9085 (Unknown error) in Command line code on line 1
bool(false)
这在 PHP 5.5 上运行良好,这表明它是由于 5.6 中处理 fsockopen 验证 ssl 证书方式的变化。
可以毫无问题地进行其他连接:
$ php -r "var_dump(fsockopen(\"ssl://www.google.com\", 443, \$errnum, \$errstr, 5));"
resource(4) of type (stream)
根据其他建议,我检查了默认证书文件
$ php -r "print_r(openssl_get_cert_locations());"
Array
(
[default_cert_file] => /usr/lib/ssl/cert.pem
[default_cert_file_env] => SSL_CERT_FILE
[default_cert_dir] => /usr/lib/ssl/certs
[default_cert_dir_env] => SSL_CERT_DIR
[default_private_dir] => /usr/lib/ssl/private
[default_default_cert_area] => /usr/lib/ssl
[ini_cafile] =>
[ini_capath] =>
)
文件 /usr/lib/ssl/cert.pem 最初丢失了,我从 curl 下载了 ca 包并将其重命名以匹配。还是没有运气。
我没有收到任何其他信息表明验证证书失败。还有其他方法可以调试问题吗?
【问题讨论】:
-
嗯。如果它只发生在一个域上并且您不会告诉我们该域是什么,那么这将很难帮助您。
-
您能否检查您尝试连接的站点是仅 SSLv3 还是支持 TLS?
-
@Chris 你说得对。域名是 ts1.fcnsrv.net