решить проблему с сертификатом SSL: невозможно получить сертификат локального эмитента с помощью httr - PullRequest
1 голос
/ 11 апреля 2020

Я знаю, что существует много подобных вопросов, например,

, но мне не удается найти ответы на свои вопросы и применить их к конкретному делу c. Вот мой 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: невозможно получить сертификат локального эмитента

I Я уверен, что это означает, что удаленный веб-сервер использует сертификат, который не распознается моей системой. Я считаю, что есть два решения: (1) сказать httr / RCurl / curl, чтобы игнорировать проблему и работать в небезопасном режиме (флаг командной строки -k / --insecure), или (2) получить и сохранить соответствующий сертификат где-то.

установка «небезопасных» опций / игнорирование проблемы

Ответ на этот вопрос предлагает (для PHP)

используйте curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1) и curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false)

?httr:config() предлагает

Как правило, вам нужно использовать эту функцию только для прямой установки параметров CURL, если нет уже полезная функция-обертка, такая как set_cookies, add_headers или authenticate. Для эффективного использования этой функции требуются некоторые знания опций CURL и CURL. Используйте httr_options, чтобы увидеть полный список доступных опций. Чтобы просмотреть документацию по libcurl для данной опции, используйте curl_docs.

Как мне go применить этот совет на практике?

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_*, который я вижу).

получение правильных сертификатов, или хлопот администратор веб-сайта

Если бы я предпочел сделать все правильно и не игнорировать проблемы. Как мне go узнать (1) определить, какой сертификат мне нужен, (2) установить его в моей системе / использовать его в httr (я нахожусь на Linux PopOS 18.04), (3) связно связаться с сопровождающий веб-сайт, если они должны обновить свой сертификат?

1 Ответ

1 голос
/ 11 апреля 2020

Я использовал config неправильно. Кажется, это работает:

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

Мне все равно будет интересно более принципиальное решение (т. Е. Выяснение, как установить и развернуть правильные сертификаты).

...