我在OpenShift Online上构建了一个应用程序,现在我尝试与PayPal集成。我遇到了SSL cURL错误,我不知道如何处理。我已经浏览过SO,OpenShift Online,PayPal和其他地方,但无法解决这个问题。
背景:
以下是代码的一部分,似乎是我问题的根源:
// CONFIG: Please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path
// of the certificate as shown below. Ensure the file is readable by the webserver.
// This is mandatory for some environments.
//$cert = __DIR__ . "./cacert.pem";
//curl_setopt($ch, CURLOPT_CAINFO, $cert);
问题:
[1]使用代码"原样" (第79-80行注释掉)引发卷曲错误:" SSL连接错误"
[2]使用第79-80行未注释掉(和cacert.pem放在与php脚本相同的目录中)引发curl错误:" SSL CA证书问题(路径?访问权限?)&#34 ;
我很可能在这里错过了一些简单的东西。任何有助于在OpenShift Online上正常工作的帮助非常感谢。谢谢!
答案 0 :(得分:0)
这条线很可疑:
$cert = __DIR__ . "./cacert.pem";
基本上你会得到像$ cert equaling /home/path./cacert.pem这样的东西,我很确定这不是你想要的,为什么你得到ssl错误,它找不到证书。 这可以纠正为:
$cert = __DIR__ . "/cacert.pem";
最好将cacert.pem存储在$ OPENSHIFT_DATA_DIR中并引用它:
$cert = getenv("OPENSHIFT_DATA_DIR")."cacert.pem";
并确保cacert.pem上的权限至少为0644
chmod 0644 $OPENSHIFT_DATA_DIR/cacert.pem
答案 1 :(得分:0)
解决方案:
强制使用TLS 1.2
评论第79-80行并添加
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2
为我做了诀窍。希望这有助于其他人。
P.S。 TLS 1.2的需求来自这篇PayPal文章https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1914&viewlocale=en_US