[英]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.