C# 如何以编程方式从.NET和C中SAML断言中的数字签名参数创建X509证书#

C# 如何以编程方式从.NET和C中SAML断言中的数字签名参数创建X509证书#,c#,.net,saml,x509,C#,.net,Saml,X509,我必须验证两个SAML2.0断言签名。我可以解析出所有的密钥和令牌参数,现在我想使用.NET CryptoUtils.VerifySignature()或其他函数来验证签名。我将签名的文本和签名作为字节[]数组以及哈希OID。我有RSA和SAML令牌参数,如签名值、模、指数等。我缺少的是要发送到.NET VerifySignature()例程的x509证书。我看不出如何通过参数以编程方式创建证书 我也非常感谢您对c#和Java库的任何建议,它将处理SAML2.0令牌(请求和响应)的创建、解析和验

我必须验证两个SAML2.0断言签名。我可以解析出所有的密钥和令牌参数,现在我想使用.NET CryptoUtils.VerifySignature()或其他函数来验证签名。我将签名的文本和签名作为字节[]数组以及哈希OID。我有RSA和SAML令牌参数,如签名值、模、指数等。我缺少的是要发送到.NET VerifySignature()例程的x509证书。我看不出如何通过参数以编程方式创建证书

我也非常感谢您对c#和Java库的任何建议,它将处理SAML2.0令牌(请求和响应)的创建、解析和验证。

在c#中,您可以使用

System.Security.Cryptography.Xml.SignedXml.CheckSignature(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate,bool verifysignaturely)

…以验证签名。基本上,它是这样工作的:

 using System.Xml;
 using System.Security.Cryptography.X509Certificates;
 using System.Security.Cryptography.Xml;
 using System.Text;

 namespace MySamlDocumentExample
 {
     public class Saml20Transaction : SignedXml
     {
         public Saml20Transaction(XmlDocument doc) 
             : base (doc)
         {

         }
     }

     public class SamlVerifier
     {
         readonly XmlDocument _mySamlDocument = new XmlDocument();

         public SamlVerifier(string saml)
         {
             _mySamlDocument.LoadXml(saml);
         }

         public X509Certificate2 X509Certificate
         {
             get
             {
                 return new X509Certificate2(
                     Encoding.ASCII.GetBytes(X509CertificateString));
             }
         }

         public string X509CertificateString
         {
             get
             {
                 XmlNodeList xmlNodeList = _mySamlDocument.GetElementsByTagName("X509Certificate");
                 return xmlNodeList[0].InnerText;
             }
         }

         public bool ValidateSignature()
         {
             Saml20Transaction saml20Transaction = new Saml20Transaction(_mySamlDocument);
             XmlNodeList xmlNodeList = _mySamlDocument.GetElementsByTagName("Signature");
             saml20Transaction.LoadXml((XmlElement)xmlNodeList[0]);
             return saml20Transaction.CheckSignature(X509Certificate, true);
         }
     }
 }

WIF呢?它应该包含您需要的所有内容。如果您没有证书,则无法“重新创建”证书。应该有其他方法来验证签名。