在 CRAN pkg 中使用 ssl_verifypeer = FALSE?

Using ssl_verifypeer = FALSE in a CRAN pkg?

我在 CRAN 上有一个 API 包,它提供了一个与联合国数据库的接口(link 到联合国站点),它是使用 httr 构建的,它使用 curl 包。我昨天发现我的包的核心功能在 Windows 机器上不再正常工作,它们都失败并显示错误消息:

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

这基本上意味着存在阻止 curl 完成连接的 CA 证书问题。稍微研究一下后,我相信托管数据库的联合国站点是问题所在,它的 SSL 证书对每个 ssldecoder 无效(参见 link)。

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

我的问题是,在 CRAN 包中使用此参数的共识是什么?请记住,联合国网站(大概)是安全的?

我不知道共识,但是Hadley writes:

You should NEVER use ssl.verifypeer = FALSE as a default, unless you don't want to know when your security has been compromised.

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

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

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

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

Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

在 R curl 选项中,即 capath

如果您信任主要的 cURL 站点,您可以在此处获取最新版本 https://curl.haxx.se/docs/caextract.html

cacert.pem === ca-bundle.crt 如果您碰巧看到对 both/either.

的引用

如果更新后的 CA 文件仍然导致问题,那么您只是通过将 FALSE 传递给您的函数,让他们认为他们没问题,这对用户是一种伤害。

我不知道数据贸易数据完整性 loss/manipulation 会给人们带来什么危害。但除此之外,标记的 cert cld 也是对 MITM 用户的标志。无论哪种方式,您都应该三思而后行。