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.TLS v1.1/TLS v1.2 поддержка в RCURL
Справочная информация. Я использую пакет rforcecom для связи с Salesforce в течение нескольких месяцев. Недавно Salesforce отключила поддержку TLS v1.0 и требует TLS v1.1 или выше в своих песочницах; это обновление будет выполнено для производственных сред в марте 2017 года.
rforcecom использует RCURL для связи с серверами salesforce.com. Как правило, используется метод curlPerform, который реализуется что-то вроде этого (этот пример из 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)
Это работает для меня на некоторое время, как я уже говорил. Теперь, когда Salesforce отключил TLS v1.0 на Песочницах, однако, он не со следующей ошибкой:
UNSUPPORTED_CLIENT: TLS 1.0 has been disabled in this organization. Please use TLS 1.1 or higher when connecting to Salesforce using https.
Я модифицированная и соерседом (без ее реализации в локальной копии пакета, так как я недостаточно опыта для этого), изменение моей локальной копии модуля входа в систему для RForcecom, и я обнаружил через эксперименты, что могу указать любое из существующих перечисленных значений для SSLVERSION успешно, добавив sslversion=SSLVERSION_TLSv1
, sslversion=SSLVERSION_SSLv3
и т. д. к curlPerform, где он вызывается. Однако все они дают мне ту же ошибку, что и выше. При попытке использовать один из вариантов, который реализуется в Libcurl, но не в RCurl (SSLVERSION_TLSv1.1
, SSLVERSION_TLSv1.2
), я получаю следующее сообщение об ошибке:
Error in merge(list(...), .opts) : object 'SSLVERSION_TLSv1.1' not found
или:
Error in merge(list(...), .opts) : object 'SSLVERSION_TLSv1.2' not found
Я проверял с curlVersion()
, что моя версия libcurl - 7.40.0, которая согласно https://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html поддерживает эти параметры. Тем не менее, я не могу заставить RCurl распознавать их.
На этом этапе я хочу, чтобы RCURL использовал TLS v1.1 или TLS v1.2, и я был бы очень признателен за любую помощь, которую я могу получить с этим. Я извиняюсь за любые проблемы/проблемы с моим вопросом, так как это мой первый раз, когда я спрашиваю об этом сам, мне до этого всегда приходилось путаться, читая вопросы и ответы других людей.