7

我刚刚开始学习 XML 安全性。我们有 VS-2005 和 ASP.Net 2.0。我想将 XML 发送到外部 URL,并且需要对其进行加密。我正在做 MSDN 文章ms229744ms229943正在做的事情,但是在执行 DecryptDocument() 方法时,我不断收到“无法检索解密密钥”。我正在使用我们的 SSL 网络证书,我目前使用 X509Certificate 对 XML 进行数字签名,它工作正常。

我还要求其他人从不同的商店尝试这个,他们得到了同样的错误。X509 解密方法是否存在记录在案的问题?在下面的测试代码中,我将 XML 发布到另一个试图解密 XML 的网页。我不明白的是,如果 DecryptDocument() 方法甚至不检查是否嵌入了公钥,它是如何工作的。这是问题吗?如果是这样,我如何检查以确保它嵌入在 XML 中?任何帮助表示赞赏。谢谢!

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

J.P

4

1 回答 1

0

很有可能,您的 Web 进程无法访问私钥。我曾经遇到过同样的事情,并在此项目中发布了答案:

从命令行设置证书的读取权限

如果您仍然有问题,对于我们的加密例程,我们参考了http://msdn.microsoft.com/en-us/magazine/cc163454.aspx

于 2011-09-01T19:20:01.370 回答