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

5

我遇到了一个问题,需要通过GET请求调用美国海军天文台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.1.463。Curl 版本为v3.2,httr 版本为v1.3.1。

以下是我尝试过但未能解决问题的故障排除方法:

  • 仔细查阅美国海军天文台 API 文档以确保请求仍然正确/最新(它是正确的)。
  • 安装此调用可正常工作的旧版本的 R(v.3.4.4)(没有变化)。
  • 更新到最新的 RStudio 版本(v.1.1.463,没有变化)。
  • 在此网站上列出的解决方案 (quantmod - SSL: unable to get local issuer certificate in R) 没有任何变化。这是我在线找到的唯一一个关于此错误的相关主题。

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


看起来网站现在可能需要 https,并且使用的证书签名者似乎不太受信任。所以这可能是服务器端的更改,而不是您可以控制的任何内容。(如果我尝试访问该 URL,则在 Chrome 中会收到安全警告)。您可能需要手动处理 SSL 证书才能使其正常工作。 - MrFlick
感谢您的反馈。我希望您能帮助我理解 - 我应该在哪里处理SSL证书?这是在R中还是其他地方?感谢您的帮助! - griffmer
尝试查看以下问题以获取建议:https://stackoverflow.com/questions/33913916/get-site-content-over-ssl-with-httr-in-r和https://dev59.com/IGQm5IYBdhLWcg3wswtv和https://dev59.com/wXzaa4cB1Zd3GeqPW_qj - MrFlick
4个回答

0

我在这个网站上遇到了同样的问题。我收到的错误信息是“java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.”。

美国国防部(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而不仅仅是config。所以代码如下: httr::set_config(httr::config(ssl_verifypeer = FALSE))

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))

希望这能帮助到某个人!

1
看起来你只是禁用了证书检查,是吗?如果是这样,那对于解决问题来说并不是一个令人满意的解决方案... - John Clements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接