代码之家  ›  专栏  ›  技术社区  ›  Ashkan S Govindaraju

在X.509证书的非对称加密中使用公钥

  •  2
  • Ashkan S Govindaraju  · 技术社区  · 7 年前

    有时之前,我读过一篇关于使用非对称密钥(如公钥和私钥)安全发送数据的文章。我所理解的是 服务器 有1个键 (私钥) 它用来加密数据和所有 客户 使用第二个键 (公钥) 来解密它。

    现在,我应该如何接收密钥,我应该如何使用?

    如果我从服务器收到一个证书,它不会同时包含公钥和私钥吗?!

    X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    var cert = GetCertificate(certStore);
    var privatekey= cert.PrivateKey;
    var publicKey= cert.PublicKey;
    

    是否可以从证书中删除私钥?怎样我如何理解证书是否具有私钥?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Hyarus    7 年前

    首先要澄清一下:

    在里面 Public-key cryptography 这个 公钥 用于 加密 数据和 私钥 (由服务器)用于 解密 数据。

    私钥的所有者存储私钥,并且只共享一个公钥。 来自服务器的任何证书都应包含 只有 A. 公钥 。 (如果证书包含私钥,这将是一个很大的安全问题。您可以解密来自任何其他用户的消息)

    要检查证书是否有私钥,可以使用 HasPrivateKey-Property

    cert.HasPrivateKey;
    

    要获取仅使用公钥的证书,您可以使用:

    byte[] bytes = cert.Export(X509ContentType.Cert);
    var publicCert = new X509Certificate2(bytes);
    
        2
  •  1
  •   Wiktor Zychla    7 年前

    如果我从服务器收到一个证书,它不会同时包含公钥和私钥吗?!

    不,不一定。

    有两种不同的获取证书的方法

    • PKCS#7/PEM-文件通常只包含证书的公共部分
    • PKCS#12/PFX-存储区包含带有私钥的证书

    是否可以从证书中删除私钥?

    通过将其导出为仅允许存储证书的公共部分的格式。

    打开web浏览器,导航到任何使用SSL的网站。

    现在单击锁图标,然后单击证书信息。您在客户端(浏览器中)拥有的是证书 没有 私钥。您可以保存它,甚至导入到系统证书存储中,但仍然没有私钥。

    我如何理解证书是否具有私钥?

    如果使用C#代码加载,则访问 HasPrivateKey 属性将为 true 仅适用于具有私钥的证书。