我想我现在已经很好地理解了为什么在从像 facebook 这样的 https api 中提取内容时需要 ssl 证书包。但我的问题是:为什么有时即使没有证书也能正常工作,而有些则不行? 在我看来,libcurl 有自己解决这个问题的方法。
有人知道为什么会这样吗?有人有过同样的经历吗?
最佳答案
关于 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 的开发人员会把这个作为条件;可能是因为阅读证书可能很昂贵。
关于facebook - 为什么查找 ssl 证书的 curl 失败会间歇性地工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433101/