我的一个合作伙伴想要进行客户端 SSL 证书认证。
他们希望我们使用公认的 CA 来签署证书。
我以为对于客户端 SSL 证书身份验证,使用自签名 CA 就可以了。但是,他们坚持认为应该由公认的 CA 来完成。有这样的事吗?
答案1
这个问题更适合http://security.stackexchange.com姊妹网站。
客户端证书不应由公认的 CA 签名;更准确地说,它们应该由这样的根/中间机构签名,该机构只签署你信任我们来代表您的客户。
显然,属于公认 CA 的公共根证书确实会签署除您的客户端之外的其他证书;签署带有某些主题文本 (CN) 的证书与信任任何请求签名的人都有权充当该主体。这意味着公认的 CA 本质上“信任”的主体比您信任的主体多得多。换句话说,你的服务器需要格外小心,以区分你赢得所有人的信任。
购买和更新公共认可的证书也需要额外的费用。
在那里时可以公认的 CA 提供的解决方案可以满足您的要求,但它们总是更昂贵、更复杂、更较少的比自己签名更安全(使用自己的根,在自己的客户端身份验证过程之后)。这对我来说没有任何意义。
更糟糕的解决方案是支付公共证书费用,然后从信任存储中删除所有公共根证书,并逐一添加特定的最终客户端证书。这种“妥协”只是将两种替代方案的成本合并在一起,而没有各自的任何好处。
更新在专业方面,我经常与银行和 PCI 处理商合作进行电子商务支付。他们通常要求服务器端和客户端证书均由自己的 CA 提供,并且拒绝使用公开认可的 CA。
答案2
大多数(如果不是全部)由商业 CA 颁发的服务器证书也适用于客户端身份验证。挑战在于,由于您需要将证书和密钥分发给客户端,因此可能会产生安全风险。除非您要进行机器对机器通信,否则我会创建一个仅适合颁发客户端证书的私有 CA。
商业 CA 只会为您拥有的有效 DNS 名称颁发服务器证书。如果您想使用此服务器证书进行客户端身份验证,则需要将证书和密钥发送给最终用户。这对您用于请求证书的服务器来说是一种安全风险。