我目前正在使用付款处理器。我可以从我们的服务器浏览到支付URL,因此它不是防火墙问题,但是当我尝试使用CFHTTP时,我得到一个I / O异常:peer未经过身份验证。我已经下载并安装了他们最新的安全证书到cacerts密钥库并重新启动了CF,但仍然遇到同样的错误。我不仅安装了提供者证书,还安装了证书链中的其他2个Verisign证书颁发机构证书。该证书是较新的3类扩展验证证书之一。
以前是否有人遇到此问题并找到解决方案?
答案 0 :(得分:9)
我的一位同事在连接到第三方时遇到同样的问题后发现了以下情况。
<击> 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抛出的异常少一点,那将会很棒 通用的。
答案 1 :(得分:3)
您是否将其添加到正确的密钥库?请记住,ColdFusion使用它自己的Java实例。在记住这个事实之前,我曾花了几个小时的时间。你想要的是/ ColdFusion8 / runtime / jre / lib / security /
答案 2 :(得分:3)
特定于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-projects/
然后我下载了
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!)
享受这种感觉...... 而且当然
一个晚上什么一天。希望这将有助于(部分或全部)到那里的人。如果您有任何疑问,请将信息邮寄给我...(上面的域名)。
答案 3 :(得分:2)
在CMD中试试这个
<强> C:\ ColdFusion9 \运行时\ JRE \ BIN&GT; keytool -import -keystore ../lib/security/cacerts -alias uniquename -file certificatename.cer
注意:我们必须选择安全文件夹中存在的正确密钥库,因为bin中存在其他密钥库文件。如果我们将证书导入这些密钥存储区,它将无法工作。
答案 4 :(得分:0)
我刚发现的内容在本文中被引用: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”插入通常位于/ ColdFusion9 / runtime / jre / lib中的“trustStore”文件中。\ColdFusion9\runtime\jre\bin\keytool -import -v -alias someServer-cert -file someServerCertFile.cer -keystore trustStore -storepass changeit
希望这会节省一些时间。
答案 5 :(得分:0)
我正在使用JRun。在尝试了很多不同的事情后,我遇到了一些适用于我的设置的信息片段。我已经使用自己的信任库文件配置了(1)HTTPS SSLService。这导致以下链接中的信息变得重要。
http://helpx.adobe.com/coldfusion/kb/import-certificates-certificate-stores-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/legacy/kb/ssl-jrun-web-server-connector.html
答案 6 :(得分:0)
在CF9 Enterprise上,将证书添加到密钥库并不适用于我。
使用CFX标记CFX_HTTP5
结束。
答案 7 :(得分:0)
我意识到这是一个非常古老的讨论,但是由于它仍然出现在寻找CF中“对等未认证”错误的顶部附近,因此我想向大多数人分享这个简单的解决方案是要更新CF使用的JVM 。 (稍后会详细介绍如何操作。)
问题的原因通常是服务BEING CALLED进行了更改,从而需要更高版本的TLS或SSL(可能还更改了受支持的算法)。较新的JVM提供了,而较早的JVM不提供。由于CF在JVM上运行,因此CF的调用(va cfhttp,cfldap,cfmail等)“突然”开始失败。
并且可以肯定的是,有时需要进行证书更新(即使如此,您也必须仔细进行),但这并不是始终需要的。并且更新JVM在错误修复等方面也带来了其他好处。
唯一的挑战是知道您的CF版本将支持哪种JVM。 (但是,即使仍然使用旧CF版本运行的人也发现,更新JVM CF使用可以解决此问题,并且不会引起任何其他问题。)
我将在2019年的一篇文章中讨论所有这些问题
https://coldfusion.adobe.com/2019/06/error-calling-cf-via-https-solved-updating-jvm/
希望可以帮助某人。