Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 cURL请求从SSLv3更新到TLS。。?_Php_Ssl_Curl_Paypal - Fatal编程技术网

将PHP cURL请求从SSLv3更新到TLS。。?

将PHP cURL请求从SSLv3更新到TLS。。?,php,ssl,curl,paypal,Php,Ssl,Curl,Paypal,正因为如此,许多网络服务提供商(如PayPal、Facebook、Google)正在禁用该功能,并希望我们改用TLS。我在想怎么做时有点困难 我目前正在使用以下函数来处理cURL请求 function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false) { $curl = curl_init(); curl_setopt($curl, CURLOP

正因为如此,许多网络服务提供商(如PayPal、Facebook、Google)正在禁用该功能,并希望我们改用TLS。我在想怎么做时有点困难

我目前正在使用以下函数来处理cURL请求

function CURLRequest($Request = "", $APIName = "", $APIOperation = "", $PrintHeaders = false)
{
    $curl = curl_init();
            curl_setopt($curl, CURLOPT_VERBOSE, 1);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_TIMEOUT, 30);
            curl_setopt($curl, CURLOPT_URL, $this->EndPointURL);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $Request);

    if($this->APIMode == 'Certificate')
    {
        curl_setopt($curl, CURLOPT_SSLCERT, $this->PathToCertKeyPEM);
    }

    $Response = curl_exec($curl);

    /*
     * If a cURL error occurs, output it for review.
     */
    if($this->Sandbox)
    {
        if(curl_error($curl))
        {
            echo curl_error($curl).'<br /><br />';  
        }
    }

    curl_close($curl);
    return $Response;   
}
虽然我添加了这个选项,但我仍然得到了完全相同的结果。任何关于我如何能使这项工作的信息将不胜感激。谢谢

复制自:

尝试添加
curl_setopt($curl,CURLOPT_SSL_CIPHER_LIST,'TLSv1')到您的代码


如果您的cURL基于OpenSSLlibssl,这将起作用,但如果基于nss,则不起作用。

在Paypal更新其核心SDK之前,更好的解决方案是直接在应用程序中覆盖CURLOPT\u SSL\u CIPHER\u列表。这样,您就不必直接干扰sdk核心php包,将来可以免费升级它

您可以在应用程序的引导或支付处理逻辑中添加以下内容:

PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1';

只需确保您对其进行了全面的评论,并记住在核心问题得到修补后将其取出。

我刚刚解决了通过终端更新
nss
库的问题。

如果上述问题没有帮助,请检查OPENSSL版本。很可能是因为OPENSSL版本,您是否使用了旧版本的Curl?看起来至少7.19和TLS有问题。是的,我也看到了。现在正在尝试了解如何查看我的卷曲版本。我以前从来没有遇到过这样的问题。看起来我是在7.36.0上,所以这不应该是我的问题。可能是重复的:尽管这是一个更好的公式。真的!这似乎成功了。是的,这似乎成功了。我们是否应该以某种方式合并这些内容?我更喜欢你的措辞,比重复的答案更笼统,但为了让凯撒知道,凯撒的答案不是我的…@philippelhardy,我得到了sslv3握手失败,即使我已经
CURLOPT\u SSL\u CIPHER\u LIST
设置为TLSV1,请详细说明(路径/文件或设置)我必须加上这一行。谢谢嘿,拉斐尔,你可以把它添加到任何你确定每次页面加载都会被调用的地方。这取决于您的框架,但通常它会有某种“引导”/配置文件,您可以在其中添加此类内容。
PPHttpConfig::$DEFAULT_CURL_OPTS[CURLOPT_SSL_CIPHER_LIST] = 'TLSv1';