ColdFusion CFHTTP I / O异常:对等体未经过身份验证 - 即使在将证书添加到Keystore之后也是如此

StackOverflow https://stackoverflow.com/questions/1613038

我目前正在使用付款处理器。我可以从我们的服务器浏览到支付URL,因此它不是防火墙问题,但是当我尝试使用CFHTTP时,我得到了一个I / O异常:peer未经过身份验证。我已经下载并安装了他们最新的安全证书到cacerts密钥库并重新启动了CF,但仍然遇到同样的错误。我不仅安装了提供者证书,还安装了证书链中的其他2个Verisign证书颁发机构证书。该证书是较新的3类扩展验证证书之一。

以前是否有人遇到此问题并找到解决方案?

有帮助吗?

解决方案

我的一位同事在连接到第三方时遇到同样的问题后发现了以下情况。

http://www.coldfusionjedi.com/index.cfm/2011/1/12/Diagnosing-a-CFHTTP-issue--peer-not-authenticated

https:// www.raymondcamden.com/2011/01/12/Diagnosing-a-CFHTTP-issue-peer-not-authenticated/

我们在页面的下方使用了Pete Freitag评论中提供的解决方案。它可以工作,但我认为应该谨慎使用,因为它涉及动态删除和添加回JsafeJCE提供程序的特定属性。

为了存档,以下是Pete Freitag评论的原始内容:

  

我把它缩小了一点,然后删除了   来自RSA JsafeJCE提供商的KeyAgreement.DiffieHellman(其中   导致使用默认的sun实现代替)接缝   工作,并且可能对您的服务器的影响小于删除   整个提供者会。这是你如何做到的:

<cfset objSecurity = createObject("java", "java.security.Security") />
<cfset storeProvider = objSecurity.getProvider("JsafeJCE") />
<cfset dhKeyAgreement = storeProvider.getProperty("KeyAgreement.DiffieHellman")>
<!--- dhKeyAgreement=com.rsa.jsafe.provider.JSA_DHKeyAgree --->
<cfset storeProvider.remove("KeyAgreement.DiffieHellman")>

Do your http call, but pack the key agreement if you want:

<cfset storeProvider.put("KeyAgreement.DiffieHellman", dhKeyAgreement)>
     

我通过使用SSLSocketFactory来创建https来解决这个问题   连接,在堆栈跟踪中提供了更多细节,而不是   使用cfhttp时:

yadayadayada Caused by: java.security.InvalidKeyException: Cannot
build a secret key of algorithm TlsPremasterSecret at
com.rsa.jsafe.provider.JS_KeyAgree.engineGenerateSecret(Unknown
Source) at javax.crypto.KeyAgreement.generateSecret(DashoA13*..) at
com.sun.net.ssl.internal.ssl.DHCrypt.getAgreedSecret(DHCrypt.java:166)
     

如果从ColdFusion抛出的异常少一点,那将会很棒   通用的。

其他提示

您是否将其添加到正确的密钥库?请记住,ColdFusion使用它自己的Java实例。在记住这个事实之前,我曾花了几个小时的时间。你想要的是/ ColdFusion8 / runtime / jre / lib / security /

特定于coldfusion 8与具有现代ssl密码的网络服务器:

我在JDK 1.6.45上使用coldfusion 8并且在给我红色十字架而不是图像时遇到问题,而且cfhttp也无法使用ssl连接到本地网络服务器。

我的测试脚本用coldfusion 8重现

<CFHTTP URL="https://www.onlineumfragen.com" METHOD="get" ></CFHTTP>
<CFDUMP VAR="#CFHTTP#">

这给了我一个相当普遍的错误“ I / O异常:对等体未经过身份验证。“ 然后我尝试将服务器的证书(包括根证书和中间证书)添加到java密钥库以及coldfusion密钥库,但没有任何帮助。 然后我用

调试了问题
java SSLPoke www.onlineumfragen.com 443

得到了

javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate DH keypair

Caused by: java.security.InvalidAlgorithmParameterException: Prime size must be
multiple of 64, and can only range from 512 to 1024 (inclusive)
    at com.sun.crypto.provider.DHKeyPairGenerator.initialize(DashoA13*..)
    at java.security.KeyPairGenerator$Delegate.initialize(KeyPairGenerator.java:627)
    at com.sun.net.ssl.internal.ssl.DHCrypt.<init>(DHCrypt.java:107)
    ... 10 more

然后我认为网络服务器(在我的情况下为apache)具有非常现代的ssl密码并且是非常严格的(qualys得分+)并使用超过1024位的强diffie hellmann密钥。显然,coldfusion和java jdk 1.6.45无法管理这个。 odysee的下一步是考虑为java安装另一个安全提供程序,我决定使用充气城堡。 另见 http://www.itcsolutions.eu/2011/08/22/how-to-use-bouncy-castle-cryptographic-api-in-netbeans-or-eclipse-for -java-JSE项目/

