CURLOPT_SSL_VERIFYPEER
,将其从0
更改为1
,这应该有助于防止中间人攻击问题。这导致了一些问题,初步搜索指出,需要关闭该选项,但是在进一步调查后,我发现:
和获取一个可以验证远程服务器的CA证书,并使用正确的选项指向此CA证书以进行连接验证。对于libcurl黑客:
curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
来自curl文档
我实际上使用获取更好/不同/更新的CA证书包!一种选项是通过在curl构建树根目录中运行“make ca-bundle”来提取最近Firefox浏览器使用的证书。或者可能下载以这种方式为您生成的版本。来自curl文档
CURLOPT_CAINFO
将包全部下载并使用,因为我看到有人在Windows上使用CURLOPT_CAPATH
时遇到了一些问题;curl文档。我已经在Windows和Mac上下载和安装了此捆绑包,并想知道这是否是正确的方法,或者是否有更好的做法。最初,这导致了应用程序运行在某些公司网络或代理后的用户出现问题,通过在Windows上使用winssl而不是openssl构建libcurl似乎修复了此问题;尽管可能伪装成防火墙问题,但仍不清楚,尽管看起来很有可能。抱歉让您阅读的内容很多。 将
ca-cert-bundle.crt
与应用程序一起安装,是否有什么愚蠢之处,以及是否需要采用不同的方法从已安装的应用程序与服务器进行安全通信?一个稍微独立但仍然非常相关的问题是,在Linux上使用
CURLOPT_CAINFO
会给出错误信息:
error setting certificate verify locations:
CAfile: ../share/my_application/curl-ca-bundle.crt
CApath: none
CURLOPT_CAINFO
字段(将其留空)并向应用程序包添加依赖项包ca-certificates
来解决了此问题。默认路径正确地是/etc/ssl/certs/ca-certificates.crt
,而且似乎可行。对于我而言,这比安装捆绑包更好。
编辑2:虽然已解决,但似乎ca-certificates包有时不会安装ca-certificates.crt,而是ca-bundle.crt,并且不同的发行版存储CA Bundle的位置不同,如此源,happyassassin.net显示。它似乎没有明确的答案来处理这个问题。我应该在配置文件中使用用户可以修改的值,还是对此有其他想法?
编辑3:一些用户指出我的名字存在于curl寻找的路径之一,我不确定如何可能,因为我为curl指定的唯一内容是我构建的openssl/cares库的位置...
我意识到这是一个复杂的/多部分问题,但它与标题所述的主题有关,感激任何帮助。
谢谢。