Właśnie zaczynam uczyć się bezpieczeństwa XML. Mamy VS-2005 & ASP.Net 2.0. Chcę wysłać XML do zewnętrznego adresu URL i trzeba go zaszyfrować. Robię dokładnie to, co robią artykuły MSDN ms229744 & ms229943, ale kiedy wykonuję metodę DecryptDocument(), ciągle otrzymuję komunikat "Nie można pobrać klucza deszyfrującego". Korzystam z naszego certyfikatu SSL, a obecnie używam certyfikatu X509Certificate do cyfrowego podpisywania XML i działa dobrze.X509Certyfikacja szyfrowanie/odszyfrowywanie
Poprosiłem też kogoś innego, aby wypróbował to w innym sklepie i otrzymali ten sam błąd. Czy istnieje udokumentowany problem z metodami deszyfrowania X509? W poniższym kodzie testowym umieszczam kod XML na innej stronie internetowej, która próbuje odszyfrować XML. Czego nie rozumiem, to jak metoda DecryptDocument() może działać, nawet jeśli nie sprawdza, czy klucz publiczny jest osadzony. Czy to jest problem? Jeśli tak, to w jaki sposób sprawdzić, czy jest osadzony w pliku XML? Każda pomoc jest doceniana. Dzięki!
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