RCurl和自签名证书问题

时间:2014-02-26 17:23:31

标签: r macos curl ssl rcurl

我在使用 RCurl 函数getURL访问使用自签名证书的服务器上的HTTPS URL时遇到问题。我在Mac OS X 10.9.2上运行R 3.0.2。

我已阅读有关该主题的FAQcurl page。所以这就是我的立场:

  1. 我已将证书副本保存到磁盘(〜/ cert.pem)。
  2. 我已经能够使用这个相同的文件使用python-requests和'verify'选项连接到服务器,并且成功了。
  3. 命令行上的curl似乎忽略了--cacert选项。在使用Mac OS X“Keychain Access”应用程序将证书标记为受信任后,我成功访问了该网站。
  4. RCurl顽固地拒绝使用以下代码连接到网站:

    getURL(“https://somesite.tld”,verbose = T,cainfo = normalizePath(“〜/ cert.pem”))

  5. 这是我得到的输出:

    * 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
    

    当我在具有相同cert.pem文件和完全相同URL的Linux VM中使用--cacert选项和上面的RCurl代码测试curl时,它完美地工作。

    Linux和Mac OS X上的测试相同,只有在Mac OS X上才会失败。即使将证书添加到钥匙串也不起作用。

    唯一可行的方法是使用ssl.verifypeer=FALSE,但出于安全原因,我不想这样做。

    我在这里没有想法。其他人对如何使其发挥作用有任何建议吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试:

library ("RCurl")
URL1 <- "https://data.mexbt.com/ticker/btcusd"
getURL(URL1,cainfo=system.file("CurlSSL","cacert.pem",package="RCurl"))

答案 1 :(得分:0)

回到这个问题,我只是想指出,如果你还在使用RCurl,那么你应该使用httr(使用curl)代替。

我已确认将config(cainfo="/path/to/certificate")与httr连接一起使用将按预期工作。