Authentication ColdFusion CFHTTP I/O异常:对等未经身份验证-即使在向密钥库添加证书之后

Authentication ColdFusion CFHTTP I/O异常:对等未经身份验证-即使在向密钥库添加证书之后,authentication,coldfusion,certificate,certificate-authority,cfhttp,Authentication,Coldfusion,Certificate,Certificate Authority,Cfhttp,我目前正在与一个付款处理程序合作。我可以从我们的服务器浏览到支付URL,所以这不是防火墙问题,但是当我尝试使用CFHTTP时,我得到一个I/O异常:对等未验证。我已经下载并将他们最新的安全证书安装到cacerts密钥库中,并重新启动了CF,但仍然收到相同的错误。我不仅安装了提供商证书,还安装了证书链中的另外两个Verisign证书颁发机构证书。证书是较新的第3类扩展验证证书之一 以前有人遇到过这个问题并找到了解决方案吗?您是否将其添加到了正确的密钥库中?记住,ColdFusion使用它自己的Ja

我目前正在与一个付款处理程序合作。我可以从我们的服务器浏览到支付URL,所以这不是防火墙问题,但是当我尝试使用CFHTTP时,我得到一个I/O异常:对等未验证。我已经下载并将他们最新的安全证书安装到cacerts密钥库中,并重新启动了CF,但仍然收到相同的错误。我不仅安装了提供商证书,还安装了证书链中的另外两个Verisign证书颁发机构证书。证书是较新的第3类扩展验证证书之一


以前有人遇到过这个问题并找到了解决方案吗?

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

之类的地方,我刚刚发现的内容在本文中被引用了:经过大量挖掘,还有一些其他地方

如果您正在阅读本文,您很可能已经将“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

(如果你还没有这样做,现在就做)。 我遇到的问题是,我正在本地主机上设置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

希望这能节省一些时间。

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

我们使用了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)>
如果ColdFusion抛出的异常稍微少一点,那就太好了 通用的

用CMD试试这个

C:\ColdFusion9\runtime\jre\bin> keytool-import-keystore../lib/security/cacerts -别名uniquename-文件certificatename.cer


注意:我们必须在安全文件夹中选择正确的密钥库,因为bin中还有其他密钥库文件。如果我们将证书导入这些密钥库,它将不起作用。

我正在使用JRun。在尝试了很多不同的事情之后,我发现了一段适用于我的设置的信息。我用自己的信任库文件配置了一(1)个HTTPS SSLService。这使得下面链接中的信息变得非常重要

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

以下是我的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>


将证书添加到密钥库对我在CF9 Enterprise上不起作用


最后使用带有现代ssl密码的Web服务器的coldfusion 8特有的CFX标记,
CFX_HTTP5

我在JDK1.6.45上使用了coldfusion 8,但在只提供红色十字而不是图像方面遇到了问题,而且cfhttp无法使用ssl连接到本地Web服务器

我用coldfusion 8复制的测试脚本是

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

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

从,并将其安装在 C:\jdk6\u 45\jre\lib\ext或您的jdk所在的位置,在coldfusion 8的原始安装中,它将位于C:\JRun4\jre\lib\ext下,但我使用位于coldfusion目录之外的较新jdk(1.6.45)。将bcprov-ext-jdk15on-156.jar放在\ext目录中非常重要(这花费了我大约两个小时和一些头发;-) 然后我编辑了文件C:\jdk6\u 45\jre\lib\security\java.security(使用写字板而不是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!)
享受这种感觉。。。 当然
多么美好的夜晚,多么美好的一天。希望这将有助于(部分或全部)有人在那里。如果你有问题,请发邮件给我的信息。。。(上面的域)。

我意识到这是一个非常古老的讨论,但由于它仍然出现在搜索CF中“对等未验证”错误的顶部,我想与大多数人分享,简单的解决方案是更新CF使用的JVM。(稍后将详细介绍如何做到这一点。)

问题的原因通常是所调用的服务进行了更改,需要更新版本的TLS或SSL(可能还需要更改受支持的算法)。后来的JVM提供了这一功能,而早期的JVM则没有。因为CF在JVM上运行,所以它是CF的调用
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
bcprov-ext-jdk15on-156.jar
#
# 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
java SSLPoke www.onlineumfragen.com 443 (or of course your url!)