r - 如何解决ubuntu 16.04中的 "ssl certificate problem: unable to get local issuer certificate"

标签 r ubuntu curl openssl rvest

我正在使用 rvest 来抓取网站。我对其他网站完全没问题,但我认为这个网站使用的是另一种类型的证书。我在这里和 github 中看到过类似的问题,但没有人可以帮助我。 任何帮助表示赞赏。 我的脚本如下:

url <- "https://search.codal.ir/api/search/v1/q?PageNumber=1&Symbol=%D9%81%D8%B3%D8%A7&Subject=%20&CompanyState=0&LetterType=6&TracingNo=-1&LetterCode=%20&FromDate=1395/01/01&ToDate=%DB%B1%DB%B3%DB%B9%DB%B8/%DB%B0%DB%B3/%DB%B1%DB%B6&AuditorRef=-1&YearEndToDate=&Publisher=false&Mains=true&Childs=false&Audited=false&NotAudited=true&Length=-1&Consolidatable=true&NotConsolidatable=true&CompanyType=1&Category=1"

data <- fromJSON(url)[[3]]

错误是:

"Error in open.connection(con, "rb") : SSL certificate problem: unable to get local issuer certificate"

最佳答案

这是一个配置错误的服务器 (search.codal.ir)。可能可以考虑向他们的管理员发送一封友好的电子邮件。

这里的问题是这个 TLS 服务器在握手中没有发送完整的证书链,而根据标准它应该发送完整的证书链。更具体地说,它不发送中间证书。通过将“search.codal.ir”发布到 SSL 实验室测试页面和 the results are clear 可以看到这一点。 .

中间证书是介于根证书(存在于 CA 存储中)和服务器自己的证书之间的证书。

这有时在浏览器中比使用curl效果更好,因为

  1. 浏览器通常缓存中间证书(可供多个主机使用)
  2. 某些浏览器(例如 Chrome)支持 AIA(权威信息访问)等功能,使其能够按需下载中间证书。 RFC 5280 has the details .

curl 错误消息无法获取本地颁发者证书几乎总是意味着发生了这种情况。

修复它

真正正确的修复应该由服务器管理员完成。这是服务器设置问题。

解决这个问题

您可以手动下载中间证书并将其放入您的 CA 存储中,即您告诉curl(或其他客户端)在验证对等方时使用的 PEM 文件。

SSL 实验室页面对缺少的中间证书进行了以下说明:

Certum Organization Validation CA SHA2
Fingerprint SHA256: fd02362244f31266caff005818d1004ec4eb08fb239aafaaafff47497d6005d6
Pin SHA256: 51GveKNrpJjtGpXY5QDx03s3YTQwaQic6dWBqo3zX6s=
RSA 2048 bits (e 65537) / SHA256withRSA 

(我找不到从哪里下载)

不要这样做

可以完全禁用证书验证,这样您的程序就可以继续运行。但你已经放弃了所有的安全感,一路上只有悲伤和泪水。仅用于实验,切勿用于生产。

关于r - 如何解决ubuntu 16.04中的 "ssl certificate problem: unable to get local issuer certificate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547867/

相关文章:

r - 提取两个字符串之间不同的字符

linux - 如何在 Ubuntu 中重置 bashrc 以删除用户编写的导出 $path

curl - Windows的cURL:如何在控制台中发送多行命令?

此版本的 RStudio 不支持 R 图形引擎版本 12

使用深度名称向量作为索引替换嵌套列表

ubuntu - setcap 设置为无根捕获的 Wireshark dumpcap 无法在 Ubuntu 18.10 中启动

linux - 在 zip 文件的递归目录中查找文件

php - 在单个 CURL 请求中写入多个文件

linux -/usr/local/ssl/lib/libcrypto.a : could not read symbols: Bad value

regex - 在 R 中组合字符向量中的行