2013-12-23 43 views
2

我們有一個批處理程序,它使用WSE與第三方提供程序Web服務進行通信,使用x509證書對WSE webservice的調用進行加密。如何解密使用x509加密的原始soap響應

我們有兩個不同的證書給第三方提供商

  1. 預生產證書
  2. 生產許可證

我們已經實施了WebServiceResponseLoggerSoapInputFilter繼承,這是加入Pipeline作爲InputFilter。這在使用預生產證書時做了一個很好的記錄響應。但是,當我們切換到生產並使用生產證書時,不會記錄該響應。

現在我們已經看到了請求和響應低谷提琴手,所以我們知道一個響應實際上出現了,問題是我們可以在提琴手中看到的響應是原始響應。

我試過Google試圖弄清楚,如果我們可以解密在提琴手的響應,我們有正確的證書,所以我認爲這將是可能的。如果不是提琴手,一個工具已經存在,這將允許我解密肥皂響應?

+0

我不認爲你會發現,作爲這個工具將幫助人在這方面的中間人攻擊,即使你有證書。也許你可以更好地解釋你的問題。 「你沒有登錄?」是什麼意思? –

+0

我們有一個記錄請求和響應的輸入過濾器,envolope.OuterXML屬性存儲在我們的本地數據庫中,用於請求和響應,但存儲在響應中的數據只是NULL,看起來好像inputfilter實際上從來沒有當我們使用生產證書時打。 – thmsn

回答

0

終於可以發佈我找到了解決辦法,萬一別人運行到這個問題:)

我設法找到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(); 
}