我正在从我的本地主机和生产服务器运行下一个脚本,并且我得到了不同的输出。任何人都知道为什么我会得到那个 false
从我的本地主机?
<?php
$host = 'ssl://mail.companyname.org';
$port = 993;
$error = 0;
$errorString = "";
var_dump(fsockopen($host, $port, $error, $errorString, 30));
var_dump($errorString);
var_dump($error);
本地主机输出:bool (假)
生产服务器输出:
类型(流)的资源(4)
更新 :在评论/回答之后,我修改了代码,现在我在本地主机上得到了这个输出:
PHP Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /tmp/test.php on line 7 PHP Warning: fsockopen(): Failed to enable crypto in /tmp/test.php on line 7 PHP Warning: fsockopen(): unable to connect to ssl://mail.twmdata.org:993 (Unknown error) in /tmp/test.php on line 7 bool(false) string(0) "" int(0)
最佳答案
这似乎是服务器证书的问题:
首先,您可以通过以下方式检查您的服务器证书及其链是否有效:
https://www.sslshopper.com/ssl-checker.htm
如果 ssl-checker 出现问题?
如果您成功并且错误仍然存在?
如果您有自签名证书:
如果你没有证书,也不关心中间人攻击,
您仍然可以在没有证书的情况下使用 SSL。
建议至少拥有自签名证书。如果您有自签名,请尝试 1 解决方案。
我发现了问题
您已经暴露了您的 域名 在您的 PHP 警告日志中,所以我检查了您的域 SSL。
在我使用此工具检查您公司的域证书后:
https://www.sslshopper.com/ssl-checker.html#hostname=twmdata.org
您的证书有 2 个错误:
所以看来你必须先更新你的证书
更新:
我发现这个答案可能有帮助
https://stackoverflow.com/a/40962061/9287628
它建议使用
stream_context_create(['ssl' => [
'ciphers' => 'RC4-MD5'
]])
因为@ChrisHaas 建议与 stream_context_create
联系和 stream_socket_client
如果您想指定证书目录或要关闭证书检查,则为您提供了很多选择。
关于php - 尝试使用 fsockopen() 连接 SSL 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65010281/