将PHP cURL请求从SSLv3更新到TLS。。?
正因为如此,许多网络服务提供商(如PayPal、Facebook、Google)正在禁用该功能,并希望我们改用TLS。我在想怎么做时有点困难 我目前正在使用以下函数来处理cURL请求将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
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';