【问题标题】:How to decrypt raw soap response encrypted with x509如何解密用 x509 加密的原始肥皂响应
【发布时间】:2014-01-11 15:43:33
【问题描述】:

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

我们有两个不同的证书给第三方提供商

  1. 预生产证书
  2. 生产证书

我们实现了一个继承自SoapInputFilterWebServiceResponseLogger,它作为InputFilter 添加到Pipeline。在使用预生产证书时,这可以很好地记录响应。但是,当我们切换到生产并使用生产证书时,不会记录响应。

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

我试过谷歌搜索,想知道我们是否可以解密 fiddler 中的响应,我们有正确的证书,所以我认为这是可能的。如果没有提琴手,是否已经存在可以让我解密肥皂响应的工具?

【问题讨论】:

  • 我不认为你会找到一个工具,因为这将有助于中间人攻击,即使你有证书。也许你可以更好地解释你的问题。你的意思是“它没有记录?”。
  • 我们有一个记录请求和响应的输入过滤器,envolope.OuterXML 属性存储在我们的本地数据库中,用于请求和响应,但存储在响应中的数据似乎只是 NULL就好像当我们使用生产证书时输入过滤器从未真正被命中一样。

标签: c# web-services encryption x509 wse


【解决方案1】:

终于有时间发布我找到的解决方案,以防其他人遇到这个问题:)

我设法在 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();
}

【讨论】:

  • 如此令人沮丧的 msdn 以至于示例没有出现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多