8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

连接到服务器名称时出现未知 SSL 协议错误:443

prosti 1月前

30 0

我被要求使用 php 5.2.6 实现 OIDC,但在 fetchURL:curl_setopt($ch, CURLOPT_URL $url);if (isset($this->certPath)){... 期间遇到“连接中出现未知的 SSL 协议错误”

我被要求使用 php 5.2.6 实现 OIDC,但在 fetchURL 期间遇到“连接中出现未知的 SSL 协议错误”:

curl_setopt($ch, CURLOPT_URL $url);
if (isset($this->certPath)){
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_CAINFO, $this->certPath);
}
else{
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
if (curl_exec($ch) === false{
    throw new OpenIDConnectioClientException('Curl error: ' . curl_error($ch));
}  

已搜索并尝试了以下操作,但没有帮助

  • 设置我们 IT 部门提供的 CA 文件 (cacert.pem)
  • 将 VERIFYPEER / VERIFYHOST 设置为 False
  • 使用不同的 SSLVERSION(DEFAULT / TLSv1 / SSLv2、SSLv3、TLSv1_0、TLSv1_1、TLSv1_2)
  • 设置 VERBOSE 但没有更详细的消息

目前,只有这些操作才能得到目标服务的响应:

  • 使用 php curl,将 url 的开头设置为 http 而不是 https
  • 使用 Windows curl,带参数 -k 或 --ssl_no_revoke
  • 使用 IT 提供的 cacert.pem 和 linux curl

我希望 php 使用 curl 和 CA 文件应该没问题(就像我在 linux curl 中所做的那样),有谁知道为什么不同的系统会出现不同的结果以及如何解决这个问题?非常感谢!

版本:

  • php 5.2.6 和 curl 7.16.0
  • Windows curl 8.0.1(Windows)libcurl/8.0.1 Schannel WinIDN
  • Linux curl 7.68.0(x86_64-pc-linux-gnu)libcurl/7.68.0 OpenSSL/1.1.1f zlib/1.2.11 brotli/1.0.7 libidn2/2.2.0 libpsl/0.21.0(+libidn2/2.2.0)libssh/0.9.3/openssl/zlib nghttp2/1.40.0 librtmp/2.3
帖子版权声明 1、本帖标题:连接到服务器名称时出现未知 SSL 协议错误:443
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由prosti在本站《php》版块原创发布, 转载请注明出处!
最新回复 (0)
  • TL;DR:您可能需要升级旧的软件堆栈才能解决该问题。

    • php 5.2.6 和 curl 7.16.0

    这是 16 年前(2008 年)发布的 PHP 版本,很久以来都不受支持。包含的 curl 7.16.0 甚至更老 - 2006 年发布。与此 PHP 链接的 openssl 版本可能也差不多老旧。

    OpenSSL 1.0.1 是第一个支持 TLS1.2 的版本,于 2012 年发布(但现在也已停产),也就是说比您的 PHP 版本晚了很多年,因此不太可能包含在内。但是,任何低于 TLS 1.2 的 SSL/TLS 版本在今天都被视为过时,因此您访问的服务器可能不会接受它 - 从而导致您遇到错误。Linux 下的 curl 使用 OpenSSL 1.1.1,它支持 TLS 1.2 和 TLS 1.3。但即使是 OpenSSL 1.1.1 现在也已停产。

    除了无法在如此老旧的软件堆栈上使用现代 TLS 之外,出于安全原因使用如此老旧的版本也是非常不明智的。此版本包含几个严重问题,包括未经身份验证的代码执行。

  • 此外,我还感到困惑,为什么我不能像 liunx 那样使用带有 CA 文件的 Windows curl 并获得正确的响应,linux curl 中的 OpenSSL 是原因吗?

  • @NickLin 告诉那些说你必须使用这些版本的人,出于“某些原因”,尝试使用这些特定版本的 PHP、Curl 和 OpenSSL 进行现代 TLSv1.2 或 TLSv1.3 连接就像告诉你将 2006 年的 Yugo 插入 2024 年的特斯拉充电器来为其加油一样。这不会起作用,而告诉你让它工作,坦率地说,是彻头彻尾的无知。而且无能。

  • @NickLin:\'此外,我还感到困惑,为什么我不能使用 Windows curl 和 CA 文件(如 liunx)并获得正确的响应,Linux curl 中的 OpenSSL 是原因吗?\' - 您在 Windows 上使用的 curl 使用 SChannel 而不是 OpenSSL 作为 TLS 库,因此需要您设置在 Windows 信任存储中获得的证书,而不是在命令行中提供它。是的,所有这些不同的 TLS 库及其不同的行为都是一团糟。

返回
作者最近主题: