XML セキュリティを学び始めたばかりです。VS-2005 と ASP.Net 2.0 があります。XML を外部 URL に送信したいのですが、暗号化する必要があります。MSDN の記事ms229744とms229943が行っていることを正確に行っていますが、DecryptDocument() メソッドを実行すると、「復号化キーを取得できません」というメッセージが表示され続けます。私は SSL Web 証明書を使用しています。現在、X509Certificate を使用して XML にデジタル署名していますが、問題なく動作しています。
また、他の人に別のショップからこれを試すように依頼しましたが、同じエラーが発生しています. X509 復号化方法に関する文書化された問題はありますか? 以下のテスト コードでは、XML を復号化しようとしている別の Web ページに 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