Я только начинаю изучать безопасность XML. У нас есть VS-2005 и ASP.Net 2.0. Я хочу отправить XML на внешний URL-адрес, и он должен быть зашифрован. Я делаю именно то, что описано в статьях MSDN ms229744 и ms229943, но при выполнении метода DecryptDocument() я продолжаю получать «Не удалось получить ключ дешифрования». Я использую наш веб-сертификат SSL, и в настоящее время я использую X509Certificate для цифровой подписи XML, и он отлично работает.
Я также попросил кого-то еще попробовать это из другого магазина, и они получают ту же ошибку. Есть ли задокументированная проблема с методами расшифровки X509? В приведенном ниже тестовом коде я отправляю XML на другую веб-страницу, которая пытается расшифровать XML. Чего я не понимаю, так это того, как может работать метод DecryptDocument(), если он даже не проверяет, встроен ли открытый ключ. Это проблема? Если да, то как мне убедиться, что он встроен в XML? Любая помощь приветствуется. Спасибо!
Private Function EncryptXml(ByVal xmlDoc As XmlDocument, ByVal Cert As X509Certificates.X509Certificate2) As XmlDocument
Dim dataNodes As XmlNodeList = xmlDoc.SelectNodes("Agency")
If dataNodes.Count <> 1 Then
Return Nothing
End If
Dim elementToEncrypt As XmlElement = CType(xmlDoc.GetElementsByTagName("Agency")(0), XmlElement)
Dim eXml As New EncryptedXml()
Dim Key As RSACryptoServiceProvider = CType(Cert.PrivateKey, RSACryptoServiceProvider)
Dim edElement As EncryptedData = eXml.Encrypt(elementToEncrypt, Cert)
EncryptedXml.ReplaceElement(elementToEncrypt, edElement, False)
Return xmlDoc
End Function
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
If Request.Form("hdnSignedXML") IsNot Nothing Then
Dim strXML As String = Request.Form("hdnSignedXML")
Dim xmlDoc As New XmlDocument
xmlDoc.LoadXml(strXML)
xmlDoc.PreserveWhitespace = True
Response.ContentType = "text/plain"
Response.Write(strXML)
Dim exml As New Xml.EncryptedXml(xmlDoc)
exml.DecryptDocument()
xmlDoc.Save("C:/inetpub/TestExampleDecrypted.xml")
Response.End()
End If
End Sub
jP