假设我们有两家公司,A(我们的)和 B,两者都有一些 Web 服务。A 公司使用 B 公司的 Web 服务,反之亦然。所有 Web 服务都使用服务器 SSL 证书进行保护,并使用客户端 SSL 证书进行身份验证。
为了测试目的,我们公司(A)颁发了一个自签名服务器证书和一个相应的客户端证书,均由我们的独立 CA 签名,并添加到服务器和客户端上受信任的根 CA 中。
现在我们需要进入现实世界,我们从 GoDaddy 订购了服务器证书。我们如何获得相应的客户端证书?公司 B 想要一个新的客户端证书,该证书将由受信任的 CA 签名,因为“它确保私钥保持在应有的位置”。
他们发送了 CSR,我该如何处理?如何使用它颁发受信任的客户端证书?
有趣的是,B 公司使用由 B 公司独立 CA 颁发的证书,但浏览器显示该证书有效(即绿色),尽管我没有将任何中间 CA 添加到我信任的根颁发机构。此类证书的认证路径不包含任何知名 CA,如 Thawte、Verisign 等。这怎么可能呢?
答案1
客户端用于验证服务器的证书与服务器用于验证客户端的证书之间没有隐式联系。
客户端完全可以使用受信任的第三方颁发的证书(例如您现在拥有的证书)对服务器进行身份验证,而服务器继续使用私有 CA 对客户端进行身份验证。服务器也可以使用公共证书包对相同的客户端进行身份验证。但是,如果您希望后者适用,则无法签署这些 CSR;它们必须也发送到 GoDaddy(或其他受信任的第三方)并进行签名。
所以我担心答案是这取决于。如果您的服务器仍配置为使用私有 CA 根证书对客户端进行身份验证,那么您应该继续使用该私有根证书对 CSR 进行签名。客户端可以继续使用公共证书包和服务器的新第三方证书对服务器进行身份验证;这种模式没有任何问题。但是,如果您已将服务器重新配置为使用公共证书包对客户端进行身份验证,那么每个客户端都需要一个受信任的第三方签名证书,并且您必须习惯于为这些证书付费。
至于您看到绿色条的原因,可能是因为您过去曾将其 CA 根导入为有效签名证书,也可能是因为该证书不是私下签名的,而是公开签名的。如果没有看到相关证书,就无法判断。