Мне удалось успешно добавить открытый ключ к подписи документа. Цель состоит в том, чтобы проверить его с помощью этого открытого ключа, а не использовать сертификат. Вот XML в подписанном документе:
<KeyValue>
<RSAKeyValue>
<Modulus>t++UmV1G9ApuI118GdwK0BoxN3tjrxuQHTwKvlFgl6VrcLhMCb5Q2prga8I4HKLvLDr3L4bsrH0k9r6PPppqMpiN/KGdm6eB2uLnWtJXh1PWcnzfHfodYfQP/NAavIo4wSjss0L41c75/CA0x11iDdU4BOdTHGXaFCaNPQ5DLe3LK+6hjZ+fOYMpCd035TYTLo5+/Ttk5eCzr+MHfnWCaCIOUgkbq0OIUQWch2Sc9regIiA9oPPjUmmbqptLfm9wZBHRZZ+7Q4BewxSBBCIFt5yPhCsTZ1fFINV16tGtXTmtgXCagu4NiH7XsyhZhYDrA8CXb31Dn7M/ussNQkGrEQ==
</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
</KeyValue>
Это мое приложение для проверки.
string xmlString = File.ReadAllText(@"C:/Users/GR-002/Desktop/xml_should_fail_validation.xml");
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(xmlString);
X509Certificate2 pubCert =
new X509Certificate2(@"C:/Users/GR-002/Documents/DigitalSignature/base64_encoded_certificate.cer");
Console.WriteLine(ValidateXmlDocumentWithCertificate(doc, pubCert));
}
public static bool ValidateXmlDocumentWithCertificate(XmlDocument doc, X509Certificate2 cert)
{
try
{
SignedXml signedXml = new SignedXml(doc);
XmlNodeList nodeList = doc.GetElementsByTagName("Signature");
signedXml.LoadXml((XmlElement)nodeList[0]);
return signedXml.CheckSignature(cert, true);
}
catch { return false; }
}
В настоящее время я использую сертификат. Я хочу изменить это, чтобы вместо этого использовать открытый ключ.