r - HTTR包: SSL certificate error, SSL3_GET_SERVER_CERTIFICATE

标签 r ssl ca

尝试在 R 中使用 HTTR 包和 GET() 函数时,我遇到了挑战:

pg2 = GET("http://httpbin.org/basic-auth/user/passwd", authenticate("user","passwd"))

我收到以下错误:

Error in function (type, msg, asError = TRUE)  : 
  SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我在网上搜索了一下,发现我需要使用以下命令行更新.Rprofile文件:

options(RCurlOptions = list(verbose = FALSE, capath = system.file("CurlSSL", "cacert.pem", package = "RCurl"), ssl.verifypeer = FALSE))

但它仍然不起作用,并且我不断收到相同的错误消息。

当我尝试下面的代码时

> HEAD("https://www.google.com", verbose())
  • 即将 connect() 到 www.google.com 端口 443 (#0)
  • 正在尝试 173.194.32.211... * 已连接
  • 已连接到 www.google.com (173.194.32.211) 端口 443 (#0)
  • 成功设置证书验证位置:
  • CA文件:C:/Users/malek.safa/Documents/R/win-library/3.0/httr/cacert.pem CApath:无
  • SSL 证书问题,请验证 CA 证书是否正常。细节: 错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
  • 关闭连接 #0 函数错误(类型、msg、asError = TRUE): SSL 证书问题,请验证 CA 证书是否正常。细节: 错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败

可以看到它仍在cacert.pm文件中寻找CA

最佳答案

我花了大约五个小时玩curl和RCurl。我能够让它工作。您想要的选项是 cainfo,而不是 capath。 Capath 告诉 RCurl 在哪里查找证书文件。 Cainfo 指定一个文件。

这对我来说适用于 RCurl。

library(RCurl)
cer_file <- "/home/user/curltest/cacert.pem"
server_url <- "some_server"
getURL(server_url, cainfo=cer_file)

现在的问题是如何让 httr 理解这个设置。该文档讨论了默认的 ca_cert,但没有解释如何使用不同的证书。就我而言,我连接到的 Intranet 站点不在默认证书中。答案就在config.R 。 Httr 允许我们设置 RCurl 配置选项,就像我在下面所做的那样。

cer_file <- "/home/me/curltest/cacert.pem"
GET(login_url, config=list(cainfo=cer_file))

如果您连接到互联网,您可能只需要更新 HTTR 附带的默认 cacert。自述文件向您展示了如何执行此操作。这样您就不需要在每次调用中指定证书。

setwd("path to httr package")
GET("https://raw.githubusercontent.com/bagder/ca-bundle/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt",
write_disk("inst/cacert.pem", overwrite = TRUE))

关于r - HTTR包: SSL certificate error, SSL3_GET_SERVER_CERTIFICATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557831/

相关文章:

r - 尽管 data.frame 可以,但为什么 data.table 没有从表中创建 data.table?

docker - 为什么在 Docker(在 Mac 上)上安装软件包时出现 SSL 错误?

Powershell WebClient 放弃遇到 SNI 错误

ssl - Jenkins 2 和 Atlassian Crowd(crowd2 插件)与双向 SSL 集成

ssl - 在 Jelastic 下修改受信任的 CA

java - 以编程方式添加证书颁发机构,同时保留 Android 系统 SSL 证书

R 'fdrtool' 封装 : how to use t statistic

r - ggplot 和两个不同的 geom_line() : the legend does not appear

c# - 如何验证 RemoteCertificateValidationCallback 中的链?

r - 使用 ggplot 固定填充密度图的不同部分