我想我现在已经很好地理解了为什么在从 facebook 之类的 https api 提取内容时需要拥有 ssl 证书包。但我的问题是:为什么有时即使没有证书也能工作,而其他一些则不能?在我看来,libcurl 有办法自己克服这个问题。
有人知道为什么或如何发生这种情况吗?有人有同样的经历吗?
我想我现在已经很好地理解了为什么在从 facebook 之类的 https api 提取内容时需要拥有 ssl 证书包。但我的问题是:为什么有时即使没有证书也能工作,而其他一些则不能?在我看来,libcurl 有办法自己克服这个问题。
有人知道为什么或如何发生这种情况吗?有人有同样的经历吗?
cUrl 关于 SSL 证书的行为取决于 CURLOPT_SSL_VERIFYPEER 选项。假设您使用 PHP,您可以使用函数curl_setopt来更改此选项的值。
我对 SSL 仅有肤浅的了解,但 cUrl 的行为方式似乎如下:0 表示不检查,1 检查证书是否合法,2 检查还检查证书是否颁发给正确的主机名。
您可以通过将 CURLOPT_SSL_VERIFYPEER 设置为 0 来“关闭烦人的错误”,但这意味着您无法确定您将连接到正确的服务器,因为任何人都可能欺骗 DNS。所以这样做是非常危险的。
官方 facebook php sdk 使用CURLOPT_CAINFO提供自己的证书,但仅当 curl 无法自行验证证书时。我不知道为什么 facebook sdk 的开发者会设置这个条件;也许是因为阅读证书可能很昂贵。