利用WSE 加密SOAP報文 7

2021-04-17 00:43:59 字數 1860 閱讀 1461

給收到的報文解密

當收到乙個由x.509證書加密後的報文後,soapinputfilter會自動嘗試使用使用者金鑰儲存室的私有金鑰來進行解密,當然,這個需要告訴wse

執行時**可以找到這個證書的額外配置資訊。這個資訊由應用程式配置檔案的security

storelocation="currentuser"

verifytrust="true"

allowtestroot="false" />

在我的例子中,我將x509節點的storelocation屬性設為currentuser,假設證書在當前使用者的證書儲存室裡,當我使用了來自ca的受信任證書之後,我也將verifytrust設為true了。這些屬性還能夠用wse

的設定工具來修改。利用這些資訊,wse

能夠得到報文中證書的私有金鑰,還能用這個來給對稱性會話金鑰解密,解密後的內容到頭來還要給報文正文解密。

選擇用於解密的報文元素

wseencryption_topic8>當整個訊息正文由預設設定給加密後,wse

能被用來給soap

報文內的特定元素加密;唯一的問題是,在security頭元素那的元素不能被加密。你還可以加密巢狀的元素,

在這個例子服務中,我修改了getxmldocument方法用的x.509版本,用乙個基於x.509的安全token來同時給encryptedsubresponse和它的encryptedresponse父節點進行數位化加密,返回的xml文件如下:

回應報文的這裡沒有必要被加密

這裡是敏感資料.

為了加密乙個元素,它需要乙個wsu:id屬性,以便當xml被序列化後引用可以加到該節點上了。命名空間wsu被定義為:

為了完成這個,我將這個xml加到乙個新的xml文件,然後通過.net框架支援的microsoft xml文件物件模型(dom)給它新增乙個id屬性,此外還需要將配件system.xml加入到工程引用裡面,加上下面的話:

using system.xml;

using system.xml.serialization;

當我將多個id屬性加到巢狀的元素上後,我由encryptedsubresponse元素開始依次遍歷到它的父節點encryptedresponse,如下:

string myid = ;

//建立乙個用於返回xml的xml文件

xmldocument mydoc = new xmldocument();

mydoc.loadxml("" +

"回應報文的這裡沒有必要加密" +

"" +

"" +

"" +

"這裡是敏感資料. " +

"" +

"" +

"");

//得到encryptedsubresponse節點

xmlnode= mydoc.firstchild.lastchild.firstchild;

//向上遍歷元素,新增兩個id屬性

//向上保證內部的多數元素可以優先被加密

//否則我們會得到乙個異常

for (int i=0;i

假設我早就用我前面的邏輯得到了來自x.509證書的安全記號,我將這些引用新增到encrypteddata元素,如下:

//迴圈遍歷id值,將其新增到新的encrypteddata元素上

for (int i=0;i

//返回加密資料

return mydoc;

利用WSE 加密SOAP報文 5

解密收到的報文 不管是在客戶端還是在伺服器端,wse 總是在securityinputfilter實現報文解密的,由於對稱加密需要由公共金鑰派生出來的加密金鑰,你需要建立乙個securityinputfilter能夠呼叫的方法來得到這個對稱金鑰,然後你就能使用包含在encrypteddata中的金鑰...

soap報文略說

簡單說一下soap報文,有兩種版本的報文的報頭。soap 1 1 protocol與soap 1 2 protocol 分別對應的是 1.1 xmlns soap env 1.2 xmlns env env envelope 以下附帶乙個報文拼裝基類。當時寫的比較粗略沒有寫上解析響應報文的通用方法,...

oracle 解析soap報文XML報錯

ora 31011 xml parsing failed ora 19202 error occurred in xml processing 1 專案做和ebs的介面,ebs提供乙個webservice服務。在資料庫中訪問ebs的webservice 報文解析沒有問題 突然一天請求回來的xml檔案...