尝试使用fsockopen()连接SSL服务器

我正在从我的本地主机和生产服务器运行下一个脚本,并且我得到了不同的输出。任何人都知道为什么我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);

本地主机输出:

布尔(假)

生产服务器输出:

类型(流)的资源(4)

更新:在评论/回答之后,我修改了代码,现在我在本地主机上得到了这个输出:

PHP 警告:fsockopen():SSL 操作失败,代码为 1。OpenSSL 错误消息:错误:1416F086:SSL 例程:tls_process_server_certificate:证书验证在第 7 行 /tmp/test.php 中失败 PHP 警告:fsockopen():无法启用/tmp/test.php 第 7 行 PHP 警告:fsockopen(): 无法连接到 ssl://mail.twmdata.org:993 (Unknown error) in /tmp/test.php 第 7 行 bool(false) ) 字符串(0) "" int(0)

回答

这似乎是服务器证书的问题:

首先,您可以通过以下方式检查您的服务器证书及其链是否有效:

https://www.sslshopper.com/ssl-checker.htm

如果 ssl-checker 出现问题?

  • 您可以尝试更正companyname.org 中的SSL 证书配置

    如果您成功并且错误仍然存​​在?

    1. 您必须手动添加证书文件

如果您有自签名证书:

  1. 您必须手动添加证书文件

如果您没有证书,也不关心中间人攻击,您仍然可以使用没有证书的 SSL。

  1. 关闭php fsock证书检查(不推荐)

建议至少拥有自签名证书。如果您有自签名的 try 1解决方案。

我发现了问题

您已经在 PHP 警告日志中公开了您的域名,因此我检查了您的域 SSL。

在我使用此工具检查您公司的域证书后:

https://www.sslshopper.com/ssl-checker.html#hostname=twmdata.org

您的证书有 2 个错误:

  • 此证书已过期(0 天前)。现在续约。

  • 证书中没有一个通用名称与输入的名称 (twmdata.org) 匹配。在 Web 浏览器中访问此站点时,您可能会收到错误消息。

所以看来你必须先更新你的证书

更新:

我发现这个答案可能有帮助

/sf/answers/2867344301/

它建议使用

stream_context_create(['ssl' => [
   'ciphers' => 'RC4-MD5'
]])

正如@ChrisHaas 建议连接stream_context_createstream_socket_client为您带来很多选择,如果您想指定证书目录或您想关闭证书检查。


以上是尝试使用fsockopen()连接SSL服务器的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>