1

我们有 9 台 ColdFusion 10 服务器运行版本 10,0,13,287689。我们已将正确的证书添加到 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 added certs to Keystore

但是,我也尝试了此处的步骤,但无济于事,Raymond 的步骤和评论中 Peter 的步骤:http ://www.raymondcamden.com/2011/1/12/Diagnosing-a-CFHTTP-问题--未通过身份验证的对等方

我们已经联系了 Adob​​e,他们正在调查这个问题,但我想看看其他人是否经历过这些随机的 CFHTTP SSL 故障

4

2 回答 2

1

Adobe 支持绝对没有帮助。他们一直坚持认为我们的证书是错误的,或者我们的 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)>
于 2014-11-20T15:45:16.623 回答
0

We have received the same errors on our ColdFusion 10 server when making CFHTTP calls, even after importing the certificate chain for the server we were calling. Then we discovered that there was more than one copy of the cacerts file in the ColdFusion directory tree. After adding the certificates to the other keystores the problem went away.

于 2014-12-30T16:51:22.710 回答