HTTR 包:SSL 证书错误,SSL3_GET_SERVER_CERTIFICATE
Posted
技术标签:
【中文标题】HTTR 包:SSL 证书错误,SSL3_GET_SERVER_CERTIFICATE【英文标题】:HTTR package: SSL certificate error, SSL3_GET_SERVER_CERTIFICATE 【发布时间】:2015-04-17 22:22:26 【问题描述】:我在尝试使用 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)
成功设置证书验证位置:
CAfile: 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证书是否OK。细节:
错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
您可以看到它仍在 cacert.pm 文件中寻找 CA
【问题讨论】:
【参考方案1】:我花了大约五个小时来玩 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))
【讨论】:
有没有办法全局设置HTTR的证书路径。我的 cacert 文件位于其应有的位置,并且在定向到它时确实可以毫无问题地读取它。但默认情况下它不会读取它。有没有办法在代码的开头将它指向那里?set_config(config(cainfo = 'certDirectory'))
完成此操作以上是关于HTTR 包:SSL 证书错误,SSL3_GET_SERVER_CERTIFICATE的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 显示 GMail 的 OpenSSL 错误
urllib.error.URLError: <urlopen 错误 [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:11
Easy_install 或 pip 安装错误:[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:579)]