使用VS 2008和.NET Framework 3.5在Windows 2003服务器上。
我们已经实施了基于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 签名算法)时,它不能正常工作,我收到了错误消息“无法为提供的签名算法创建 SignatureDescription。”通过阅读过去2-3天许多博客和文章,我发现 SignedXml 不支持 sha256。好的,但接下来怎么做呢?有些地方提到使用 WIF,我也检查并尝试了this。我还试图使用 RSAPKCS1SignatureDeformatter 的 VerifySignature 方法,但不确定要传递哪两个参数。