2009-05-29 7 views
7

Je commence tout juste à apprendre la sécurité XML. Nous avons VS-2005 & ASP.Net 2.0. Je veux envoyer du XML à une URL externe et il doit être crypté. Je fais exactement ce que font les articles MSDN ms229744 & ms229943, mais lorsque je fais la méthode DecryptDocument(), je reçois toujours le message "Impossible de récupérer la clé de déchiffrement". J'utilise notre certificat Web SSL, et j'utilise actuellement X509Certificate pour signer numériquement le XML et cela fonctionne très bien.X509Certificate cryptage/décryptage

J'ai également demandé à quelqu'un d'autre d'essayer ceci d'un magasin différent et ils obtiennent la même erreur. Y a-t-il un problème documenté avec les méthodes de décryptage X509? Dans le code de test ci-dessous, je poste le code XML sur une autre page Web qui tente de déchiffrer le code XML. Ce que je ne comprends pas, c'est comment la méthode DecryptDocument() peut fonctionner si elle ne vérifie même pas si la clé publique est intégrée. Est-ce le problème? Si oui, comment puis-je vérifier si elle est intégrée dans le XML? Toute aide est appréciée. Merci!

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

Répondre