我想我现在已经很好地掌握了为什么在从facebook这样的https api中提取内容时需要拥有ssl证书包。但我的问题是:为什么有时甚至没有证书而其他人没有? 在我看来,libcurl有办法独自克服这个问题。
有人知道为什么或如何发生这种情况?有人有同样的经历吗?
答案 0 :(得分:0)
cUrl关于SSL证书的行为取决于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的开发者会让这个有条件;也许是因为阅读证书可能很昂贵。