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

问题描述 投票:0回答:1

我被要求使用 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
  • 使用不同的 SSL 版本(默认/TLSv1/SSLv2、SSLv3、TLSv1_0、TLSv1_1、TLSv1_2)
  • 设置 VERBOSE 但没有更详细的消息

目前,只有以下操作可以得到目标服务的响应:

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

我希望php使用curl和CA文件应该没问题(就像我在linuxcurl中所做的那样),有谁知道在不同系统中产生不同结果的原因以及如何解决问题?非常感谢!

版本:

  • 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
php ssl curl
1个回答
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 的 SSL/TLS 版本1.2 目前已被认为已过时,因此您访问的服务器可能不会接受它。 Linux 下的curl 使用 OpenSSL 1.1.1,它支持 TLS 1.2 和 TLS 1.3 - 但即使 OpenSSL 1.1.1 现在也已停产。

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

© www.soinside.com 2019 - 2024. All rights reserved.