You*_*suf 7 c# saml x509certificate
我试图X509Certificate2从XML文件在C#中创建一个对象.XML文件是SAML我们从供应商处收到的元数据文件.
我试图从这些XML元素中提取公钥:
<X509Data>
<X509Certificate>
MIIB7DCCAVmgAwIBAgIQPjHcBTL63bBLuJZ88RcrCjAJBgUrDgMCHQUAMBExDzANBgNVBAMT
BnJvbWVvazAgFw0xMDAzMTUwMjI1MjZaGA8yMTEwMDIxOTAyMjUyNlowETEPMA0GA1UEAxMG
cm9tZW9rMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDAu/sBh13A27rR7gJpZsI6zCee
TXNohQWlq2z6Zg8Oxzsy5JoVV
</X509Certificate>
</X509Data>
Run Code Online (Sandbox Code Playgroud)
在C#中有一种方法可以从XML元素中提取.cer文件或公钥吗?
兰德尔的回答是正确的.但在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));
Run Code Online (Sandbox Code Playgroud)
在不知道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);
Run Code Online (Sandbox Code Playgroud)
然后,您应该能够使用标准文件I/O逻辑将文件写入磁盘.