Sử dụng VS 2008 với .Net Framework 3.5 trên máy chủ Windows 2003.Xác minh chữ ký XML đã ký cho SSO SAML (Sử dụng sha256)
Chúng tôi đã triển khai SSO với SAML để bảo mật. Chúng tôi làm việc tại nhà cung cấp dịch vụ kết thúc, nơi chúng tôi xác thực mã thông báo SAML Assertuib XML đã được tạo từ hệ thống của khách hàng. Hiện tại, bất kỳ tài liệu đã ký nào đều sử dụng Thuật toán Chữ ký "rsa-sha1", nhưng bây giờ chúng tôi có khách hàng mới gửi tệp với thuật toán chữ ký là "rsa-sha256" và đây là sự cố bắt đầu.
public static string VerifySignature()
{
if (m_xmlDoc == null)
return "Could not load XMLDocument ";
try
{
XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("dsig", SignedXml.XmlDsigNamespaceUrl);
XmlElement sigElt = (XmlElement)m_xmlDoc.SelectSingleNode(
"//dsig:Signature", nsm);
// Load the signature for verification
SignedXml sig = new SignedXml(m_xmlDoc);
sig.LoadXml(sigElt);
if (!sig.CheckSignature())
return "Invalid Signature";
}
catch (Exception ex)
{
return ex.Message;
}
return string.Empty;
}
Bây giờ, khi tôi cố gắng cùng mã cho khách hàng mới này (có chữ ký của thuật toán rsa-sha256h) - điều này không hoạt động và tôi nhận được lỗi "SignatureDescription không thể được tạo ra cho các thuật toán chữ ký cung cấp. "
Đi qua nhiều blog và bài viết trong 2-3 ngày qua, tôi đã biết rằng SignedXml không hỗ trợ sha256. Khỏe. Nhưng những gì tiếp theo. Một nơi nào đó đề cập rằng sử dụng WIF, tôi cũng đã kiểm tra & đã thử this.
Tôi cũng đang cố sử dụng phương pháp VerifySignature của RSAPKCS1SignatureDeformatter. Nhưng không thực sự chắc chắn hai thông số được thông qua là gì.
Tôi đã ấn tượng rằng thuật toán mã hóa được hỗ trợ bởi vì nó hỗ trợ đối tượng X509Certificate2. Phương thức sig.CheckSignature (...) có quá tải cần 2 tham số, X509Certificate2 và bool. Bạn đã thử sử dụng nó và đi qua trong cert và sự thật? –