繁体   English   中英

.NET 中的客户端证书

[英]client certificates in .NET

谁能向我解释一下客户端证书和我们在 SSL 中看到的公共证书之间的区别?

为什么我们需要客户端证书中的私钥?

我目前有一个没有与之关联的私钥的客户端证书,并且 IIS 一直要求提供私钥。

请帮忙!

客户端证书(顾名思义)用于在 SSL/TLS 握手期间向服务器验证客户端。 为了使任何证书用于身份验证,身份验证方必须拥有私钥,这是真实性的证明(换句话说,拥有私钥的人拥有所有权)。 因此,如果您使用某些证书来验证客户端,您必须拥有相应的私钥。 私钥永远不会离开客户端,它仅用于某些加密实现。

但是,您的问题令人困惑。 在服务器上,您通常向客户端验证服务器,并为此使用服务器的证书。 您可以告诉服务器,某个客户端的证书是受信任的,并且客户端可以使用此证书对自己进行身份验证,但您不需要客户端的私钥。 所以你对 IIS 做错了。

我目前有一个没有与之关联的私钥的客户端证书

这在术语上是矛盾的。 每个证书都有一个与之关联的私钥。 它与证书一起安装在客户端。 它实际上是在证书之前生成的。 证书本身可以导出,但这没有私钥。 这样做是为了让服务器信任客户端,如果客户端证书没有由服务器已经信任的人签名。

证书包含密钥对的公钥。 有人持有密钥对的私钥,并保守秘密。 它与证书分开存储,除非您将它们捆绑在一起以传输它们,例如在 PFX 文件中。

当服务器有一个“服务器证书”时,这是一个带有公钥的证书,并且服务器也将私钥安全地保存在某个地方。 它使用私钥在 SSL 握手上签名。 客户端只需要服务器证书,该证书只有服务器密钥对的公钥,以验证该签名,以确定服务器确实持有服务器密钥对的私钥。

当客户端在 SSL 连接上发送“客户端证书”以进行客户端身份验证时,客户端将拥有自己的私钥安全地保存在其身边。 当您在客户端计算机上导入客户端证书时,如果证书是在其他地方生成的,则可能会忽略导入私钥。 但是客户端需要拥有该客户端私钥才能在 SSL 握手中签署某些内容,以向服务器证明它拥有客户端密钥对的私钥。

服务器只看到客户端证书,它只有公钥。 公钥,连同客户端签署的东西,证明客户端持有私钥。 双方都没有将自己的私钥发送给对方。 他们只发送证书,证书只携带公钥和证书内容(通用名、颁发者等)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM