Estoy empezando a aprender seguridad XML. Tenemos VS-2005 & ASP.Net 2.0. Deseo enviar XML a una URL externa y necesita ser encriptado. Estoy haciendo exactamente lo que están haciendo los artículos de MSDN ms229744 & ms229943, pero al hacer el método DecryptDocument(), sigo obteniendo el mensaje "No se puede recuperar la clave de descifrado". Estoy usando nuestro certificado web SSL, y actualmente uso X509Certificate para firmar digitalmente el XML y funciona bien.X509Certificación/descifrado de certificado
También le pedí a alguien más que pruebe esto en una tienda diferente y están obteniendo el mismo error. ¿Hay algún problema documentado con los métodos de descifrado X509? En el siguiente código de prueba, estoy publicando el XML en otra página web que intenta descifrar el XML. Lo que no entiendo es cómo puede funcionar el método DecryptDocument() si ni siquiera comprueba si la clave pública está incrustada. ¿Este es el problema? Si es así, ¿cómo puedo verificar para asegurarme de que está incrustado en el XML? Cualquier ayuda es apreciada. ¡Gracias!
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