X.509自签名证书

时间:2013-07-21 19:45:55

标签: private-key pki public-key x509

我正在尝试了解有关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存储。然后this article表示证书确实包含PRIVATE KEY

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

  1. 如果我以这种方式生成密钥,密码应该是SAME作为PRIVATE KEY的密码吗?
  2. 我是否分发X.509证书以证明PUBLIC KEY是我的(在证书中与我的名字配对),或者证书应该像PRIVATE KEY一样安全和保密使用是自签名证书吗?

2 个答案:

答案 0 :(得分:1)

PKCS#12文件可以包含 两者 证书和私钥。但是,它们作为单独的不同对象存储。证书本身嵌入了公钥。由于证书仅包含公钥,因此它也被视为“公共”。您可以随意分发证书,因为它不包含 私钥 ,应该保密。这是非对称加密技术安全性的基础。

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

希望有所帮助!

答案 1 :(得分:0)

证书实际上是将您的身份(即您的姓名,电子邮件或其他任何内容)绑定到某个公钥的信息块。它是公开的,所以每个人都可以知道这个密钥属于你。 因此,当您签署某些内容时,他们会知道您实际签署了此内容。 另一件事是验证证书 - 这是使用什么信任的根证书。

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