簡體   English   中英

如何從 .NET 和 C# 中的 SAML 斷言中的數字簽名參數以編程方式創建 X509 證書

[英]How to programmatically create a X509 cert from the digital signature parameters in a SAML assertion in .NET and C#

我必須驗證兩個 SAML 2.0 斷言簽名。 我可以解析所有密鑰和令牌參數,現在想要使用 .NET CryptoUtils.VerifySignature() 或其他一些函數來驗證簽名。 我有已簽名的文本和作為字節 [] 數組的簽名以及哈希 OID。 我有 RSA 和 SAML 令牌參數,例如簽名值、模數、指數等。我缺少的是要發送到 .NET VerifySignature() 例程的 x509 證書。 我看不到如何從參數以編程方式創建證書。

我也很感激關於庫、c# 和 Java 的任何建議,這些建議將處理創建、解析、驗證 SAML 2.0 令牌(請求和響應)。

在 C# 中,您可以使用...

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

...驗證簽名。 基本上,它會像這樣工作:

 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);
         }
     }
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM