Проверьте XML-документ, используя открытый ключ, который находится в документе - PullRequest
0 голосов
/ 30 октября 2019

Мне удалось успешно добавить открытый ключ к подписи документа. Цель состоит в том, чтобы проверить его с помощью этого открытого ключа, а не использовать сертификат. Вот 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; }
    }

В настоящее время я использую сертификат. Я хочу изменить это, чтобы вместо этого использовать открытый ключ.

...