2009-05-29 52 views
7

Tôi chỉ mới bắt đầu tìm hiểu về bảo mật XML. Chúng tôi có VS-2005 & ASP.Net 2.0. Tôi muốn gửi XML đến một URL bên ngoài và nó cần phải được mã hóa. Tôi đang làm chính xác những gì các bài viết MSDN ms229744 & ms229943 đang làm, nhưng khi thực hiện phương thức DecryptDocument(), tôi tiếp tục nhận được "Không thể truy xuất khóa giải mã." Tôi đang sử dụng chứng chỉ web SSL của chúng tôi và hiện tại tôi đang sử dụng X509Certificate để ký kỹ thuật số XML và nó hoạt động tốt.X509Xóa mã hóa/giải mã chứng nhận

Tôi cũng đã yêu cầu người khác thử cái này từ một cửa hàng khác và họ cũng gặp lỗi tương tự. Có một vấn đề với các phương pháp giải mã X509 không? Trong mã thử nghiệm dưới đây, tôi đăng XML lên một trang web khác đang cố gắng giải mã XML. Những gì tôi không hiểu là phương thức DecryptDocument() có thể hoạt động như thế nào nếu nó thậm chí không kiểm tra xem khóa công khai có được nhúng hay không. Đây có phải là vấn đề không? Nếu vậy, làm cách nào để kiểm tra để đảm bảo nó được nhúng trong XML? Bất kỳ trợ giúp được đánh giá cao. Cảm ơn!

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

Trả lời

Các vấn đề liên quan