PHP cURL 错误“安全库失败”。

Posted

技术标签:

【中文标题】PHP cURL 错误“安全库失败”。【英文标题】:PHP cURL error "security library failure." 【发布时间】:2020-08-08 00:01:06 【问题描述】:

我正在使用以下代码为 ios 发送 apns 通知。之前它工作正常,但我从 cURL“安全库故障”开始得到这个响应。代码为 0。

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($sample_alert));
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_SSLCERT, $certificate);
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pem_secret);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $response = curl_exec($ch);

这个问题似乎只发生在我的开发环境中,不管传入什么数据。

$url = "https://api.development.push.apple.com/3/device/$device_token";

$sample_alert =

           "aps":"alert":"sample notif message","badge":"badge","sound":"default"

$headers =

["apns-topic: apns.topic"]

【问题讨论】:

它与 php 5.6 有什么关系?它只与这个版本有关吗? 不,该错误并非特定于 php5.6,它也出现在 php 7 上。此外,该错误刚刚开始在 PRODUCTION 上显示 您遇到了什么问题?成功的 API 调用是否返回“安全库失败”? 安全库故障显示为 curl_error(),错误代码为 0 和 35,这两者都表明 API 永远无法访问。 我遇到了同样的错误。如何解决? 【参考方案1】:

我们面临同样的问题。我们的机器运行的是 CentOS 7、PHP 7、Curl 7.75。

我们添加了 curl 选项 curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_MAX_TLSv1_2);,以强制将 TLS 限制为最高版本 1.2,但它不起作用,因为我们的 PHP 版本会发出警告,指出它不知道常量 CURL_SSLVERSION_MAX_TLSv1_2

我们有一个解决方法,使用所述常量的整数值而不是使用定义的常量。检查在 curl repo here 找到的值。

CURL_SSLVERSION_MAX_TLSv1_2 定义为 (CURL_SSLVERSION_TLSv1_2 393216

因此,我们添加了这个 curl 选项curl_setopt($ch, CURLOPT_SSLVERSION, 393216);,它成功发送了一个请求,没有出现“安全库失败”错误。

PS。这只是设置最大 TLS 版本的一种解决方法。

PPS。正如manual 中所述,您应该让 curl 使用默认的 SSL 版本。因此,使用它需要您自担风险。此答案只是一种解决方法。

【讨论】:

【参考方案2】:

我们有一个类似的错误,就像你说它从开发开始,昨天它也发生在生产中。

我们通过更新服务器上的 curl 来解决。 尝试在您的机器上启动相同的 curl,例如在我的 Mac 上,推送在此版本中运行良好:

curl 7.64.1 (x86_64-apple-darwin19.0) libcurl/7.64.1 (SecureTransport) LibreSSL/2.8.3 zlib/1.2.11 nghttp2/1.39.2

在使用较旧 curl 版本的服务器上,我们遇到了相同的错误安全库故障。 如果无法更新 curl,请尝试将此参数添加到调用中

--tls-max 1.2

【讨论】:

我也面临同样的问题。我已经更新了库但没有工作。----- 我正在运行 CentOS 7、Apache 2.4.46、PHP 7.4.15、CURL 7.75、OpenSSL 1.1.1j。但我仍然遇到同样的错误

以上是关于PHP cURL 错误“安全库失败”。的主要内容,如果未能解决你的问题,请参考以下文章

CURL错误:Recv失败:通过对等方重置连接 - PHP Curl

使用 Tumblr PHP API 时出现致命错误 cURL 错误 60 [重复]

PHP Curl出现403错误怎么办

Facebook 需要 CURL PHP 扩展错误

Curl PHP - 400 错误无法满足请求

HTTP 400 错误请求 - CURL PHP