.NET中的客户端证书

时间:2011-07-05 06:30:11

标签: asp.net iis ssl client certificate

任何人都可以向我解释客户端证书与我们在SSL中看到的公共证书之间的区别吗?

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

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

请帮忙!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

  

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

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

答案 2 :(得分:0)

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

当服务器具有“服务器证书”时,这是一个带有公钥的证书,服务器也将私钥保存在某处。它使用私钥在SSL握手上签名。客户端只需要服务器证书(仅具有服务器密钥对的公钥)来验证该签名,以确定服务器确实保留了服务器密钥对的私钥。

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

服务器只能看到客户端证书,该证书只有公钥。公钥以及客户端签署的内容证明客户端持有私钥。双方都没有将自己的私钥发送给另一方。他们只发送证书,证书只携带公钥和证书材料(通用名称,发行人等)