【问题标题】:PayPal DoDirectPayment fails with SSL if CURLOPT_SSL_VERIFYPEER is true如果 CURLOPT_SSL_VERIFYPEER 为真,PayPal DoDirectPayment 使用 SSL 失败
【发布时间】:2013-02-11 22:47:25
【问题描述】:

使用this code(从this tutorial 粘贴),我成功执行了PayPal DoDirectPayment 方法。请注意,CURLOPT_SSL_VERIFYPEER 设置为 FALSE。

但是,当我设置正常值 (CURLOPT_SSL_VERIFYPEER = TRUE) 时,我没有收到 PayPal 的响应,甚至没有失败响应,尽管我的代码在具有有效 SSL 证书的服务器上运行(所有页面都使用 HTTPS URL )。

有人知道是什么原因导致这个问题吗?

【问题讨论】:

  • 您能否提供有关您的证书的任何其他信息?如果设置 CURL_SSL_VERIFYPEER = TRUE 时它不起作用,可能是因为您使用的是自签名证书?有关 CURLOPT_SSL_VERIFYPEER 和 HOST 的说明,请看这里:stackoverflow.com/questions/4660610/…
  • cacert.pem 丢失,请参阅 stackoverflow.com/questions/14914330/…
  • 好的,这就是我在下面的回答中建议的 - 确保您以有效格式保存 PEM 文件。

标签: ssl paypal-sandbox


【解决方案1】:

如果您使用的是有效证书并且问题仍然存在,您可能需要仔细检查您是否以有效格式(X.509 证书 PEM)保存了 CA。我看到您已将您的 CA 导出到一个名为 cacert.pem 的文件 - 确保此文件有效,并且 curl 确实能够检索此文件(有效路径等)

您可以尝试再次导出证书 - 从浏览器(即:firefox),这可以通过在浏览器(即:Firefox)中访问 PayPal https url 来完成 - 并查看证书然后导出它。 (确保使用前面所述的正确格式 - X.509 证书 PEM)。

保存 CA 后,您将其传递给 CURLOPT_CAINFO 参数,因为您已经拥有:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/BuiltinObjectToken-EquifaxSecureCA.crt");

如需更详细的解释,请访问这篇精彩的文章: http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/

引用证书的最后一部分:

如果您有 CA 证书,但它不是 PEM 格式(即 它是非 Base64 编码的二进制或 DER 格式),您将 需要使用 OpenSSL 之类的东西将其转换为 PEM 格式。

编辑 - 如果导出证书后出现错误,您也可以尝试使用 X.509 证书 PEM(带链)保存证书

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 2016-04-29
    • 2013-02-14
    • 1970-01-01
    • 2011-11-05
    • 2016-09-26
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多