我们有一个批处理程序,它可以与第三方提供商使用WSE的web服务进行对话,对WSE web服务的调用使用x509证书进行加密。
我们有两个不同的证书给第三方提供商
- 预生产证书
- 生产证书
我们实现了一个继承自SoapInputFilter
的WebServiceResponseLogger
,它作为InputFilter
添加到Pipeline
中。当使用预生产证书时,这可以很好地记录响应。但是,当我们切换到生产并使用生产证书时,不会记录响应。
现在我们已经通过fiddler看到了请求和响应,所以我们知道实际上出现了响应,问题是我们在fiddler中看到的响应是原始响应。
我试过在谷歌上搜索,试图弄清楚我们是否可以解密fiddler中的响应,我们有正确的证书,所以我认为这是可能的。如果没有fiddler,是否已经存在允许我解密soap响应的工具?
终于抽出时间发布了我找到的解决方案,以防其他人遇到这个问题:)
我设法在MSDN上找到了一个链接,使我走上了正轨,并构建了以下控制台程序,成功地解密了我从我们的fiddler会话中得到的响应。
我安装了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();
}