然后我下载了

bcprov-ext-jdk15on-156.jar

来自 http://www.bouncycastle.org/latest_releases.html 并安装了它下 C:\ jdk6_45 \ jre \ lib \ ext或者你的jdk在哪里,在原始安装的coldfusion 8中,它将在C:\ JRun4 \ jre \ lib \ ext下,但我使用的是位于外面的更新的jdk(1.6.45) coldfusion目录。将bcprov-ext-jdk15on-156.jar放在\ ext目录中是非常重要的(这花费了我大约两个小时和一些头发;-) 然后我编辑了文件C:\ jdk6_45 \ jre \ lib \ security \ java.security(使用wordpad而不是editor.exe!)并为新提供程序添加一行。之后列表看起来像

#
# List of providers and their preference orders (see above):
#
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
security.provider.2=sun.security.provider.Sun
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=com.sun.net.ssl.internal.ssl.Provider
security.provider.5=com.sun.crypto.provider.SunJCE
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC
security.provider.10=sun.security.mscapi.SunMSCAPI

(见第1位的新人)

然后完全重启coldfusion服务。 你可以

java SSLPoke www.onlineumfragen.com 443 (or of course your url!)

享受这种感觉...... 而且当然

一个晚上什么一天。希望这将有助于(部分或全部)到那里的人。如果您有任何疑问,请将信息邮寄给我...(上面的域名)。

在CMD中试试这个

<强> C:\ ColdFusion9 \运行时\ JRE \ BIN&GT; keytool -import -keystore ../lib/security/cacerts  -alias uniquename -file certificatename.cer

注意:我们必须选择安全文件夹中存在的正确密钥库,因为bin中存在其他密钥库文件。如果我们将证书导入这些密钥存储区,它将无法工作。

本文引用了我刚发现的内容: http://kb2.adobe .com / cps / 400 / kb400977.html 以及经过大量挖掘后的其他一些地方。

如果您正在查看本文,则很可能会插入“server.crt”。在适当的根位置的证书,您可能已使用命令将其插入/ ColdFusion9 / runtime / jre / lib / security中的cacerts文件

\ ColdFusion9 \ runtime \ jre \ bin \ keytool -import -v -alias someServer-cert -file someServerCertFile.crt -keystore cacerts -storepass changeit

(如果你还没有这样做,现在就去做)。 我遇到的是我在我的localhost上设置了ssl所以在执行这些步骤后我仍然遇到同样的错误。

事实证明,您还需要插入“server.crt”。进入“trustStore”文件通常位于/ ColdFusion9 / runtime / jre / lib中使用命令

\ColdFusion9\runtime\jre\bin\keytool -import -v -alias someServer-cert -file someServerCertFile.cer -keystore trustStore -storepass changeit

希望这会节省一些时间。

我正在使用JRun。在尝试了很多不同的事情后,我遇到了一些适用于我的设置的信息片段。我已经使用自己的信任库文件配置了(1)HTTPS SSLService。这导致以下链接中的信息变得重要。

http://helpx.adobe.com/的ColdFusion / KB /进口证书证书存储有-coldfusion.html

  

注意:如果您使用JRun作为底层J2EE服务器(或者   服务器配置或带有JRun配置的Multiserver / J2EE)   并且已经为内部JRun Web服务器(JWS)启用了SSL   需要将证书导入到中定义的信任库   安全JWS的jrun.xml文件而不是JRE密钥库。通过   默认情况下,该文件称为“trustStore”;并且通常位于   在带有JRun配置的Multiserver / J2EE的jrun_root / lib下   或cf_root / runtime / lib用于ColdFusion Server配置。您   使用相同的Java keytool来管理trustStore。

以下是我的jrun.xml文件的摘录:

<service class="jrun.servlet.http.SSLService" name="SSLService">
  <attribute name="port">8301</attribute>
  <attribute name="keyStore">/app/jrun4/cert/cfusion.jks</attribute>
  <attribute name="trustStore">/app/jrun4/cert/truststore.jks</attribute>
  <attribute name="name">SSLService</attribute>
  <attribute name="bindAddress">*</attribute>
  <attribute name="socketFactoryName">jrun.servlet.http.JRunSSLServerSocketFactory</attribute>
  <attribute name="interface">*</attribute>
  <attribute name="keyStorePassword">cfadmin</attribute>
  <attribute name="deactivated">false</attribute>
</service>

将证书导入此信任库(/app/jrun4/cert/truststore.jks)后,重新启动ColdFusion后,该工作正常。


(1) http://helpx.adobe的.com /遗留/ KB / SSL-JRUN-web的服务器connector.html

在CF9 Enterprise上,将证书添加到密钥库并不适用于我。

使用CFX标签 CFX_HTTP5 结束。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top