ETA: Per https://github.com/hiratake55/RForcecom/issues/42 , it looks like the author of the rforcecom package has updated rforcecom to use httr instead of RCurl (as of today, to be uploaded to CRAN tomorrow, 7/1/16), so my particular issue will be solved at that point. However, the general case (implementing TLS 1.1/1.2 in RCurl) may still be worth pursuing for other packages. Or everyone may just switch to the more recent curl package instead of RCurl.Unterstützung für TLS v1.1/TLS v1.2 in RCurl
Hintergrund: Ich verwende das rforcecom-Paket, um mehrere Monate mit Salesforce zu kommunizieren. Salesforce hat kürzlich die Unterstützung für TLS v1.0 deaktiviert und TLS v1.1 oder höher in seinen Sandboxen erfordert. Dieses Update wird für Produktionsumgebungen im März 2017 durchgeführt.
rforcecom verwendet RCurl für die Kommunikation mit salesforce.com-Servern. Im Allgemeinen wird das curlPerform Verfahren verwendet wird, das so etwas wie dies umgesetzt wird (in diesem Beispiel ist aus rforcecom.login.R):
h <- basicHeaderGatherer()
t <- basicTextGatherer()
URL <- paste(loginURL, rforcecom.api.getSoapEndpoint(apiVersion), sep="")
httpHeader <- c("SOAPAction"="login","Content-Type"="text/xml")
curlPerform(url=URL, httpheader=httpHeader, postfields=soapBody, headerfunction = h$update, writefunction = t$update, ssl.verifypeer=F)
dies für eine Weile für mich gearbeitet hat, wie ich bereits erwähnt. Nun, da Salesforce hat TLS v1.0 auf Sandbox deaktiviert, aber nicht mit dem folgenden Fehler:
UNSUPPORTED_CLIENT: TLS 1.0 has been disabled in this organization. Please use TLS 1.1 or higher when connecting to Salesforce using https.
ich geändert habe und sourced (ohne es in der lokalen Kopie des Pakets Umsetzung, wie ich bin nicht erfahren genug, um dies zu tun) eine Änderung an meiner lokalen Kopie des Login-Moduls für RForcecom, und ich habe durch Experimente festgestellt, dass ich eine der vorhandenen aufgezählten Werte für SSLVERSION erfolgreich hinzufügen kann, indem Sie sslversion=SSLVERSION_TLSv1
, sslversion=SSLVERSION_SSLv3
, etc. hinzufügen curlPerform Optionen, wo es heißt. All dies gibt mir jedoch den gleichen Fehler wie oben. Wenn ich versuche, eine der Optionen zu verwenden, die in libcurl implementiert ist, aber nicht in RCurl (SSLVERSION_TLSv1.1
, SSLVERSION_TLSv1.2
), habe ich die folgende Fehlermeldung erhalten:
Error in merge(list(...), .opts) : object 'SSLVERSION_TLSv1.1' not found
oder:
Error in merge(list(...), .opts) : object 'SSLVERSION_TLSv1.2' not found
Ich habe überprüft, mit curlVersion()
, dass meine libcurl-Version ist 7.40.0, die nach https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html unterstützt diese Optionen. Ich kann RCurl jedoch nicht dazu bringen, sie zu erkennen.
An diesem Punkt, was ich suche, ist eine Möglichkeit, RCurl TLS v1.1 oder TLS v1.2 zu verwenden, und ich würde sehr schätzen jegliche Unterstützung, die ich damit bekommen kann. Ich entschuldige mich für irgendwelche Probleme/Probleme mit meiner Frage, da dies das erste Mal ist, dass ich mich selbst erkundige. Ich war bisher immer in der Lage, mich durchzulesen, indem ich die Fragen und Antworten anderer Leute lese.