SSL 认证链不适用于自签名证书

SSL chain of certification not working for a self signed certificate

一位客户给了我们 3 个证书,这些证书按顺序安装在 windows 服务器上,并且:

  1. 由 Verisign 颁发,适用于 Symantec(仅证书,安装为 中级)
  2. 由 Symantec 颁发,适用于 CompanyX(仅证书, 作为中间安装)
  3. 由 CompanyX 发布,适用于 CompanyX (证书和密钥,安装为个人)

在 mmc 中,当我检查 #2 时,我可以看到链为:

威瑞信(根) -> 威瑞信(中级) --> 赛门铁克(中级)

检查#3(自签名证书)时,没有链。只有 CompanyX。

似乎 windows 未能在最后一个中间证书和自签名证书之间建立链,因此当客户端连接到 Web 服务器时,他们会看到自签名或不受信任的证书警告,大概是因为服务器未发布中间证书。

我已经验证了通用名称完全匹配,并重复了几次安装过程。我在安装证书时做错了什么吗?我错过了什么吗?

证书 #3 不是 VeriSign 颁发的证书的一部分。它可以是从节点复制的不完整请求的虚拟证书(在证书 MMC 中)。如果是这种情况(比较 public 密钥或 Subject Key Identifier 扩展值)#2 和 #3 证书。如果它们匹配,将证书 #3 移动到 Certificate Enrollment Requests 节点。

您的客户需要做的是转到生成原始请求的机器(我怀疑是在 IIS 服务器上)并尝试通过 运行ning 以下命令正确安装颁发的证书:

certreq -accept path\certNo2.cer

如果命令成功,证书将自动安装到个人存储中。如果命令失败,客户必须找到生成请求的机器和运行上面的命令。

仅供记录和未来可能的搜索,以下是我的解决方法:

由于#3 和#2 具有相同的主题(和 public 密钥),并且我有#3 的私钥但没有#2,我想尝试使用#3 的私钥#2 证书,所以:

  1. 使用 openssl pkcs12 -in Cert3.pfx -nocerts -nodes 从 #3 中提取密钥。其中 Cert3.pfx 是带有密钥的 #3 证书,它会创建一个新的 Cert3.key 文件,其中只有私钥。

  2. 使用 openssl pkcs12 -export -out 'NewCert2.pfx' -inkey Cert3.key -in Cert2.cer 将 #2 证书与提取的密钥合并。其中 Cert2.cer 是没有密钥的 #2,并创建 NewCert2.pfx 并合并了 #2 证书和 #3 密钥。

  3. 已从个人存储中删除#3 并从中级存储中删除#2。

  4. 将新合并的 #2 导入个人商店。

  5. 更新了新证书的 IIS 绑定。

结果是使用 #2 作为 SSL 证书,已经用 SSL-Checker 测试过,一切正常。