我有一个简单的cfhttp请求(登录)到SSL服务器:
<cfhttp url="https://www2.[domain].com/api/user/login" method="POST" port="443" >
<cfhttpparam type="formfield" name="username" value="[username]" >
<cfhttpparam type="formfield" name="password" value="[password]" >
</cfhttp>
请求在开始之前失败,ColdFusion服务器说:
I / O异常:对等方未经过身份验证
两个开发环境都非常糟糕。他们接收登录会话,然后将其交给收集器进程,该进程成功地点击远程Web服务以获取数据。
在我花了一天时间尝试将正确的证书放入ColdFusion商店后,我有一个明智的想法,就是将它们与工作开发环境进行实际比较。我看着他们(keytool -list
),他们是完全相同的。
现在显而易见的是,我留下的问题有两个:
答案 0 :(得分:7)
开发和生产环境是否相同?它们都是,例如,ColdFusion 9 Standard或ColdFusion 8 Enterprise?
根据我的经验,这个错误通常是由两件事之一引起的:
管理员无法将证书安装到cacarts存储库中,或者将其安装到错误的存储库中。
ColdFusion Enterprise和ColdFusion Developer版本(我认为对于ColdFusion 8和ColdFusion 9)都存在安装的内置BSafe CryptoJ库和某些类型的证书的问题(我还没有能够确定导致此错误的模式。如果是这种情况,有一些解决方法。
首先,我将探讨您导入错误的证书库的可能性。很难分辨出正在使用哪个存储库。在“设置摘要”下的CF管理员中,您应该能够找到正在使用的JRE的位置。它列在“Java Home”下。获取该目录并将lib/security
添加到其末尾,应该是正在使用的cacaerts文件的位置。我说应该因为我至少看到过一个奇怪的情况,而不是。
答案 1 :(得分:2)
我有同样的问题,我尝试了一切,无法修复它。奇怪的是,一切正常,然后突然停止工作。它可能是服务器上的Java更新,导致问题或从CFHTTP尝试访问的网站更改证书。
无论如何,这是我为此问题的“演示”设置的链接:
http://www.viaromania.eu/https.cfm
如您所见,我正在尝试使用CFHTTP标记访问HTTPS服务。它不起作用。我从C:\ColdFusion9\runtime\jre\lib\security\cacerts
删除了证书,从网站URL生成了一个新证书,导回了,在CFID / admministrator下安装了“certman”,检查了证书,它就在那里......它在我的测试页面中列出。< / p>
如果滚动到我的测试页的底部,你会看到一个类似的CFHTTP到https://www.google.com,即使服务器上没有安装证书,这也可以正常工作。
重要的是要提到我的开发机器上的请求工作正常,而且我也没有安装任何证书......
<强> 1。使用此更新ColdFusion 9.0.2 - https://helpx.adobe.com/coldfusion/kb/cumulative-hotfix-1-coldfusion-902.html
<强> 2。从此处http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
安装Java JDK 1.7.0_79第3。将ColdFusion管理员/服务器设置→Java和JVM中的Java Home 从“C:\ ColdFusion9 \ runtime \ lib \ jre”更改为“C:\ Program Files \ Java \ jdk1.7.0_79 \ jre”
就是这样。我不知道它是否使用任何证书。它们安装在“C:\ ColdFusion9 \ runtime \ lib \ jre \ lib \ security \ cacerts”中,而不是从那里或任何东西移动。