如何解密用x509加密的原始肥皂响应

时间:2013-12-23 12:09:34

标签: c# web-services encryption x509 wse

我们有一个与WSE的第三方提供商Web服务对话的批处理程序,对WSE Web服务的调用使用x509证书加密。

我们向第三方提供商提供了两种不同的证书

  1. 预生产证书
  2. 生产证书
  3. 我们已经实施了WebServiceResponseLogger继承自SoapInputFilter的{​​{1}},并将其作为Pipeline添加到InputFilter。使用预生产证书时,这可以很好地记录响应。但是,当我们切换到Production并使用生产证书时,不会记录响应。

    现在我们已经看到请求和响应通过fiddler,所以我们知道实际上出现了响应,问题是我们在fiddler中看到的响应是原始响应。

    我试过谷歌试图弄清楚我们是否可以在小提琴手中解密回复,我们有正确的证书,所以我认为这是可能的。如果没有fiddler,是否已存在允许我解密soap响应的工具?

1 个答案:

答案 0 :(得分:3)

最后找到了我发现的解决方案,以防其他人遇到此问题:)

我设法在MSDN上找到一个link,让我走上了正确的轨道并构建了以下控制台程序,该程序成功地解密了我从小提琴会话中得到的响应。

我安装了WSE 2.0 NuGet包

try
{
    // http://msdn.microsoft.com/en-us/library/aa529137.aspx
    XmlDocument response = new XmlDocument();
    response.Load("Response.xml");
    var encryptedKeyElement = response.GetElementsByTagName("xenc:EncryptedKey")[0] as XmlElement;
    var encryptedDataElement = response.GetElementsByTagName("xenc:EncryptedData")[0] as XmlElement;

    EncryptedKey encryptedKey = new EncryptedKey(encryptedKeyElement);
    EncryptedData data = new EncryptedData(encryptedDataElement, encryptedKey);

    var decryptedData = data.Decrypt();
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
    Console.WriteLine("Press any key to exit");
    Console.Read();
}