Ошибка в curl - проблема с сертификатом SSL: невозможно получить сертификат локального эмитента - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблемы с вызовом GET, который пингует API Обсерватории ВМС США.Этот запрос ранее работал, но сейчас не выполняется по неизвестным причинам.

Вот запрос:

library(httr)

#ping API
try(RETRY("GET", url = "http://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

#ERROR MESSAGE (request always times out with error)
#Error in curl::curl_fetch_memory(url, handle = handle): SSL certificate problem: #unable to get local issuer certificate
#Request failed [ERROR]. Retrying in 1 seconds...

Я использую R v3.5.1 и RStudio v1.1.463.Curl v3.2 и httr v1.3.1.

Что я пробовал для устранения неисправностей, которые не работали:

  • Двойная проверка документации API Военно-морской обсерватории США, чтобы убедиться, чтозапрос по-прежнему правильный / актуальный (он есть).
  • Установка предыдущей версии R (v.3.4.4), над которой работал этот вызов (без изменений).
  • Обновление до последней версии RStudio (v.1.1.463, без изменений))
  • Решение, указанное на этом сайте ( quantmod - SSL: невозможно получить сертификат локального эмитента в R ), которое не изменилось.Это единственная соответствующая тема для этой ошибки в RI, которую можно найти в Интернете.

Есть идеи у других пользователей R?Любая помощь или очки в правильном направлении очень ценится!

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

У меня была такая же проблема с этим сайтом.Я получаю сообщение об ошибке: «java.security.cert.CertPathValidatorException: не найдена доверенная привязка для пути сертификации».

Некоторые веб-сайты Министерства обороны США (DOD) переходят с http на https.Этот веб-сайт осуществил переход в конце ноября 2018 года. Проблема связана с тем фактом, что SSL-сертификаты DOD не подписаны обычным доверенным органом (проверка по отношению к корневому хранилищу Mozilla).Простое добавление традиционных общедоступных сертификатов DOD не устранило проблему.

31 января 2019 года их справочная служба уведомила меня, что теперь они установили коммерчески признанные сертификаты.После повторного тестирования моего кода (после удаления некоторых обходов безопасности) у меня больше не возникает никаких ошибок SSL, и кажется, что все работает должным образом.

0 голосов
/ 19 декабря 2018

После некоторых поисков нашел ответ.API переключился с http -> https, что вызвало ошибку SSL.Исправлено путем установки этого параметра в значение httr перед запуском «GET»:

httr::set_config(config(ssl_verifypeer = 0L))

Так что если вы измените приведенный выше вызов API следующим образом, он будет работать:

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

#ping API
try(RETRY("GET", url = "https://api.usno.navy.mil/rstt/oneday?date=07/10/2018&coords=41.2792778,%20-96.06442261&tz=-5", times = 20))

Надеюсь, это кому-нибудь поможет!

...