【问题标题】:Why does curl failures finding the ssl certificate work intermittently?为什么查找 ssl 证书的 curl 失败会间歇性地工作?
【发布时间】:2012-02-24 15:15:08
【问题描述】:

我想我现在已经很好地理解了为什么在从 facebook 之类的 https api 提取内容时需要拥有 ssl 证书包。但我的问题是:为什么有时即使没有证书也能工作,而其他一些则不能? 在我看来,libcurl 有办法自己克服这个问题。

有人知道为什么或如何发生这种情况吗?有人有同样的经历吗?

【问题讨论】:

    标签: facebook ssl curl libcurl intermittent


    【解决方案1】:

    关于 SSL 证书的 cUrl 行为取决于 CURLOPT_SSL_VERIFYPEER 选项。 假设您使用 PHP,您可以使用函数curl_setopt 来更改此选项的值。

    我对 SSL 的了解很肤浅,但 cUrl 的行为方式似乎如下: 0 表示不检查,1 检查证书是否合法,2 检查还检查证书是否颁发给正确的主机名。

    您可以通过将 CURLOPT_SSL_VERIFYPEER 设置为 0 来“关闭烦人的错误”,但这意味着您无法确定您将连接到正确的服务器,因为任何人都可以spoof the DNS。所以这样做是非常危险的。

    官方 facebook php sdk 使用 CURLOPT_CAINFO 提供自己的证书,但仅当 curl 无法自行验证证书时。我不知道为什么 facebook sdk 的开发者会设置这个条件;也许是因为阅读证书可能很昂贵。

    【讨论】:

    • 嗨,谢谢。我想我没有正确解释自己。我想知道的是,如果您保持设置不变,并且默认情况下 curl 将查找 ssl 证书......有时它不会在 php 上出现错误并且事情无缘无故地工作正常。我想我的问题是:为什么它只是有时会发生?还是只有我?
    • 我相信这与可用于 openssl 的所谓“根证书”有关。在 debian 上,这些存储在 /usr/lib/ssl/certs 中。
    • graph.facebook.com/ 的证书由 DigiCert (www.digicert.com) 颁发。在我的目录中,我有许多具有该名称的证书文件 (DigiCert_*.pem)。不过,移动这些文件似乎并没有阻止 curl 识别 facebook.com。也许证书以某种方式被缓存?
    • 将所有文件移动到临时目录似乎会阻止 curl 识别证书。当我使用 -k 或 --insecure 标志或恢复 .pem 文件时,连接会恢复。另外,请查看curl documentation :-)
    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2015-06-05
    • 2014-10-14
    • 1970-01-01
    • 2016-08-06
    • 2017-06-28
    相关资源
    最近更新 更多