ColdFusion 10 - CFHTTP - 随机对等体未在SSL调用上进行身份验证(cacerts文件已更新)

时间:2014-11-04 20:38:13

标签: java ssl coldfusion coldfusion-10 cfhttp

我们有9台运行版本10,0,13,287689的ColdFusion 10服务器。我们已经为正在使用ColdFusion的java版本的cacerts文件添加了正确的证书。我们的CFHTTP SSL调用将在一段时间内正常工作,然后突然他们将开始返回未经过身份验证的对等体。在ColdFusion实例被回收之前,它将无法工作,直到它再次失败为止。 coldfusion-out,coldfusion-error,http或异常ColdFusion日志中没有关于失败的信息。

此外,仅仅因为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失败

2 个答案:

答案 0 :(得分: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)>

答案 1 :(得分:0)

即使在为我们调用的服务器导入证书链之后,我们在进行CFHTTP调用时也在ColdFusion 10服务器上收到了相同的错误。然后我们发现ColdFusion目录树中有多个cacerts文件的副本。将证书添加到其他密钥库后,问题就消失了。