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

标签 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 服务器有多个绑定(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

我们已经联系了 Adob​​e,他们正在调查这个问题,但我想看看是否还有其他人遇到过这些随机的 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/

相关文章:

java - WebElement 的 setAttribute() 方法

java - Rpg 调用 Java 构造函数,在异常处理程序上出现错误 ClassDefNotFound

java - 尝试使用 Java SDK 将 Amazon Transcribe 与 ColdFusion 结合使用时遇到问题

javascript - 需要帮助 - - 表格的行列总数

java - 为什么 Spring Boot 中的 REST Controller 返回 HTTP 状态 404 – 未找到

java - 平面上的一组点

ios - Alamofire 4 失败 : Error Domain=NSURLErrorDomain Code=-999 "cancelled"

php - 准备 SSL 连接 (HTTPS)

iphone - CFWriteStreamSetProperty 为 kCFStreamPropertySSLSettings 返回 false

jquery - .ajax 未调用 CFC 文件来发布数据