RCurl (или httr) — указание информации о сертификате

Я некоторое время играл с httr и RCurl и изо всех сил пытаюсь указать некоторую информацию о сертификате.

У меня есть команда Curl CLI, которая отлично работает для входа на веб-сайт, который использует самозаверяющие сертификаты для аутентификации (а также uname/pwd), это выглядит примерно так...

curl -k -q -v --cert "../certs/foobar.pem" https://signon.foobar.com/certlogin -d "username=foo&password=bar" -H "X-Application: Curltest"

Это регистрирует меня на foobar.com и возвращает токен сеанса.

Та же команда работает, если я использую соответствующий файл сертификата .crt и добавляю ключ с помощью параметра --key.

Я пытаюсь сделать то же самое с RCurl или httr и продолжаю получать сообщение об ошибке, указывающее на то, что сертификат неверен. Принимая во внимание, что я знаю, что сертификат в порядке (поскольку команда CLI работает), я предполагаю, что это связано с тем, что я неправильно указываю сертификат в RCurl.

Итак, быстрый вопрос...

Как бы вы воспроизвели приведенную выше команду CURL в RCurl или httr?

Кстати, это на Ubuntu, так что это не должно быть связано с проблемами, которые у многих возникают с Mac OS X 10.9 +

Большое спасибо

Eluxoso (первый постер - будь милым....!)

Вот мой (вероятно, очень неэлегантный и, конечно, неработающий) код

RCurl:

Library(RCurl)
url <- "https://signon.foobar.com/certlogin"
uname <- "foo"
pswd <-"bar"
headers <- list("X-Application" = "Curltest")
opts=curlOptions(verbose=TRUE, 
                 httpheader=headers, 
                 cainfo="../certs/foobar.pem", 
                 ssl.verifypeer=FALSE)
postForm(url, 
         "username" = uname, "password"=pswd,
         .opts=opts,
         style='POST'
)

хттр:

library(httr)
cafile="../certs/foobar.pem"
resp<-POST("https://signon.foobar.com/certlogin", 
           body = list(username="foo", password = "bar"),
           add_headers("X-Application" = "Curltest" ), 
           verbose(),
           encode = "form",
           config(cainfo = cafile, ssl.verifypeer=FALSE))
content(resp,"text")

Используя полное имя пути для сертификата, я все равно получаю тот же ответ сервера, несмотря на то, что команда CURL CLI работает. В HTTP-запросах я заметил это:

SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.

Это актуально/полезно для кого-то?..


person Eluxoso    schedule 05.11.2014    source источник
comment
Что вы пробовали в R?   -  person hadley    schedule 05.11.2014
comment
Обновлено, чтобы включить мой код R   -  person Eluxoso    schedule 06.11.2014
comment
Вы абсолютно не должны иметь ssl.verifypeer=FALSE   -  person hadley    schedule 07.11.2014
comment
Я бы также попробовал использовать абсолютный путь к cafile.   -  person hadley    schedule 07.11.2014
comment
Согласитесь относительно: ssl.verifypeer=FALSE только там, чтобы соответствовать -k в команде CLI, которая на самом деле работает ... не будет окончательной версии!   -  person Eluxoso    schedule 08.11.2014
comment
Добавлен фрагмент диалога HTTP/SSL.   -  person Eluxoso    schedule 08.11.2014


Ответы (1)


У меня была эта проблема, и она была решена путем установки libcurl4-openssl-dev и обновления пакета Rcurl до последняя версия (1.95)

$ sudo apt-get install libcurl4-openssl-dev
$ R
> install.packages("RCurl")
person David LeBauer    schedule 09.02.2015