X509 Сертификация шифрования / дешифрования - PullRequest
7 голосов
/ 29 мая 2009

Я только начинаю изучать безопасность XML. У нас есть VS-2005 и ASP.Net 2.0. Я хочу отправить XML на внешний URL, и он должен быть зашифрован. Я делаю именно то, что делают статьи MSDN ms229744 & ms229943 , но когда я выполняю метод DecryptDocument (), я получаю «Невозможно получить ключ расшифровки». Я использую наш веб-сертификат SSL, и в настоящее время я использую сертификат X509 для цифровой подписи 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

Jp

1 Ответ

0 голосов
/ 01 сентября 2011

Скорее всего, ваш веб-процесс не может получить доступ к закрытому ключу. Однажды я столкнулся с тем же самым и опубликовал ответ в этом пункте:

Установить разрешение на чтение для сертификата из командной строки

Если у вас все еще есть проблемы для наших процедур шифрования, мы ссылаемся на http://msdn.microsoft.com/en-us/magazine/cc163454.aspx

...