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

问题描述 投票:0回答:4

我在执行 ping 美国海军天文台 API 的 GET 调用时遇到困难。此请求以前有效,但现在因未知原因失败。

请求如下:

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.1.463。 Curl 是 v3.2,httr 是 v1.3.1。

我尝试过的故障排除方法无效:

  • 仔细检查美国海军天文台 API 文档,以确保请求仍然正确/最新(确实如此)。
  • 安装此调用适用的先前版本的 R (v.3.4.4)(无变化)。
  • 更新到最新版本的 RStudio(v.1.1.463,无变化)
  • 本网站列出的解决方案(quantmod - SSL:无法在 R 中获取本地颁发者证书)未做任何更改。这是我可以在网上找到的与 R 中此错误相关的唯一线程。

R 用户有什么想法吗?非常感谢任何帮助或指出正确方向!

r ssl curl httr
4个回答
0
投票

经过一番搜索,找到了答案。 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))

希望这对某人有帮助!


0
投票

我在这个网站上也遇到了同样的问题。我收到的错误是“

java.security.cert.CertPathValidatorException
:未找到证书路径的信任锚。”。

一些美国国防部 (DOD) 相关网站正在从

http
过渡到
https
。该网站于 2018 年 11 月底进行了转换。问题与 DOD SSL 证书未由正常的受信任机构签署(对照 Mozilla 的根存储进行检查)有关。仅添加传统的公开可用的 DOD 证书并不能解决问题。

2019 年 1 月 31 日,他们的帮助台通知我,他们现在已经安装了商业认可的证书。重新测试我的代码后(删除一些安全绕过后),我不再有任何 SSL 错误,并且一切似乎都按预期工作。


0
投票

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


0
投票

与 @griffmer 发布的内容类似,但对我来说,我必须使用

httr::config
而不仅仅是配置。所以这给出了:

httr::set_config(httr::config(ssl_verifypeer = FALSE))

© www.soinside.com 2019 - 2024. All rights reserved.