利用WSE 加密SOAP報文(6

來源:互聯網
上載者:User
加密 加密對外發送的報文

我已經修改了前面的GetXmlDocument方法,讓它可以使用由WSE實現的基於X.509非對稱式加密技術。加密回應報文,FindCertificateBySubjectString方法可以用來接收用戶端認證的公開備份,一個來自本地機器帳號的個人儲存室給的用戶端認證。這個認證然後被用來建立一個新的 X.509安全Token,這個Token將被加入到響應報文的SoapContext的安全Token集合裡。另外,在對稱式加密例子中引用的命名空間,你應該再加一個using指示附來引用一個Microsoft.WebServices.Security.X509命名空間。GetXmlDocument方法代碼如下:

//建立一個用於返回的簡單XML文檔

XmlDocument myDoc = new XmlDocument();

myDoc.InnerXml =

"<EncryptedResponse>This is sensitive data.</EncryptedResponse>";

"<EncryptedResponse>這裡是敏感性資料.</EncryptedResponse>";



//得到響應報文的SoapContext

SoapContext myContext = HttpSoapContext.ResponseContext;



//開啟並讀取本地機器帳號的個人認證儲存室

X509CertificateStore myStore =

X509CertificateStore.LocalMachineStore(

X509CertificateStore.MyStore);

myStore.OpenRead();



//尋找所有名為”我的認證”的認證,然後將所有匹配的認證添加到認證集合中

X509CertificateCollection myCerts =

myStore.FindCertificateBySubjectString("My Certificate");

X509Certificate myCert = null;



//尋找在集合中中的第一個認證

if (myCerts.Count > 0)

{

myCert = myCerts[0];

}



//確定我們有一個可以用於加密的認證

if (myCert == null || !myCert.SupportsDataEncryption)

{

throw new ApplicationException("Service is not able to

encrypt the response");



return null;

}

else

{

//使用有效認證來建立一個安全Token

X509SecurityToken myToken = new X509SecurityToken(myCert);

//WSE將使用這個標記來加密報文本文的

//WSE產生一個KeyInfo元素,用來請求用戶端上曾用於給報文解密的認證



EncryptedData myEncData = new EncryptedData(myToken);

//將已加密資料元素添加到響應報文的SoapContext上

myContext.Security.Elements.Add(myEncData);



return myDoc;

}

基於前面的方法,WSE管道產生了下面的有相應Security頭、密文和密鑰資訊的元素:

<?xml version="1.0" encoding="utf-8"?>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<soap:Header>

<wsu:Timestamp

xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">

<wsu:Created>2003-02-11T01:34:01Z</wsu:Created>

<wsu:Expires>2003-02-11T01:39:01Z</wsu:Expires>

</wsu:Timestamp>

<wsse:Security soap:mustUnderstand="1"

xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">

<xenc:EncryptedKey

Type="http://www.w3.org/2001/04/xmlenc#EncryptedKey"

xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

<xenc:EncryptionMethod

Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />

<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">

<wsse:SecurityTokenReference>

<wsse:KeyIdentifier ValueType="wsse:X509v3">

YmlKVwXYD8vuGuYliuIYdEAQQPw=

</wsse:KeyIdentifier>

</wsse:SecurityTokenReference>

</KeyInfo>

<xenc:CipherData>

<xenc:CipherValue>UJ64Addf3Fd59XsaQ=…</xenc:CipherValue>

</xenc:CipherData>

<xenc:ReferenceList>

<xenc:DataReference URI=

"#EncryptedContent-608eef8b-4104-4469-95b6-7cb4703cfa03" />

</xenc:ReferenceList>

</xenc:EncryptedKey>

</wsse:Security>

</soap:Header>

<soap:Body xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility"

wsu:Id="Id-70179c5b-4975-4932-9ecd-a58feb34b0d3">

<xenc:EncryptedData

Id="EncryptedContent-608eef8b-4104-4469-95b6-7cb4703cfa03"

Type="http://www.w3.org/2001/04/xmlenc#Content"

xmlns:xenc="http://www.w3.org/2001/04/xmlenc#">

<xenc:EncryptionMethod

Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />

<xenc:CipherData>

<xenc:CipherValue>

4o1b4befwBJu6tzuaygfrAaX0UGtaYKcw2klIbuZPjLi...z8i2ypHN4+w==

</xenc:CipherValue>

</xenc:CipherData>

</xenc:EncryptedData>

</soap:Body>

</soap:Envelope>

注意在這個已加密的報文裡面,由非對稱式加密過的EncryptedKey元素包含了用於給報文本文加密的對稱式加密密鑰。ReferenceList元素引用了報文本文的EncryptedData元素的Id屬性。雖然我在我的例子中沒這樣做,標記這個訊息以便能讓容器驗證寄件者其實是個不錯的想法。關於使用WSE來標記報文的詳細資料,看WS-Security Authentication and Digital Signatures with Web Services Enhancements


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。