解决IIS 7+ 安装证书时出现HRESULT:0X80070020错误 [详解]

栏目:SSL证书 作者:小天 点击: 9,990 次

我们在重新安装证书后发现网站无法启动,出现以下错误:

或者绑定网站时发生的类同错误:

以上的报错很可能由于以下几种问题产生:
问题1、最常见的情况是当用户使用IIS MMC卡导入证书,他们取消对“允许此证书导出”。这导致在一个破碎键集,从而导致该问题。

解决方案:
有两种方法来解决这个问题。在我们开始之前关闭,删除/删除存储中的现有证书。
1)如果使用IIS MMC卡导入证书,然后确保“允许此证书导出”被选中。
2)如果使私钥可导出的是不是一个选项,然后使用证书MMC导入证书。请通过以下KB如何使用MMC导入证书:http://support.microsoft.com/kb/232137

问题2、另一个原因,这可能会导致一个破碎的键集,是由于在MachineKeys的文件夹中缺少权限。这是在所有的私有密钥被存储的位置。文件夹路径(IIS7以上)是如下图所示:C:\ ProgramData\ MICROSOFT \Crypto\ RSA\ MachineKeys的
在此文件夹的默认权限在下面的文章中描述:
http://support.microsoft.com/kb/278381
http://msdn.microsoft.com/en-us/library/ee248638(v=vs.100).aspx

解决方案:
首先,删除/移除破损证书的存储区。确保权限是按照上面提到的文章。因此,我们需要权限的Administrators和Everyone的帐户。千万要记得选择,如下图:

注意:有可能是一种可能性,这个问题甚至可能在确保正确的权限可以看出。在这种情况下,使用procmon.exe工具,并固定在MachineKeys文件夹内的特定文件的访问被拒绝的错误。
你也可以尝试给系统帐户MachineKeys文件夹的完全权限。

之后,在方案1中描述给予必要的权限,重新导入证书。

问题3、还有另外一种可能,即确保了上述两种甚至之后可能会出现的问题。我观察到这种行为通常是在Windows Server 2008上的这取决于证书的KeySpec财产。
该KeySpec属性指定私钥是否可用于加密或签名,或二者兼有。
下面的MSDN文章描述KeySpec属性:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379020%28v=vs.85%29.aspx

为了检查该证书的KeySpec属性,使用下面的命令:
certutil -v -store my <thumbprint>

注:在上面的命令中的指纹信息可以在证书的详细信息选项卡中找到。以下是有效的命令:

certutil -v -store my "32 b5 39 8e d3 c9 c6 f1 a3 50 bc d4 b5 14 eb b5 a4 5d 1f c6"

certutil -v -store my "32b5398ed3c9c6f1a350bcd4b514ebb5a45d1fc6"

certutil -v -store my 32b5398ed3c9c6f1a350bcd4b514ebb5a45d1fc6

获取上述命令的输出中一个记事本,然后搜索KeySpec,这是CERT_KEY_PROV_INFO_PROP_ID节的一部分。该KeySpec表示为十六进制值。

如上所述它上面可以采取三个值:

因此,如果KeySpec值设置为任何大于1的其他的问题是更可能是当CSR是使用定制模板生成,而不是指定的KeySpec被发生的问题能够被看见。
每当没有明确指定KeySpec属性,它需要2即默认值,它可用于仅签名的目的。

解决方案:

所以,你需要记住的一件事是,KeySpec属性必须明确指定。
1)如果您是通过生成的代码证书,然后确保你的KeySpec属性明确设置为1。
2)如果使用的certreq.exe工具以及一个inf文件提交请求到SAN中,确保你明确指定KeySpec属性为1。
参考自文章:http://support.microsoft.com/kb/931351
3)Remember在创建证书签名请求中指定的KeySpec属性。一旦证书已颁发此不能修改。所以记得要设置适当的值。
4)Also与密钥用法属性比较KeySpec并确保两者匹配逻辑。
例如,对于证书的KeySpec等于AT_KEYEXCHANGE,密钥用法应该是
XCN_NCRYPT_ALLOW_DECRYPT_FLAG| XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG。

XCN_NCRYPT_ALLOW_USAGES_NONE
The permitted uses are not defined.
XCN_NCRYPT_ALLOW_DECRYPT_FLAG
The key can be used to decrypt content. This maps to the following X509KeyUsageFlags values:

  • XCN_CERT_DATA_ENCIPHERMENT_KEY_USAGE
  • XCN_CERT_DECIPHER_ONLY_KEY_USAGE
  • XCN_CERT_ENCIPHER_ONLY_KEY_USAGE
  • XCN_CERT_KEY_ENCIPHERMENT_KEY_USAGE
XCN_NCRYPT_ALLOW_SIGNING_FLAG
The key can be used for signing. This maps to the following X509KeyUsageFlags values:

  • XCN_CERT_CRL_SIGN_KEY_USAGE
  • XCN_CERT_DIGITAL_SIGNATURE_KEY_USAGE
  • XCN_CERT_KEY_CERT_SIGN_KEY_USAGE
XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG
The key can be used to establish key agreement between entities.
XCN_NCRYPT_ALLOW_ALL_USAGES
All of the uses defined for this enumeration are permitted.

本文来自参考:http://blogs.msdn.com/b/kaushal/archive/2012/10/07/error-hresult-0x80070520-when-adding-ssl-binding-in-iis.aspx



声明: 本文由( 小天 )原创编译,转载请保留链接: 解决IIS 7+ 安装证书时出现HRESULT:0X80070020错误 [详解]

------====== 本站公告 ======------
欢迎使用趣域网域名百科,我们将长期提供域名使用相关知识和投资域名的方法和技巧;并提供主机、服务器的解决问题和网站运营方法。