2009-05-29 16 views
7

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

Odpowiedz