2017-05-29 60 views
2

我有一个CRAN上的API包,它提供了与联合国DB(联合国网站的link)的接口,它使用httr构建,它使用curl包。我昨天说我的包的核心功能已不再在Windows机器上正常工作发现,他们都失败,错误消息:在CRAN pkg中使用ssl_verifypeer = FALSE?

Error in curl::curl_fetch_memory(url, handle = handle) : Peer certificate cannot be authenticated with given CA certificates

这基本上意味着有一个CA证书颁发防止卷曲无法完成的连接。在仔细研究这一点之后,我相信联合国网站托管数据库是问题,它的SSL证书对于每个ssldecoder都是无效的(参见link)。

解决此问题的一个简单解决方法是将参数ssl_verifypeer = FALSE添加到对httr::GET()的所有调用中。但是,出于安全原因,这不是理想的解决方案,因为它基本上告诉curl进行连接,而不管站点证书的有效性。

我的问题是,在CRAN包中使用这个参数有什么共识?请记住,联合国网站(可能是)安全吗?

回答

1

通过https://curl.haxx.se/docs/sslcerts.html

获取CA证书,可以验证远程服务器,并使用正确的选项连接时指出此CA证书进行验证。对于libcurl黑客:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

在R curl选项,这是capath

如果您信任主cURL网站,您可以在这里获得最新版本的https://curl.haxx.se/docs/caextract.html

cacert.pem === ca-bundle.crt如果您偶然看到对两者的引用。

如果更新的CA文件仍然导致问题,那么您只需将FALSE传递给您的函数,就可以让用户认为他们没问题,从而对用户造成伤害。

我不知道什么危害数据合同数据完整性丢失/操纵会导致人。但除此之外,标记的证书cld也是MITM用户的标志。无论哪种方式,您都应该考虑成为促成者。

+0

感谢您对@hrbrmstr的反馈。我已经通过电子邮件发送了CRAN,让他们知道发生了什么事情,并建议他们采取措施,直到问题得以解决。我还在联合国Comtrade网站上提交了一份错误报告,让他们知道我发现的内容,并询问他们是否最近更改了他们的SSL证书。最后一个问题,我仍然可以通过read.csv和json数据使用rjson pkg从站点获取CSV数据......这是否意味着这些选项本质上不如httr/curl安全(并且因此I不应该依赖他们)? –

3

我不知道共识,但Hadley writes

你永远不应该使用ssl.verifypeer = FALSE为默认,除非你不想知道你的安全已经受到威胁。

也就是说,I have seen packages默认使用该选项。

现在的问题是:没有有效的证书,你怎么知道联合国网站有而不是被入侵?

我会建议在包文档的顶部清楚地标明问题,并指出用户有责任设置该选项。并希望托管服务尽快整理其证书。

+0

@neifws感谢您的意见和链接。关于你的问题,我没有考虑到联合国网站可能会受到影响。我喜欢你的潜在解决方案作为最后的手段。再次感谢。 –

+0

我并不是说它已经被破坏,也不是说它没有被破坏。我猜这个问题是**,如果是**,你不想在默认情况下提供一个不安全的选项。如果个人用户希望继续,那是他们的决定。 – neilfws

+0

不太确定把责任放在用户==一个可以接受的答案。 – hrbrmstr

相关问题