0

我正在尝试了解有关 X.509 数字证书的更多信息。周围似乎有很多矛盾之处。我正在使用Bouncy Castle生成密钥对,使用

public static void SaveToFile(X509Certificate newCert, AsymmetricCipherKeyPair kp, string filePath, string certAlias, string password)
{
    var newStore = new Pkcs12Store();
    var certEntry = new X509CertificateEntry(newCert);
    newStore.SetCertificateEntry(certAlias, certEntry);
    newStore.SetKeyEntry(certAlias, 
          new AsymmetricKeyEntry(kp.Private), new[] { certEntry });

    using (var certFile = File.Create(filePath))
        newStore.Save(certFile, password.ToCharArray(), new SecureRandom(new CryptoApiRandomGenerator()));
}

这会将生成的证书保存到磁盘。有些文章告诉我们不需要密码保护证书,因为那里没有PRIVATE KEY存储证书。然后这篇文章说证书确实包含PRIVATE KEY.

我想我有两个问题希望能帮助我理解这一点:

  1. 如果我以这种方式生成我的密钥,密码是否应该与密码相同PRIVATE KEY
  2. 我是否分发 X.509 证书以证明它PUBLIC KEY是我的(在证书中与我的名字配对),或者证书应该像自签名证书一样安全和保密,PRIVATE KEY还有什么用途?
4

2 回答 2

1

PKCS#12 文件可以包含证书和私钥。然而,它们被存储为单独的、不同的对象。证书本身具有嵌入其中的公钥。由于证书仅包含公钥,因此它也被认为是“公开的”。您可以随意分发证书,因为它不包含应保密的私钥。这是非对称密码学中安全性的基础。

由于 PKCS#12 文件包含这两个项目,因此使用密码对其进行加密以保护其中的私钥。也就是说,您将使用私钥来证明您分发的证书属于您。例如,通过在文档上使用数字签名。

希望有帮助!

于 2013-07-23T18:30:45.087 回答
0

证书实际上是将您的身份(即您的姓名、电子邮件等)绑定到某个公钥的信息块。它是公开的,因此每个人都可以知道此密钥属于您。因此,当您签署某些东西时,他们会知道实际上是您签署了该文件。另一件事是验证证书 - 这是使用受信任的根证书的原因。

私钥是您自己的秘密信息,必须保密。

于 2013-07-21T20:24:45.620 回答