在 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 用户的标志。无论哪种方式,您都应该三思而后行。
我在 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 用户的标志。无论哪种方式,您都应该三思而后行。