RCurl和自签名证书问题

asi*_*ira 7 macos ssl curl r rcurl

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

我已经阅读了有关该主题的常见问题解答卷曲页面.所以这就是我的立场:

  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"))

这是我得到的输出:

* 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
Run Code Online (Sandbox Code Playgroud)

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

因此在Linux和Mac OS X上进行相同的测试,并且仅在Mac OS X上测试失败.即使将证书添加到钥匙串也不起作用.

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

我在这里没有想法.其他人对如何使其工作有任何建议?

asi*_*ira 1

回到这个问题,我只是想指出,如果您仍在使用 RCurl,则应该使用httr(它使用curl)。

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