使用httr解决“ SSL证书问题:无法获取本地发行者证书”

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

我知道那里有很多类似的问题,例如

但是我在寻找答案的过程中遇到困难,无法将其应用于我的具体情况。这是我的MCVE:

library(httr)
url <- "http://www.ece.mcmaster.ca/~shirani/"
res <- try(http_status(GET(url,timeout(30))))

curl :: curl_fetch_memory(url,handle = handle)中的错误:SSL证书问题:无法获取本地颁发者证书

我很确定这意味着远程Web服务器使用的是我的系统无法识别的证书。我相信有两种解决方案,(1)告诉httr /RCurl/ curl忽略该问题并在不安全模式下运行(命令行标志-k / --insecure),或者(2)获取并存储一个适当的某处的证书。

设置“不安全”选项/忽略问题

this question的回答建议(对于PHP)

使用curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1)curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)

?httr:config()建议

通常,您只需要使用此功能来设置CURL如果还没有有用的包装器,则直接选择函数,例如set_cookies,add_headers或认证。要有效使用此功能需要一些了解CURL和CURL选项。使用httr_options查看可用选项的完整列表。看到libcurl给定选项的文档,请使用curl_docs。

我将如何实践该建议?

httr_options()提供

206             ssl_verifyhost             CURLOPT_SSL_VERIFYHOST  integer
207             ssl_verifypeer             CURLOPT_SSL_VERIFYPEER  integer

但是

res <- try(http_status(GET(url,timeout(max_time),
           config=list(ssl_verifyhost=0, ssl_verifypeer=0))))

给出相同的错误(与包括ssl_verifystatus=0一样,这是我看到的唯一其他ssl_*选项。

获得正确的证书,或麻烦网站维护者

如果我想正确地做事情而不忽略这些问题。我将如何处理(1)确定所需的证书,(2)在系统上安装/在httr中使用它(我在Linux PopOS 18.04上),(3)如果与网站维护者保持一致地通信,他们应该更新他们的证书吗?

r curl httr rcurl
1个回答
0
投票

我使用的是config错误。这似乎有效:

res <- http_status(GET(url,config(ssl_verifypeer=0)))

我仍然会对更原则的解决方案感兴趣(即,弄清楚如何安装和部署正确的证书)。

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