在 Windows 2003 服务器上使用 VS 2008 和 .Net Framework 3.5。
为了安全,我们已经使用 SAML 实施了 SSO。我们在服务提供商端工作,我们验证从客户端系统生成的签名 XML SAML Assertuib 令牌。到目前为止,我们遇到的任何签名文档都使用签名算法“rsa-sha1”,但现在我们有新客户发送签名算法为“rsa-sha256”的文件,问题就开始了。
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;
}
现在,当我为这个新客户尝试相同的代码(使用签名算法 rsa-sha256h)时 - 这不起作用,我收到错误“无法为提供的签名算法创建签名描述”。
最近2-3天浏览了很多博客和文章,我才知道SignedXml不支持sha256。美好的。但是接下来呢。在某处提到使用 WIF,我也检查并尝试了这个。
我也在尝试使用 RSAPKCS1SignatureDeformatter 的 VerifySignature 方法。但不确定要传递的两个参数是什么。