quantmod - SSL:无法在 R 中获取本地颁发者证书

quantmod - SSL: unable to get local issuer certificate in R

我正在尝试使用 R 中的 quantmod 包从雅虎获取财务数据。它在我的个人笔记本电脑(Mac 和 Win)上完美运行。但是我不能让它在我的工作电脑(Win7)上运行。

我的代码是:

getSymbols("JPM", src = "yahoo")

请注意,它只在我公司的笔记本电脑上不起作用。

错误代码如下:

Error in curl::curl_download(cu, tmp, handle = h) : 
SSL certificate problem: unable to get local issuer certificate

我尝试通过以下方式解决问题:

  1. 安装httr

  2. 删除curlquantmod并重新安装

  3. 更新到最新版本的 R、RStudio、curlhttrRCurlquantmod

  4. 安装openssl

  5. 设置ssl_verifypeer = 0L

  6. getSymbols

    前添加以下内容

    options(download.file.method = "wget", download.file.extra = c("--no-check-certificate"))

不幸的是,上述 none 有效。顺便说一句,从 google 财务工作中获取数据,但 Google 每个请求仅提供约 4000 条记录。

我认为我们公司对 SSL 有一些限制,但我完全可以访问以 https://

开头的网站

此外,以下代码有效:

library('httr')    
content(GET('https://www.linkedin.com/in/lillyzhu'))

devtools::install_github

我花了一周的时间来解决这个问题,但我没有取得任何进展。现在,我想知道是否可以修复它?任何想法都会有所帮助!

感谢所有的贡献者,祝你们一切顺利! 附录:libcurlVersion()

的输出
[1] "7.40.0"
attr(,"ssl_version")
[1] "OpenSSL/1.0.0o"
attr(,"libssh_version")
[1] "libssh2/1.4.3"
attr(,"protocols")
 [1] "dict"   "file"   "ftp"   
 [4] "ftps"   "gopher" "http"  
 [7] "https"  "imap"   "imaps" 
[10] "ldap"   "pop3"   "pop3s" 
[13] "rtmp"   "rtsp"   "scp"   
[16] "sftp"   "smtp"   "smtps" 
[19] "telnet" "tftp"  

如果您需要我的笔记本电脑的任何其他信息,请随时告诉我。

更新:我在没有登录 VPN 的情况下在我公司的笔记本电脑上测试了该功能,它可以正常工作。那么有什么想法让它在 VPN 中工作吗?

问题是因为 cURL 默认使用 OpenSSL。可以通过

安装特殊版本的 cURL 来固定使用 winSSL
Sys.setenv(LIBCURL_BUILD="winssl")
install.packages("https://github.com/jeroen/curl/archive/master.tar.gz", repos = NULL)

请参考这个link:

https://github.com/jeroen/curl/issues/122

该错误通常是由过时或丢失的 CA 根证书捆绑引起的,但也可能在远程服务器使用自签名证书时发生。在任何一种情况下,cURL 都无法验证远程服务器的证书并引发错误。

您可以使用以下方式禁用验证证书的要求:

library(httr)
httr::set_config(config(ssl_verifypeer = FALSE))

但是不推荐这样做,因为它会产生安全漏洞。