【问题标题】:Extract public key from an XML file with X509certificate?使用 X509certificate 从 XML 文件中提取公钥?
【发布时间】:2012-11-30 06:04:15
【问题描述】:

我正在尝试从 XML 文件在 C# 中创建 X509Certificate2 对象。 XML 文件是我们从供应商处收到的SAML 元数据文件。

我正在尝试从这些 XML 元素中提取公钥:

<X509Data>
    <X509Certificate>
      MIIB7DCCAVmgAwIBAgIQPjHcBTL63bBLuJZ88RcrCjAJBgUrDgMCHQUAMBExDzANBgNVBAMT
      BnJvbWVvazAgFw0xMDAzMTUwMjI1MjZaGA8yMTEwMDIxOTAyMjUyNlowETEPMA0GA1UEAxMG
      cm9tZW9rMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAu/sBh13A27rR7gJpZsI6zCee
      TXNohQWlq2z6Zg8Oxzsy5JoVV 
    </X509Certificate>
</X509Data> 

在 C# 中有没有办法从 XML 元素中提取 .cer 文件或公钥?

【问题讨论】:

  • 那里看起来像base64编码的数据(但根据openssl,我不会解码为X509证书)。类似的问题(针对 Java)在这里:stackoverflow.com/q/13091272/27190.

标签: c# x509certificate saml


【解决方案1】:

兰德尔的回答是正确的。但在 SAML Token 中,我相信证书将始终是 Base64 编码的。 所以对于后代来说,对我有用的解决方案是:

var document = new XmlDocument();
document.LoadXml(txtXml.Text);
var certificateStr = document.SelectSingleNode("X509Data/X509Certificate").InnerText;
byte[] data = Convert.FromBase64String(certificateStr);
var x509 = new X509Certificate2(data);
Console.WriteLine("Public Key Format: {0}", x509.PublicKey.EncodedKeyValue.Format(true));

【讨论】:

  • 谢谢!正是我需要的!
【解决方案2】:

在不知道 X509Certificate 是如何编码的情况下,这是一个很难回答的问题,但是假设您有编码的东西,您可以执行以下操作:

  var document = new XmlDocument();
  document.LoadXml(txtXml.Text);
  var cert = document.SelectSingleNode("X509Data/X509Certificate").InnerText;
  /*...Decode text in cert here (may need to use Encoding, Base64, UrlEncode, etc) ending with 'data' being a byte array...*/ 
  var x509 = new X509Certificate2(data);

然后您应该能够使用标准文件 I/O 逻辑将文件写入磁盘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2021-02-04
    • 2019-12-13
    • 2023-03-12
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多