7

X509Certificate2XMLファイルからC#でオブジェクトを作成しようとしています。XMLファイルはSAML、ベンダーから受け取ったメタデータファイルです。

これらのXML要素から公開鍵を抽出しようとしています。

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

C#でXML要素から.cerファイルまたは公開鍵を抽出する方法はありますか?

4

2 に答える 2

9

ランドールの答えは正しいです。しかし、SAMLトークンでは、証明書は常に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));
于 2014-04-08T17:33:07.290 に答える
7

これは、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ロジックを使用してファイルをディスクに書き込むことができるはずです。

于 2013-04-11T20:47:52.527 に答える