【问题标题】:X509Certificate rawDataX509证书原始数据
【发布时间】:2018-05-31 02:10:11
【问题描述】:

我正在使用 X509Certificate(.pfx 文件)获取 jwt 令牌。 X509Certificate2 中有一个参数称为 RawData。我知道这肯定包含 publicKey 以及有关证书的其他一些元数据信息。

我想知道这个 rawData 参数是否包含任何其他关键信息,例如 PrivateKey。我找不到太多解释这些参数的文档。我能否获得有关此参数、它包含的内容以及共享是否安全的更多文档。

【问题讨论】:

  • 我无法确定在所有情况下会发生什么,但在我的实验中,我使用私钥从 .pfx 创建了一个 X509Certificate2 对象。私钥在 X509Certificate2 对象中可用(HasPrivateKey 为真),但 RawData 不包含任何私钥信息。

标签: .net x509certificate x509certificate2


【解决方案1】:

使用 this 构造函数从具有私钥的 X509Cetificate 的 RawData 制作 X509Certificate。创建的新证书的 HasPrivateKey 为 false,PrivateKey 值为 null。

【讨论】:

    【解决方案2】:

    假设 X509Certificate certInstance 是 Pfx 证书的一个实例,其中包含所有优点。

    这取决于导出证书时的内容类型。您可以从该原始数据重建证书。例如, 在 C# 中,如果我使用:

    certInstance.Export(X509ContentType.Pfx);
    

    私钥和公钥将在原始数据中。 但是,如果您导出为证书或其他值,它可能会改变。 如果您导出为:

    certInstance.Export(X509ContentType.Cert);
    

    它会剥离私钥等敏感信息的证书。但是,如果您使用相同的原始数据并尝试转换回 pfx,则私钥数据将为空。

    如果您想更改证书的内容类型,您可以按照以下方式进行操作。

    byte[] certificateAsBytes = certInstance.Export(X509ContentType.Cert);
    X509Certificate2 myNewCert = new X509Certificate2(certificateAsBytes);
    

    以下是指向可用的不同内容类型的链接:

    X509ContentTypes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2014-06-08
      相关资源
      最近更新 更多