2014-11-04 28 views
1

我們有9臺ColdFusion 10服務器運行版本10,0,13,287689。我們已經將正確的證書添加到ColdFusion正在使用的java版本的cacerts文件中。我們的CFHTTP SSL調用會在一段時間內正常工作,然後突然他們將開始返回未經過身份驗證的對等方。在ColdFusion實例被回收之前,它們不會工作,直到再次失敗。 coldfusion-out,coldfusion-error,http或例外的ColdFusion日誌中沒有關於失敗的信息。ColdFusion 10 - CFHTTP - 未通過SSL通話驗證的隨機同級(更新cacerts文件)

另外,僅僅因爲CFHTTP HTTPS調用在一個ColdFusion實例上開始失敗,並不意味着它們會在另一個上失敗。我們的ColdFusion服務器有多個綁定到不同網站的ColdFusion實例。因此,例如,一個實例可能會使對等端未通過身份驗證,另一個實例可以正常工作,儘管兩者使用相同的Java版本和cacerts文件。同樣,回收不工作的ColdFusion實例將解決此問題,並且CFHTTP調用將不再失敗,並且未通過身份驗證。

這個問題可能與此有關:ColdFusion CFHTTP I/O Exception: peer not authenticated - even after adding certs to Keystore

不過,我也試着在這裏的步驟都無濟於事,無論是從一個雷蒙德和註釋中的一個由彼得:http://www.raymondcamden.com/2011/1/12/Diagnosing-a-CFHTTP-issue--peer-not-authenticated

我們已經聯繫了Adobe,他們正在調查這個問題,但是我想我會看看是否有其他人遇到過這些隨機的CFHTTP SSL故障

+0

我會檢查是否有多個服務器在終點與證書略有不同。 – 2014-11-06 00:25:18

+0

我檢查過。證書總是一樣的。 – Brad 2014-11-06 14:48:33

回答

1

Adob​​e支持絕對沒有幫助。他們堅持認爲我們的證書是不好的,或者我們沒有正確安裝我們的cacerts文件(儘管事實上這在ColdFusion 9上運行良好,並且在ColdFusion實例被回收之後將工作一段時間)。

我最終通過直接使用cfobject與java.net.URL庫進行接口來解決此問題。當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)> 
0

我們已經收到了我們的ColdFusion 10服務器時,在同樣的錯誤即使在爲我們打電話的服務器導入證書鏈後,也會進行CFHTTP調用。然後我們發現ColdFusion目錄樹中有多個cacerts文件的副本。將證書添加到其他密鑰庫後,問題就消失了。

+0

感謝Mike的評論,但在我們的目錄樹中只有一份cacert文件。 – Brad 2014-12-31 03:51:47