ColdFusion 10 — CFHTTP — случайный одноранговый узел, не аутентифицированный при вызовах SSL (обновлен файл cacerts)

У нас есть 9 серверов ColdFusion 10 с версиями 10,0,13,287689. Мы добавили правильные сертификаты в файл cacerts для версии Java, используемой ColdFusion. Наши SSL-вызовы CFHTTP какое-то время будут работать корректно, а затем внезапно начнут возвращать одноранговые узлы, не прошедшие аутентификацию. Они не будут работать снова, пока экземпляр ColdFusion не будет перезапущен, после чего они будут работать до тех пор, пока снова не произойдет сбой. В журналах coldfusion-out, coldfusion-error, http или исключений ColdFusion нет информации о сбое.

Кроме того, тот факт, что HTTPS-вызовы CFHTTP начинают давать сбой на одном экземпляре ColdFusion, не означает, что они будут давать сбой на другом. На наших серверах ColdFusion есть несколько экземпляров ColdFusion, привязанных к разным веб-сайтам. Таким образом, например, один экземпляр может дать одноранговый узел, не прошедший проверку подлинности, а другой будет работать правильно, несмотря на использование одной и той же версии Java и файла cacerts. Опять же, перезапуск экземпляра ColdFusion, который не работает, решит проблему, и вызов CFHTTP больше не будет завершаться ошибкой с неаутентифицированным одноранговым узлом.

Эта проблема может быть связана с этим: ColdFusion CFHTTP Исключение ввода-вывода: одноранговый узел не аутентифицирован — даже после добавления сертификатов в хранилище ключей

Тем не менее, я также пробовал шаги здесь безрезультатно, как от Раймонда, так и от Питера в комментариях: http://www.raymondcamden.com/2011/1/12/Diagnosing-a-CFHTTP-issue--peer-not-authenticated

Мы связались с Adobe, и они изучают проблему, но подумали, что я хотел бы узнать, сталкивался ли кто-нибудь еще с этими случайными сбоями SSL CFHTTP.


person Brad    schedule 04.11.2014    source источник
comment
Я бы проверил, есть ли в конечных точках более одного сервера с немного разными сертификатами.   -  person Mark A Kruger    schedule 06.11.2014
comment
Я проверил это. Сертификаты всегда одинаковые.   -  person Brad    schedule 06.11.2014


Ответы (2)


Поддержка Adobe абсолютно ничем не помогла. Они продолжают настаивать на том, что наши сертификаты неверны или что у нас неправильно настроен файл cacerts (несмотря на то, что это отлично работало в ColdFusion 9 и будет работать в течение некоторого периода времени после повторного использования экземпляра ColdFusion).

В итоге я решил обойти эту проблему, взаимодействуя с библиотекой java.net.URL напрямую с помощью cfobject. Когда экземпляр ColdFusion начинает давать сбой с неаутентифицированным одноранговым узлом, использование java.net.URL все еще работает.

Вот фрагмент кода из моего тега cffunction (который находится в пользовательском теге), который может помочь любому, кто застрял в этой ситуации:

<cfset var urlConnection = createObject("java", "java.net.URL").init("#arguments.requestURL#").openConnection()>
<cfset var inputReader = "">
<cfset var bufferedReader = "">
<cfset urlConnection.setRequestMethod(UCASE(arguments.requestMethod))/>
<cfset urlConnection.setRequestProperty("User-Agent", CGI.HTTP_USER_AGENT)/>
<cfif arguments.requestMethod EQ "POST">
    <cfset urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded")/>
    <cfset urlConnection.setDoOutput(true)/>
    <cfset outputWriter = createObject("java", "java.io.OutputStreamWriter").init(urlConnection.getOutputStream())>
    <cfset outputWriter.write(arguments.requestData)/>
    <cfset outputWriter.close()/>
</cfif>
<cfif ISNULL(urlConnection.getErrorStream()) EQ TRUE>
    <cfset inputReader = createObject("java", "java.io.InputStreamReader").init(urlConnection.getInputStream())>
<cfelse>
    <cfset inputReader = createObject("java", "java.io.InputStreamReader").init(urlConnection.getErrorStream())>
</cfif>

<cfset bufferedReader = createObject("java", "java.io.BufferedReader").init(inputReader)>
person Brad    schedule 20.11.2014

Мы получили те же ошибки на нашем сервере ColdFusion 10 при выполнении вызовов CFHTTP, даже после импорта цепочки сертификатов для вызываемого нами сервера. Затем мы обнаружили, что в дереве каталогов ColdFusion имеется более одной копии файла cacerts. После добавления сертификатов в другие хранилища ключей проблема исчезла.

person Mike    schedule 30.12.2014
comment
Спасибо за комментарий, Майк, но в нашем дереве каталогов есть только одна копия файла cacert. - person Brad; 31.12.2014