2

我一直在使用 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 中错误地指定了证书。

所以,快速提问...

您将如何在 RCurl 或 httr 中重现上面给出的 CURL 命令?

顺便说一句,这是在 Ubuntu 上 - 所以不应该与很多人在 Mac OS X 10.9 + 上遇到的问题有关

非常感谢

Eluxoso(第一次海报 - 很好......!)

这是我的(可能非常不优雅且肯定不起作用)代码

网址:

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.

这对某人是否相关/有帮助?

4

1 回答 1

2

我遇到了这个问题,通过安装libcurl4-openssl-dev和更新Rcurl包到最新版本(1.95)解决了这个问题

$ sudo apt-get install libcurl4-openssl-dev
$ R
> install.packages("RCurl")
于 2015-02-09T21:00:29.950 回答