2009-05-29 5 views
7

Sto appena iniziando a imparare la sicurezza XML. Abbiamo VS-2005 & ASP.Net 2.0. Voglio inviare XML a un URL esterno e deve essere crittografato. Sto facendo esattamente ciò che stanno facendo gli articoli MSDN ms229744 & ms229943, ma quando faccio il metodo DecryptDocument(), continuo a ricevere "Impossibile recuperare la chiave di decodifica". Sto usando il nostro certificato Web SSL e attualmente utilizzo X509Certificate per firmare digitalmente l'XML e funziona perfettamente.X509Certificazione/decifratura di certificati

Ho anche chiesto a qualcun altro di provarlo da un altro negozio e hanno lo stesso errore. C'è un problema documentato con i metodi di decrittografia X509? Nel seguente codice di test, sto postando l'XML a un'altra pagina Web che sta tentando di decodificare l'XML. Quello che non capisco è come può funzionare il metodo DecryptDocument() se non controlla nemmeno se la chiave pubblica è incorporata. È questo il problema? In tal caso, come faccio a verificare che sia incorporato nell'XML? Qualsiasi aiuto è apprezzato. Grazie!

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

risposta