我在CRAN上有一个API包,它提供了一个与联合国数据库(链接到UN site)的接口,它是使用httr构建的,它使用curl包。昨天,我发现我的包的核心功能在Windows机器上不再正常工作了,它们都在错误消息中失败:
Error in curl::curl_fetch_memory(url, handle = handle) : Peer certificate cannot be authenticated with given CA certificates
这基本上意味着存在一个CA证书问题,阻止curl完成连接。在对此进行了一些研究之后,我认为托管DB的联合国站点是问题所在,它的SSL证书在SSL解码器中是无效的(请参阅此链接)。
解决此问题的一个简单方法是在所有对ssl_verifypeer = FALSE的调用中添加param httr::GET()。但是,出于安全原因,这并不是一个理想的解决方案,因为它基本告诉curl不管站点的证书是否有效,都要建立连接。
我的问题是,在CRAN包中使用这个参数的共识是什么?记住,联合国网站(大概)是安全的?
发布于 2017-05-29 20:26:48
通过https://curl.haxx.se/docs/sslcerts.html
获取一个CA证书,该证书可以验证远程服务器,并使用适当的选项指出此CA证书,以便在连接时进行验证。
libcurl黑客:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);
在R curl options中,这是capath。
如果您信任主https://curl.haxx.se/docs/caextract.html站点,您可以在这里获得这些站点的最新版本。
如果碰巧看到对两者的引用,则为cacert.pem === ca-bundle.crt。
如果更新后的CA文件仍然会导致问题,那么通过将FALSE传递给您的函数,可以让用户认为它们是可以的,这对用户是有害的。
我不知道数据交易、数据完整性丢失/操作会给人们带来什么危害。但除此之外,标记证书也是MITM用户的标志。不管是哪种方式,你都应该三思而后行。
https://stackoverflow.com/questions/44234417
复制相似问题