将SSL cURL请求从SSLv3更新为TLS ..?

Dre*_*ell 8 php ssl curl paypal

由于最近在SSLv3中发现了漏洞,许多Web服务提供商(即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;   
}
Run Code Online (Sandbox Code Playgroud)

当我尝试点击PayPal的沙箱时,他们已经禁用了这个,我最终得到了一个cURL错误: 错误:14077410:SSL例程:SSL23_GET_SERVER_HELLO:sslv3警报握手失败

我发现的信息是我只需要改变它来使用TLS而不是SSL,而我见过的其他答案只是通过在我的函数中添加一个curl选项来做到这一点......

curl_setopt($curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
Run Code Online (Sandbox Code Playgroud)

我已经添加了这个选项,但我仍然得到完全相同的结果.任何有关如何使这项工作的信息将不胜感激.谢谢!

phi*_*rdy 5

复制自:SSL 错误无法更改为 TLS

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

如果您的 cURL基于OpenSSL libssl而不是基于nss,这将起作用。