【问题标题】:cURL requires CURLOPT_SSL_VERIFYPEER=FALSEcURL 需要 CURLOPT_SSL_VERIFYPEER=FALSE
【发布时间】:2013-09-29 02:25:21
【问题描述】:

我在本地主机上使用 cURL 的时间最长,突然间我注意到它不再起作用,除非我明确设置选项 CURLOPT_SSL_VERIFYPEER=FALSE

我不知道这是如何/何时更改的,但我使用的是 NGINX 和 PHP,我可以验证这不是特定请求主机的特定问题。我收到来自https://site1.comhttps://different-site.com 的空白回复。

有人有什么想法吗?

【问题讨论】:

  • 我喜欢这个hidden gem,它解释了如何使用证书来验证主机。
  • @DaveChen 和 -@Young 谢谢,但你知道为什么我以前不需要提供证书,但现在就做吗?
  • 来自another answer 上的same question。 cURL 用于捆绑 CA 证书,但现在您必须手动下载它们并将它们传递给 cURL 或在 PHP 中提供 default value
  • 那些答案已经有 2 年了,这个问题在我上个月就出现了。

标签: php curl ssl https ssl-certificate


【解决方案1】:

从 cURL 7.10 开始,默认情况下 CURLOPT_SSL_VERIFYPEER 的值是 TRUE。

因此您可能需要将其显式设置为 FALSE 以防止 CURL 验证证书。

【讨论】:

    【解决方案2】:

    感谢 Dave Chen 的建议,我意识到我一定是放错了证书。此问题由 cURL 创建者(从 Mozilla 提取)提供的证书解决:https://curl.haxx.se/ca/cacert.pem

    因此,在将此 cacert.pem 文件下载到您的项目后,您现在可以在 PHP 中执行此操作:

    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
    curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");
    

    或者,这可以通过将以下内容添加到您的 php.ini 来全局设置

    curl.cainfo=/path/to/cacert.pem
    

    【讨论】:

    • 我不是安全专家,但是从不安全的源 (http:) 下载 .pem 文件可以信任吗?
    • 如果我使用 codeigniter,我可以在哪里放置 curl_setopt 语法
    • 关于文件名,一些程序会期望这个文件被命名为ca-bundle.crt(在正确的路径中)更多细节here
    【解决方案3】:

    如果您使用的是 WampServer,请注意:

    你必须把绝对路径放在CURLOPT_CAINFO中,例如:

    curl_setopt ($ch, CURLOPT_CAINFO, 'C:\wamp\www\your-project\cacert.pem')
    

    不要使用相对路径:curl_setopt ($ch, CURLOPT_CAINFO, 'cacert.pem') 因为它不起作用

    【讨论】:

      猜你喜欢
      • 2013-02-14
      • 2018-04-16
      • 1970-01-01
      • 2011-12-20
      • 2016-02-21
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多