![IIS 发送了错误的中间 SSL 证书](https://linux22.com/image/662528/IIS%20%E5%8F%91%E9%80%81%E4%BA%86%E9%94%99%E8%AF%AF%E7%9A%84%E4%B8%AD%E9%97%B4%20SSL%20%E8%AF%81%E4%B9%A6.png)
我刚刚为我们的一个服务器安装了新的 SSL 证书(来自 StartCom),发现 Chrome 中网站显示交叉挂锁图标,于是我开始调查为什么会这样。结果发现这是因为发送到浏览器的中间证书使用了旧的 SHA-1 签名算法。
为了确保万无一失,我获取了我们的证书(最初由 CA 颁发),再次通过 OpenSSL 运行它以将其与 SHA-2 中间证书合并(我从 CA 的站点下载了它),然后在 IIS 上再次更新它。它仍然没有帮助。
我进行了测试SSL 实验室显示内容如下:
我不知道这里显示的中级证书(带有指纹“a1ac...”的证书)来自哪里。
- 它没有安装在服务器上 - 我通过尝试在服务器的“证书”管理单元控制台中找到它来检查:
它不是我分配给网站的证书的一部分 - 这是certutil-dump 证书.pfx:
================ Certificate 0 ================ ================ Begin Nesting Level 1 ================ Serial Number: 1cab36472d9c51 Issuer: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL NotBefore: 10/14/2007 10:57 PM NotAfter: 10/14/2022 10:57 PM Subject: CN=StartCom Class 2 Primary Intermediate Server CA, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL Non-root Certificate Template: Cert Hash(sha1): 06 49 69 b7 f4 d6 a7 4f d0 98 be 59 d3 79 fa e4 29 a9 06 fb ---------------- End Nesting Level 1 ---------------- No key provider information Cannot find the certificate and private key for decryption. ================ Certificate 1 ================ ================ Begin Nesting Level 1 ================ Serial Number: 07aa747ba37df3 Issuer: CN=StartCom Class 2 Primary Intermediate Server CA, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL NotBefore: 7/15/2015 3:41 AM NotAfter: 7/15/2017 3:23 AM Subject: [email protected], CN=*.idioma.com, O=IDIOMA, s.r.o., L=Praha, S=Praha, C=CZ Non-root Certificate Template: Cert Hash(sha1): 02 90 be 6e 6e b8 a5 7a ff aa a2 ac 95 b8 61 2a 3d c7 80 f6 ---------------- End Nesting Level 1 ---------------- Key Container = <hidden> Unique container name: <hidden> Provider = Microsoft Enhanced Cryptographic Provider v1.0 Encryption test passed CertUtil: -dump command completed successfully.
请注意,中级证书签名与 SSL Labs 输出不匹配。但是,当我在 IIS 上打开站点的证书、转到其认证路径、打开中级证书并查看其签名时,它与我看到的内容相匹配。
是什么使得 IIS 发送这个特定的中间证书?
更新:
我的证书的公共部分(我从 CA 获得的 CRT 文件)是这里。
输出certutil -verifystore CA "StartCom Class 2 Primary Intermediate Server CA"
:
CA "Intermediate Certification Authorities"
================ Certificate 3 ================
Serial Number: 1cab36472d9c51
Issuer: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
NotBefore: 10/14/2007 10:57 PM
NotAfter: 10/14/2022 10:57 PM
Subject: CN=StartCom Class 2 Primary Intermediate Server CA, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
Non-root Certificate
Cert Hash(sha1): 06 49 69 b7 f4 d6 a7 4f d0 98 be 59 d3 79 fa e4 29 a9 06 fb
No key provider information
Cannot find the certificate and private key for decryption.
Encryption test passed
Verified Issuance Policies:
1.3.6.1.4.1.23223.1.1.1
Verified Application Policies:
1.3.6.1.5.5.7.3.1 Server Authentication
1.3.6.1.5.5.7.3.2 Client Authentication
1.3.6.1.5.5.7.3.4 Secure Email
1.3.6.1.5.5.7.3.3 Code Signing
1.3.6.1.5.5.7.3.8 Time Stamping
1.3.6.1.4.1.311.10.3.4 Encrypting File System
1.3.6.1.5.5.7.3.6 IP security tunnel termination
1.3.6.1.5.5.7.3.7 IP security user
Certificate is valid
CertUtil: -verifystore command completed successfully.
输出certutil -GroupPolicy -verifystore CA "StartCom Class 2 Primary Intermediate Server CA"
:
CA "Intermediate Certification Authorities"
CertUtil: -verifystore command FAILED: 0x80090011 (-2146893807 NTE_NOT_FOUND)
CertUtil: Object was not found.
答案1
这不是 IIS 的错误。看起来您下载了错误的中间 CA 证书或错误地将证书与 OpenSSL 合并。
IIS 内部构建证书链并使用这些证书(根证书除外,根证书在 SSL 握手期间不会传输)发送给客户端。即使证书不在存储中,IIS 也可以使用颁发机构信息访问证书扩展来检索丢失的颁发者证书。
根据您的输出,中间 CA 证书(在 PFX 包中)不是您证书的正确颁发者。如果您可以向我们发送(或在此处发布)证书的公开部分,我会提供有关正在发生的事情的更多信息。但最有可能的是,问题出在 StartCom 方面。
编辑 17.07.2015
我检查了您的输出,发现 StartSSL 在更新中间 CA 证书时做出了错误的决定。他们重复使用了密钥对,结果,可以通过不同的中间 CA 证书和单个根为您的证书生成多个相同的链。根据多种因素,链接引擎可以选择任一链。
一个好的做法是,当 CA 证书中任何重要信息发生更改时,使用新的密钥对更新 CA 证书。
你应该做什么(如果可能的话):
- 删除 IIS 中的绑定。
- 将 SSL 证书导出为 PFX。在导出向导中,取消选中包含链中所有证书的选项,并标记如果导出成功则删除私钥。
- 从存储中删除证书并清除 CryptoAPI 缓存:
certutil -urlcache * delete
。 - 在本地计算机\中间 CA 中安装正确的 StartSSL CA 证书:(https://www.startssl.com/certs/class2/sha2/der/sub.class2.server.sha2.ca.crt)
- 将导出的 PFX 安装到机器存储(个人容器)。您可以选择在导入操作期间将私钥标记为可导出。
- 双击证书,切换到“证书路径”选项卡,选择中级 CA 证书 -> 查看证书并检查它是否是正确的 SHA256 证书。
- 在 IIS 中配置 SSL 绑定。
答案2
虽然我无法对 StartCom 进行具体评论,但我过去也遇到过类似的问题,供应商将 SHA 1 更改为 SHA 2,通常是交叉签名证书的问题。
我发现最好的方法是找到您的服务器当前返回的所有中间证书和根证书,然后删除中间和根条目。
在您的情况下,这将是“StartCom Class 2 主要中间服务器 CA”和“StartCom 认证机构”。您可能希望首先导出这些内容以确保安全。
此时您应该能够从供应商的 CA 包中导入新证书。