我们有 9 台运行版本 10,0,13,287689 的 ColdFusion 10 服务器。我们已将正确的证书添加到 ColdFusion 使用的 Java 版本的 cacerts 文件中。我们的 CFHTTP SSL 调用将正常工作一段时间,然后突然它们将开始返回未经过身份验证的对等方。在回收 ColdFusion 实例之前,它们不会重新工作,此时它们会工作,直到再次失败。在 coldfusion-out、coldfusion-error、http 或异常 ColdFusion 日志中没有关于失败的信息。
此外,仅仅因为 CFHTTP HTTPS 调用在一个 ColdFusion 实例上开始失败,并不意味着它们会在另一个实例上失败。我们的 ColdFusion 服务器有多个绑定(bind)到不同网站的 ColdFusion 实例。因此,例如,一个实例可能会提供未经过身份验证的对等方,而另一个实例将正常工作,尽管两者都使用相同的 Java 版本和 cacerts 文件。同样,回收不工作的 ColdFusion 实例将解决问题,并且 CFHTTP 调用将不再因对等方未经过身份验证而失败。
这个问题可能与此有关:ColdFusion CFHTTP I/O Exception: peer not authenticated - even after adding certs to Keystore
但是,我也尝试了此处的步骤,但都无济于事,Raymond 的步骤和 Peter 在评论中的步骤:http://www.raymondcamden.com/2011/1/12/Diagnosing-a-CFHTTP-issue--peer-not-authenticated
我们已经联系了 Adobe,他们正在调查这个问题,但我想看看是否还有其他人遇到过这些随机的 CFHTTP SSL 故障
最佳答案
Adobe 支持完全没有帮助。他们坚持认为我们的证书是错误的,或者我们没有正确设置 cacerts 文件(尽管这在 ColdFusion 9 上运行良好,并且在回收 ColdFusion 实例后的一段时间内仍能运行)。
我最终通过使用 cfobject 直接与 java.net.URL 库交互来解决这个问题。当 ColdFusion 实例开始因对等端未经过身份验证而失败时,使用 java.net.URL 仍然有效。
这是来 self 的 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)>
关于java - ColdFusion 10 - CFHTTP - 随机对等点未在 SSL 调用上进行身份验证(已更新 cacerts 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26744578/