r-curl中的错误-SSL证书问题:无法获取本地颁发者证书



我在执行一个GET调用时遇到困难,该调用会Ping美国海军天文台API。此请求以前有效,但现在由于未知原因而失败。

请求如下:

library(httr)
#ping API
try(RETRY("GET", url = "http://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))
#ERROR MESSAGE (request always times out with error)
#Error in curl::curl_fetch_memory(url, handle = handle): SSL certificate problem: #unable to get local issuer certificate
#Request failed [ERROR]. Retrying in 1 seconds...

我正在运行R v3.5.1和RStudio v1.1463。Curl是v3.2,httr是v1.3.1。

我尝试的故障排除方法不起作用:

  • 双重检查美国海军天文台API文件,以确保请求仍然正确/最新(确实如此(
  • 安装此调用所使用的R的早期版本(v.3.4.4((没有更改(
  • 更新至RStudio的最新版本(第1.1.463版,无更改(
  • 此网站上列出的解决方案(quantmod-SSL:无法获得R中的本地颁发者证书(没有更改。这是我在网上能找到的关于R中这个错误的唯一相关线程

其他R用户有什么想法吗?如有任何帮助或正确的方向,我们将不胜感激!

经过一番搜索,找到了答案。API从http->https切换,这导致了SSL错误。通过在运行"GET"之前将此参数设置为httr修复:

httr::set_config(config(ssl_verifypeer = 0L))

因此,如果您像这样修改上面的API调用,它会起作用:

library(httr)
httr::set_config(config(ssl_verifypeer = 0L))
#ping API
try(RETRY("GET", url = "https://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

希望这能帮助到别人!

我在这个网站上也遇到了同样的问题。我收到的错误是"java.security.cert.CertPathValidatorException:找不到证书路径的信任锚点。"。

美国国防部的几个相关网站正在从http过渡到https。该网站于2018年11月底进行了过渡。这个问题与DOD SSL证书不是由正常的可信机构签名有关(检查Mozilla的根存储(。仅仅添加传统的公开可用的DOD证书并不能解决这个问题。

2019年1月31日,他们的服务台通知我,他们现在已经安装了商业认可的证书。在重新测试我的代码之后(在删除了一些安全旁路之后(,我不再有任何SSL错误,而且一切都像预期的那样工作。

sudo apt-get install ca-certificates是我在Ubuntu上修复它所需要做的全部工作。

最新更新