2009-05-29 20 views
7

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

Respuesta

Cuestiones relacionadas