如何使客户端证书在用于HTTPS的CF10中工作。IIS 7.5

如何使客户端证书在用于HTTPS的CF10中工作。IIS 7.5,iis,https,coldfusion,certificate,adobe,Iis,Https,Coldfusion,Certificate,Adobe,我正在尝试使用ColdFusion10 http请求进行客户端证书验证。目前,我得到的是403.7。我相信ColdFusion没有拿到我的客户证书。下面是我目前安装和设置的步骤 我所做的: 创建了自签名SSL证书并将其安装到IIS 7.5上的默认网站 已将SSL证书安装到CF存储中。 测试HTTPS请求,一切正常 遵循此CA和客户端证书指南 已将CA证书安装到服务器和客户端(通过MMC)。已在客户端上安装客户端证书(.pfx)。 在本地浏览器中测试,到目前为止,一切都正常工作 为CF1

我正在尝试使用ColdFusion10 http请求进行客户端证书验证。目前,我得到的是403.7。我相信ColdFusion没有拿到我的客户证书。下面是我目前安装和设置的步骤

我所做的:

  • 创建了自签名SSL证书并将其安装到IIS 7.5上的默认网站
  • 已将SSL证书安装到CF存储中。
    • 测试HTTPS请求,一切正常
  • 遵循此CA和客户端证书指南
  • 已将CA证书安装到服务器和客户端(通过MMC)。已在客户端上安装客户端证书(.pfx)。
    • 在本地浏览器中测试,到目前为止,一切都正常工作
  • 为CF10创建了另一个客户端证书(.cer、.pvk、.pfx)
  • 已将CA证书添加到CF存储中。
    • 已测试,HTTPS被403.7拒绝
  • 通过CF10下的MMC添加了CA证书、client.pfx和.cer。
    • 测试后,再次拒收,仍为403.7
我以前见过CFHTTP和客户端证书存在问题,但我还没有找到解决方案。 如果有人能帮我,那就太好了

编辑: 按照Miguel-F的建议做了之后,我浏览了一下日志文件,发现我的CA是在ColdFusion信任存储中导入的,但我的客户端证书不在那里。我想这就是403.7的原因

但是,我无法通过cmd使用certman或keytool将客户端证书(.pfx)添加到信任存储。我通过合并我的.cer和.pvk创建了.pfx,所以我也有这两个

如何将my.pfx添加到信任存储中,以便Coldfusion获取它并验证我的https

编辑#2: 按照此步骤将my.pfx添加到密钥库之后,我现在可以看到我的客户端证书以及我的CA在https请求期间被添加为“受信任证书”

然而,我仍然得到了403.7禁止的错误

编辑#3: 添加my.pfx(请参见编辑#2)后,ssl调试信息中的握手是:

编辑#4(更多调试信息):

上面的最后一节在调试信息中返回403,它看起来像是服务器返回的错误页面的HTML内容。然而,就在这之上的是:

catalina-exec-3, READ: TLSv1 Application Data, length = 5808
Padded plaintext after DECRYPTION:  len = 5808
0000: 48 54 54 50 2F 31 2E 31   20 34 30 33 20 46 6F 72  HTTP/1.1 403 For (Example of the HTML error content)
编辑#5: 我可以看到我的客户端证书在请求开始时被添加为可信证书。。。只是没用而已

adding as trusted cert:
Subject: CN=George CF10
Issuer:  CN=MyPersonalCA
Algorithm: RSA; Serial number: 0x-431b7d9911f9856cb0adf94d50bb1479
Valid from Fri Apr 01 00:00:00 BST 2016 until Wed Apr 01 00:00:00 BST 2020
编辑#6: 将setClientCert(my.pfx的路径)和setClientCertPassword(客户端证书密码)添加到我的https请求后,我发现以下错误:

Error while trying to get the SSL client certificate:
java.security.UnrecoverableKeyException: Could not decrypt key: Could not decode key from BER. (Invalid encoding: expected tag not there.).

Check that the certificate path and password are correct and the file is in PKCS#12 format.
评论时间过长

您确定已将证书添加到正确的JVM密钥库中吗?如果您在ColdFusion服务器上升级了Java,那么它可能不在默认位置。ColdFusion管理员系统信息页面将在“Java主页”标签下告诉您正在使用的路径

要打开调试信息,请将以下行添加到ColdFusion服务器的
jvm.config
文件中,该文件位于该目录下
C:\ColdFusion10\cfusion\bin
(默认情况下),然后重新启动ColdFusion服务:

-Djavax.net.ssl=debug
-Djavax.net.debug=all
这将为服务器上的
coldfusion out.log
log文件添加更多信息。将这些信息发布到你的问题中,以便进一步分析

不需要使用MMC将证书添加到Windows服务器,也无助于从ColdFusion调用
cfhttp
。它使用Java密钥库

编辑1和编辑2的响应

按照中的步骤将
.pfx
文件转换为密钥库

编辑3、4和5的响应


如果仍然打开ssl调试开关,则应该在日志文件中看到握手信息。现在您安装了证书,它显示了什么


您是否尝试过使用
cfhttp
标记的
clientCert
clientCertPassword
属性?请注意,它需要PKCS12格式文件的完整路径,该文件包含请求的客户端证书。看

对编辑6的答复

查看此页面-关于您收到的错误消息:
无法从BER解码密钥。
摘录自该页面:

客户端证书似乎是一个普通的客户端证书,具有PKCS#12格式的私钥,但来自与服务器格式不同的证书链。因此,我首先让客户端再次检查链是否正确安装在服务器上。不幸的是,这并不容易。我将不告诉你我尝试的细节,但最终证明证书的编码不正确。以下是我将证书转换为工作状态所采取的实际转换步骤:

  • 通过MMC导入Windows证书存储中的证书
  • 在PFX formet中导出私钥、全链、无强加密的证书
  • 使用OpenSSL将PFX编码的证书转换为PEM:
    OpenSSL pkcs12-in-raw.PFX-out intermediate.PEM-nodes

  • 将PEM文件中的证书重新排序为以下顺序:>-标识证书

  • 中级证书
  • 根证书
  • 私钥

  • 使用OpenSSL将PEM编码的证书转换为PKCS#12:
    OpenSSL pkcs12-export-out final.PKCS-in final.PEM

可能可以跳过/合并其中的一些步骤(您可能只需要转换为PEM、重新排序并转换回PEM),但我真的没有时间去探索,我只知道这对我很有用

评论时间过长

您确定已将证书添加到正确的JVM密钥库中吗?如果您在ColdFusion服务器上升级了Java,那么它可能不是默认的lo
-Djavax.net.ssl=debug
-Djavax.net.debug=all