如何使用CF10 for HTTPS获取客户端证书。 IIS 7.5

时间:2016-10-06 10:48:07

标签: iis https coldfusion certificate adobe

我尝试使用ColdFusion10 http请求进行客户端证书验证。目前,我所有回来的都是403.7。我相信ColdFusion不会拿起我的客户证书。以下是我目前安装和设置的步骤。

我做了什么:

  • 创建了自签名SSL证书,并将其安装到IIS 7.5上的默认网站。
  • 将SSL证书安装到CF存储中。
    • 经过测试的HTTPS请求,一切正常。
  • 遵循本指南的CA和客户证书。 https://ondrej.wordpress.com/2010/01/24/iis-7-and-client-certificates/
  • 将CA证书安装到服务器和客户端(通过MMC)。客户端上安装的客户端证书(.pfx)。
    • 在本地浏览器中测试过,到目前为止,一切正常。
  • 为CF10(.cer,.pvk,.pfx)创建了另一个客户端证书。
  • 将CA证书添加到CF存储中。
    • 经过测试,HTTPS拒绝使用403.7。
  • 在CF10下通过MMC添加了CA证书,客户端.pfx和.cer。
    • 经过测试,再次拒绝403.7。

我之前已经看到CFHTTP和客户端证书存在问题,但我还没有找到解决方案。 如果有人能帮助我,那就太好了。

编辑: 在做了Miguel-F建议之后,我浏览了日志文件,发现我的CA是在ColdFusion信任存储区内导入的,但我的客户端证书并不存在。我认为这就是403.7的原因。

但是,我无法使用certman或keytool通过cmd将我的客户端证书(.pfx)添加到信任存储区。我通过将.cer和.pvk合并在一起创建了.pfx,所以我也同时拥有它们。

如何将我的.pfx添加到信任存储区,以便Coldfusion选择并验证我的https?

编辑#2:编辑#2: 按照此操作将我的.pfx添加到密钥库后,我现在可以看到我的客户端证书以及我的CA被添加为'可信证书'在https请求期间。

但是,我仍然收到403.7 - 禁止错误。

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

'Is initial handshake: true'
'catalina-exec-3, WRITE: TLSv1 Handshake, length = 181' (Several of these in 1 request)

编辑#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(路径到我的.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.

2 个答案:

答案 0 :(得分:2)

评论太长

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

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

-Djavax.net.ssl=debug
-Djavax.net.debug=all

这应该向服务器上的coldfusion-out.log日志文件添加更多信息。将这些信息发回到您的问题中以供进一步分析。

不需要使用MMC将证书添加到Windows服务器,也无法帮助您从ColdFusion进行cfhttp次呼叫。它使用Java密钥库。

编辑1和2的响应

按照this other answer中有关如何将.pfx文件转换为密钥库的步骤进行操作。

编辑3,4和5的响应

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

您是否尝试过使用clientCert代码的clientCertPasswordcfhttp属性?请注意,它需要完整路径到包含请求的客户端证书的PKCS12格式文件。请参阅the docs here

编辑6的响应

请查看此页面CFHTTP and client certificates,了解您收到的错误消息:Could not decode key from 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,重新排序并转换回来),但我真的没有时间去探索它,我只是知道这个有效对我来说。

答案 1 :(得分:0)

通过关注this链接解决。

我在HTTP请求的setClientCert中使用了新的.pkcs格式文件,现在它正在运行。

  
      
  • 通过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,重新排序并转换回来),但我真的没有时间去探索它,我只是知道这个有效对我来说。