如果我从服务器收到证书,它是否包含公钥和私钥?!
不,不一定。
获得证书有两种不同的方法
是否可以从证书中删除私钥?
通过将其导出为允许您仅存储证书的公共部分的格式。
打开Web浏览器,导航到使用SSL的任何站点。
现在单击锁定图标,然后单击证书信息。您在客户端(在浏览器中)拥有的是证书 的 无 强> 私钥。您可以保存它甚至导入系统证书存储区,但仍然没有私钥。
如何证明证书是否有私钥?
如果您使用C#代码加载它,请访问 HasPrivateKey 财产将 true 仅适用于具有私钥的证书。
HasPrivateKey
true
首先澄清一点:
在 公钥加密 该 的 公钥 强> 习惯了 的 加密 强> 数据和 的 私钥 强> 用于(由服务器) 的 解码 强> 数据。
私钥的所有者存储私钥并且仅共享公钥。 来自服务器的任何证书都应包含 的 只要 强> 一个 的 公钥 强> 。 (如果证书包含私钥,那将是一个很大的安全问题。您可以解密来自任何其他用户的消息)
要检查证书是否有私钥,您可以使用 HasPrivateKey-物业
cert.HasPrivateKey;
要获得只使用公钥的证书,您可以使用:
byte[] bytes = cert.Export(X509ContentType.Cert); var publicCert = new X509Certificate2(bytes);