2015-02-17 5 views
1

Я столкнулся с проблемой при попытке использовать HTTR пакет в R и GET() функции:HTTR пакет: ошибка сертификата SSL, SSL3_GET_SERVER_CERTIFICATE

pg2 = GET("http://httpbin.org/basic-auth/user/passwd", authenticate("user","passwd")) 

и я получаю ошибку ниже:

Error in function (type, msg, asError = TRUE) : 
    SSL certificate problem, verify that the CA cert is OK. Details: 
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

Я искал в Интернете и обнаружил, что мне нужно обновить файл .Rprofile, используя приведенную ниже командную строку:

options(RCurlOptions = list(verbose = FALSE, capath = system.file("CurlSSL", "cacert.pem", package = "RCurl"), ssl.verifypeer = FALSE)) 

, но все равно это не работает, и я продолжаю получать то же сообщение об ошибке.

также, когда я попытался код ниже

> HEAD("https://www.google.com", verbose()) 
  • О для подключения() к www.google.com порт 443 (# 0)
  • Пытаюсь 173.194.32.211 ... * Подключен
  • Подключение к www.google.com (173.194.32.211) порт 443 (# 0)
  • успешно установлен сертификат VERIFY места:
  • CAfile: C: /Users/malek.safa/Documents/R /win-library/3.0/httr/cacert.pem CApath: none
  • Ошибка сертификата SSL, убедитесь, что сертификат CA в порядке. Реквизиты: ошибка: 14090086: SSL рутин: SSL3_GET_SERVER_CERTIFICATE: сертификат верифицировать не удалось
  • соединение Закрытие # 0 Ошибка в функции (типа, сообщ, asError = TRUE): SSL сертификат проблемы, убедитесь, что CA сертификат ОК. Детали: ошибка: 14090086: SSL рутин: SSL3_GET_SERVER_CERTIFICATE: сертификат верифицировать не удалось

вы можете увидеть, что он все еще ищет ЦС в файле cacert.pm

ответ

2

я провел около пяти часов, играя с завитком и RCurl. Я смог заставить его работать. Опция, которую вы хотите, - это cainfo, а не capath. Capath сообщает RCurl, где искать файл сертификата. Cainfo указывает файл.

Это работает для меня с RCurl.

library(RCurl) 
> cer_file <- "/home/user/curltest/cacert.pem" 
> server_url <- "some_server" 
> getURL(server_url, cainfo=cer_file) 

Теперь вопрос в том, как получить httr, чтобы понять эту настройку. В документации говорится о ca_cert по умолчанию, но не объясняется, как использовать другой сертификат. В моем случае я подключаюсь к сайту интрасети, который не был бы в сертификате по умолчанию. Ответ лежит в (config.R) [https://github.com/hadley/httr/blob/master/R/config.r]. Httr позволяет нам устанавливать параметры конфигурации RCurl, как я сделал ниже.

> cer_file <- "/home/me/curltest/cacert.pem" 
> GET(login_url, config=list(cainfo=cer_file)) 

Если вы подключаетесь к Интернету, вам, вероятно, просто нужно обновить по умолчанию cacert, который поставляется с HTTR. Readme показывает вам, как это сделать. Таким образом, вам не нужно указывать сертификат в каждом вызове.

> setwd("path to httr package") 
> GET("https://raw.githubusercontent.com/bagder/ca-bundle/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt", 
    write_disk("inst/cacert.pem", overwrite = TRUE)) 
+0

Есть ли способ глобально установить путь сертификата для HTTR. Мой файл cacert находится на своем законном месте, и он читает его без проблем, когда его направляют. Но по умолчанию он его не читает.Есть ли способ направить его туда в начале кода? – OganM

+1

'set_config (config (cainfo = 'certDirectory'))' выполняет это – OganM

Смежные вопросы