Ich habe Probleme bekommen RCurl Funktion getURL
Zugriff auf eine HTTPS-URL auf einem Server, der ein selbstsigniertes Zertifikat verwendet. Ich verwende R 3.0.2 unter Mac OS X 10.9.2.RCurl und selbstsigniertes Zertifikat Probleme
Ich habe die FAQ und die curl page über das Thema gelesen. Also das ist, wo ich stehe:
- Ich habe eine Kopie des Zertifikats auf der Festplatte (~/cert.pem) gespeichert.
- Ich war in der Lage, diese sehr gleiche Datei verwenden, um eine Verbindung zum Server mit Python-Anfragen und die Option 'Verify', und erfolgreich.
- curl auf der Kommandozeile scheint die Option --cacert zu ignorieren. Es ist mir gelungen, auf die Website zuzugreifen, nachdem ich das Zertifikat mit der Mac OS X "Keychain Access" -App als vertrauenswürdig gekennzeichnet habe.
RCurl hartnäckig weigert sich, die Website mit dem folgenden Code zu verbinden:
getURL ("https://somesite.tld", verbose = T, cainfo = normalizePath ("~/cert.pem"))
Dies wird den Ausgang I erhalten:
* 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
Wenn ich beide curl mit der --cacert
Option und dem RCurl Code oben in einem Linux-VM mit der gleichen cert.pem Datei und exakt gleicher URL getestet, es hat perfekt funktioniert.
So gleiche Tests unter Linux und Mac OS X, und nur unter Mac OS X scheitern sie. Sogar das Hinzufügen des Zertifikats zum Schlüsselbund hat nicht funktioniert.
Das einzige, was funktioniert, ist die Verwendung ssl.verifypeer=FALSE
, aber ich möchte das nicht aus Sicherheitsgründen tun.
Ich habe keine Ideen hier. Hat noch jemand Vorschläge, wie man das zum Laufen bringt?
Ein Ticket hinzugefügt, um zu sehen, ob der Autor mir ein Feedback gibt: https://github.com/omegahat/RCurl/issues/6 – asieira
Ich bin zu dem Schluss gekommen, dass RCurl hoffnungslos ist. Wenn ich zum Beispiel den Quellcode lese, merke ich, dass keinerlei Anstrengungen unternommen wurden, um die Griffe mit der zugrunde liegenden C-basierten Libelle zu schließen, wenn sie Müll gesammelt wurden, was offene Verbindungen verursacht und eine Erschöpfung der Ressourcen verursacht, wenn man sie für mehr als einen benutzt einige triviale Downloads (https://github.com/omegahat/RCurl/issues/8). – asieira
Ich habe stattdessen etwas Python-Code geschrieben, der [Anfragen] (http://docs.python-requests.org/en/latest/) und [grequests] (https://github.com/kennethreitz/grequests) verwendet. Dann schrieb ich einen kleinen R-Wrapper, um diesen Code extern aufzurufen. Dies führte zu einem enormen Leistungszuwachs, ich konnte das Zertifikat korrekt verwenden und hatte keine Ressourcenerschöpfungsprobleme. – asieira