У меня есть соединение с внешним WebService, который работал безупречно целую вечность до середины мая 2018 года. Внезапно я начал получать CryptographicException с сообщением «Malformed XML Signature».Мое расследование говорит мне следующее:
Исключение выдается из строки LoadXml (подпись);в классе, который унаследован от System.Security.Cryptography.Xml.SignedXml
. Вот код:
public bool CheckAssertionSignature()
{
if (Xml == null || Xml.DocumentElement == null)
return false;
var xmlass = Xml.DocumentElement.LocalName == "Assertion" ? Xml.DocumentElement : Xml.GetElementsByTagName("Assertion", Namespaces.Saml)[0] as XmlElement;
var signature = xmlass.GetElementsByTagName("Signature", Namespaces.Ds)[0] as XmlElement;
if (signature == null) return false;
LoadXml(signature);
var cert = KeyInfo.Cast<KeyInfoX509Data>().Select(d => d.Certificates[0] as X509Certificate2).FirstOrDefault(c => c != null);
return cert != null && CheckSignature(cert, true);
}
Что я выучил до сих пор: коллега и я проверилиКод локально на двух разных версиях Windows 10. Его версия новее, чем у меня.Он получает ошибку, а я нет.
XML-код, обработанный кодом, идентичен
Ошибка началась 16 мая 2018 года, и в этот день сервер установил это обновление для системы безопасности https://support.microsoft.com/da-dk/help/4099635/security-and-quality-rollup-for-net-framework-3-5-4-5-2-4-6-4-6-1-4-6
Мы знаем, что подобное обновление ранее вызывало похожую проблему: https://support.microsoft.com/en-us/help/3148821/after-you-apply-security-update-3141780-net-framework-applications-enc
Кто-нибудь имеет представление о том, как решить эту проблему (и кто-нибудь еще испытывает проблему)?
PS.Код работает на Windows SRV 2012 R2, и проблема также существует на Windows SRV 2016