Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SSL上的Curl请求失败?_Php_Curl_Libcurl - Fatal编程技术网

Php SSL上的Curl请求失败?

Php SSL上的Curl请求失败?,php,curl,libcurl,Php,Curl,Libcurl,我有这个密码 if(ereg("^(https)",$url)) curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false); // execute, and log the result to curl_put.log $result = curl_exec($curl); $error = curl_error($curl); 指定的错误为 SSL read: error:00000000:lib(0)

我有这个密码

    if(ereg("^(https)",$url))
        curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    // execute, and log the result to curl_put.log
    $result = curl_exec($curl);


    $error = curl_error($curl);
指定的错误为

SSL read: error:00000000:lib(0):func(0):reason(0), errno 104

任何关于SSL原因的想法,请确保您已从php.ini打开。

我认为您的意思是使用CURLOPT_SSL_VERIFYHOST,而不是CURLOPT_SSL_VERIFYPEER添加以下内容:

curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,0)


我也犯了同样的错误,工作正常。

我在使用第三方库时遇到了类似的神秘错误。我尝试了
CURLOPT\u SSL\u VERIFY[PEER | HOST]
,但没有什么不同。我的错误消息与此类似:

SSL read: error:00000000:lib(0):func(0):reason(0), errno 54
所以我访问了,寻找错误代码54

CURLE_SSL_ENGINE_SETFAILED (54) Failed setting the selected SSL crypto engine as default!
但这是错误的——我在应用程序的其他部分使用curl进行其他HTTPS请求。所以我不断地挖掘,发现了这个问题,其中有一个宝石:

您看到的输出来自libcurl源代码中的lib/ssluse.c,其中提到的“errno”不是libcurl错误代码,而是当时实际的errno变量


所以,不要让这些信息的输出误导你。相反,使用获取正确的错误代码,在本例中实际上是56,CURLE_RECV_error。有错误的主机名…

我有相同的错误被函数
curl\u error
打印出来,但这不一定与SSL有关。最好使用函数
curl\u errno
打印准确的错误号,这样可以更好地进行诊断。在我的情况下,它返回了52个错误代码,我可以从那里进行调试,事实上,另一台服务器没有发送任何数据。

我也遇到了同样的问题。事实证明,目标系统上的ssl配置不正确

在检查了php curl模块、GuzzleHttp版本和openssl版本后,我在浏览器中调用了链接,它成功了。但是控制台上的curl--tlsv1-kv仍然存在错误

因此,我检查了ssl配置,它的评级为B。在那里,一些在线证书状态协议(OCSP)错误我以前没有见过。最后,我将目标系统上的配置更改为重新启动Web服务器时的建议,一切正常。SSLLAB的新评级现在为A+

我的nginx配置(Ubuntu 14.04,nginx 1.4.6-1ubuntu3.5):


这意味着目标服务器需要SSL通信

您应该为运行CURL请求的发送服务器生成SSL证书

让我们加密是第一个免费开放的CA

一切都在这里描述


这不是同一个问题吗?甚至没有关闭…请注意。如果verify处于关闭状态,为什么要使用HTTPS?如果您信任通道,您可以忽略verify host标志,加密工作,但您不需要检查证书。这只会使连接容易受到MITM攻击(请参阅)。如果您使用此curl从您自己的网络获取数据,则不需要,读取未加密的数据并不意味着攻击,有时你不需要加密这些数据。我如何打开它?在PHP.ini文件中,如果你使用WAMPP或XAMPP,但启用后,我仍然有相同的错误代码我得到了错误号104,而实际上它也是56,谢谢!在我的例子中,我还需要将
ssl_协议
限制为
TLSv1.2
,因为v1和v1.1与我的环境的其余部分冲突。
ssl     on;
ssl_certificate /etc/ssl/certs/1_www.example.com_bundle.crt;
ssl_certificate_key     /etc/ssl/private/www.example.com.key;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0
ssl_session_cache shared:SSL:10m;
#ssl_session_tickets off; # Requires nginx >= 1.5.9
ssl_stapling on; # Requires nginx >= 1.3.7
ssl_stapling_verify off; # Requires nginx => 1.3.7
ssl_dhparam /etc/ssl/private/dhparams.pem;
ssl_trusted_certificate /etc/ssl/startssl.ca.pem;
resolver 8.8.8.8 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=63072000; www.example.com; preload";
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;