У меня возникают проблемы с получением функции RCurl getURL
для доступа к URL-адресу HTTPS на сервере, который использует самозаверяющий сертификат. Я использую R 3.0.2 в Mac OS X 10.9.2.
Я прочитал FAQ и сверните страницу по этой теме. Итак, вот где я стою:
- Я сохранил копию сертификата на диск (~ / cert.pem).
- Я смог использовать этот же файл для подключения к серверу с помощью python-запросов и опции «проверить», и мне это удалось.
- curl в командной строке, похоже, игнорирует параметр --cacert. Мне удалось получить доступ к веб-сайту с его помощью после того, как я пометил сертификат как надежный с помощью приложения Mac OS X «Связка ключей».
RCurl упорно отказывается подключаться к сайту со следующим кодом:
getURL ("https://somesite.tld", verbose = T, cainfo = normalizePath ("~ / cert.pem"))
Вот результат, который я получаю:
* Adding handle: conn: 0x7f92771b0400
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 38 (0x7f92771b0400) send_pipe: 1, recv_pipe: 0
* About to connect() to somesite.tld port 443 (#38)
* Trying 42.42.42.42...
* Connected to somesite.tld (42.42.42.42) port 443 (#38)
* SSL certificate problem: Invalid certificate chain
* Closing connection 38
Когда я протестировал и curl с параметром --cacert
, и приведенный выше код RCurl на виртуальной машине Linux с тем же файлом cert.pem и точно таким же URL-адресом, он работал отлично.
Так что одинаковые тесты в Linux и Mac OS X, и только в Mac OS X они терпят неудачу. Даже добавление сертификата в связку ключей не помогло.
Единственное, что действительно работает, - это использование ssl.verifypeer=FALSE
, но я не хочу этого делать по соображениям безопасности.
У меня здесь нет идей. У кого-нибудь еще есть предложения о том, как заставить это работать?