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