как решить "проблема с сертификатом ssl: невозможно получить сертификат локального эмитента" в ubuntu 16.04 - PullRequest
0 голосов
/ 11 июня 2019

Я использую 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]]

и ошибка:

"Ошибка в open.connection (con," rb "): проблема с сертификатом SSL: невозможно получитьсертификат местного эмитента "

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Это неправильно настроенный сервер (search.codal.ir).Дружественное электронное письмо их администраторам, вероятно, может быть рассмотрено.

Проблема здесь в том, что этот TLS-сервер не отправляет полную цепочку сертификатов при рукопожатии, как это должно быть в соответствии со стандартами.Более конкретно, он не отправляет промежуточный сертификат.Это можно увидеть, разместив «search.codal.ir» на тестовой странице SSL Labs и результаты ясны .

Промежуточные сертификаты - это сертификаты, которые являются своего рода «промежуточным» корневым сертификатом.(существует в хранилище CA) и собственный сертификат сервера.

Иногда это работает лучше в браузерах, чем в curl, потому что

  1. браузеры обычно кеш промежуточныйcerts (которые могут использоваться несколькими хостами)
  2. некоторые браузеры (например, Chrome) поддерживают такие функции, как AIA (Authority Information Access), который позволяет загружать промежуточные сертификаты по запросу. RFC 5280 содержит подробную информацию .

Сообщение об ошибке скручивания unable to get local issuer certificate почти всегда означает, что именно это и произошло.

Исправление

real и правильное исправление должны быть сделаны администраторами сервера.Это проблема с настройкой сервера.

Работа вокруг него

Вы можете загрузить промежуточный сертификат вручную и поместить его в свое хранилище CA, файл PEM, который вы указываете curl (или другому клиенту) для использования.при проверке однорангового узла.

На странице SSL Labs сказано следующее о недостающем промежуточном сертификате:

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

(я не смог найти, откуда его скачать)

Не делайте этого

Вы можете полностью отключить проверку сертификата, что позволит продолжить выполнение вашей программы.Но тогда вы отказались от всей безопасности, и по этой дороге просто печаль и слезы.Делайте это только для экспериментов, а не для производства.

0 голосов
/ 13 июня 2019

Вы можете попробовать:

library(httr)
set_config(config(ssl_verifypeer = 0L))
...