Использование VS 2008 с .Net Framework 3.5 на сервере Windows 2003.Подписанная проверка подписи XML для SSO SAML (с использованием sha256)
Мы внедрили SSO с SAML для обеспечения безопасности. Мы работаем на стороне поставщика услуг, где мы проверяем токены Signed 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.
Я также пытаюсь использовать метод VerifySignature RSAPKCS1SignatureDeformatter. Но не совсем уверен, какие два параметра должны быть переданы.
У меня создалось впечатление, что алгоритм шифрования поддерживается, поскольку он поддерживает объект X509Certificate2. Метод sig.CheckSignature (...) имеет перегрузку, которая принимает 2 параметра: X509Certificate2 и bool. Вы пробовали использовать его и передали в cert и true? –