使用 httr 解决“SSL 证书问题:无法获取本地颁发者证书”
resolve " SSL certificate problem: unable to get local issuer certificate" with httr
我知道那里有很多类似的问题,例如
- Unable to get local issuer certificate using CURL
- SSL errors using MailChimp's API
但我无法找到答案并将它们应用到我的具体案例中。这是我的 MCVE:
library(httr)
url <- "http://www.ece.mcmaster.ca/~shirani/"
res <- try(http_status(GET(url,timeout(30))))
Error in curl::curl_fetch_memory(url, handle = handle) :
SSL certificate problem: unable to get local issuer certificate
我很确定这意味着远程网络服务器正在使用我的系统无法识别的证书。我相信有两种解决方案,(1) 告诉 httr
/RCurl
/curl 忽略该问题并在不安全模式下运行(命令行标志 -k
/--insecure
)或(2) 获取适当的证书并将其存储在某处。
设置'insecure'options/ignoring问题
对 this question 的回答建议(对于 PHP)
use curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1)
and curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
?httr:config()
建议
Generally you should only need to use this function to set CURL
options directly if there isn't already a helpful wrapper
function, like set_cookies, add_headers or
authenticate. To use this function effectively requires some
knowledge of CURL, and CURL options. Use httr_options to see a
complete list of available options. To see the libcurl
documentation for a given option, use 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
内将其安装在我的 system/using 上(我在 Linux PopOS 18.04),(3)如果他们应该更新他们的证书,请与网站维护者进行连贯的沟通?
我用错了config
。这似乎有效:
res <- http_status(GET(url,config(ssl_verifypeer=0)))
我仍然对更有原则的解决方案感兴趣(即弄清楚如何安装和部署正确的证书)。
我知道那里有很多类似的问题,例如
- Unable to get local issuer certificate using CURL
- SSL errors using MailChimp's API
但我无法找到答案并将它们应用到我的具体案例中。这是我的 MCVE:
library(httr)
url <- "http://www.ece.mcmaster.ca/~shirani/"
res <- try(http_status(GET(url,timeout(30))))
Error in curl::curl_fetch_memory(url, handle = handle) : SSL certificate problem: unable to get local issuer certificate
我很确定这意味着远程网络服务器正在使用我的系统无法识别的证书。我相信有两种解决方案,(1) 告诉 httr
/RCurl
/curl 忽略该问题并在不安全模式下运行(命令行标志 -k
/--insecure
)或(2) 获取适当的证书并将其存储在某处。
设置'insecure'options/ignoring问题
对 this question 的回答建议(对于 PHP)
use
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1)
andcurl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)
?httr:config()
建议
Generally you should only need to use this function to set CURL options directly if there isn't already a helpful wrapper function, like set_cookies, add_headers or authenticate. To use this function effectively requires some knowledge of CURL, and CURL options. Use httr_options to see a complete list of available options. To see the libcurl documentation for a given option, use 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
内将其安装在我的 system/using 上(我在 Linux PopOS 18.04),(3)如果他们应该更新他们的证书,请与网站维护者进行连贯的沟通?
我用错了config
。这似乎有效:
res <- http_status(GET(url,config(ssl_verifypeer=0)))
我仍然对更有原则的解决方案感兴趣(即弄清楚如何安装和部署正确的证书)。