2014-11-04 30 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