wse說談(2)——策略,匿名使用者策略
在wse檢視工具中,其中的兩個選項卡:策略(Policy)和安全(Secury)
1 策略是對安全的控制
2 安全選項卡中可以設定對於安全控制的策略元件的設定,例如使用者令牌管理,證書管理
策略分兩種,服務端和客戶端。在新增策略檔案時,驗證項(使用者的授權)可以有四種選擇:
Anonymous(匿名使用者):這種型別不要求有客戶憑證
Username(使用者):這種型別要求客戶端傳遞一個使用者令牌憑證,憑證中包含使用者名稱和使用者密碼
Certifacate(證書):這種型別要求客戶端傳遞一個證書令牌,令牌中包含x.509證書
Windows(windows):這種型別要求客戶傳遞kerberos令牌,其中包括一個windows標識。
對soap訊息進行保護的型別也有四種:
None(無):由SSL傳輸提供soap訊息的保護。WSE不強求
Sign-Only(只簽名):只對soap訊息進行簽名
Sign and Encrypt(簽名並加密):對soap訊息進行簽名且加密
Sign,Encrypt,Encrypt Signature(簽名,加密,加密簽名):對soap訊息進行簽名,且對soap包體和簽名進行加密。
在程式中以MessageProtectionOrder列舉來表示:
·EncryptBeforeSign:在簽名前加密soap訊息
·SignBeforeEncrypt:加密前要簽名,但簽名不加密
·SignBeforeEncryptAndEncryptSignature:加密前要簽名,然後簽名也要加密
Wse配置工具是對config檔案的介面操作工具,在xml中,屬性值與這個列舉值相同:
messageProtectionOrder=“SignBeforeEncrypt“
現在說說策略斷言(Policy Assertion)
策略斷言定義了一組在伺服器和客戶進行soap訊息交換的要求。例如一個策略斷言可能會指定一個用來對在伺服器和客戶之間進行的soap訊息交換進行加密和簽名的令牌型別。為了指定安全要求,新增為策略斷言新增一個或多個turnkey或自定義的安全斷言。策略斷言,通過xml元素來宣告,例如像下邊這個例子中的<anonymousForCertificateSecurity>元素。
<anonymousForCertificateSecurity>
<serviceToken></serviceToken>
<protection>
<reques/>
</protection>
</anonymousForCertificateSecurity>
(一)不啟用策略
不啟用策略時,就是不配置WSE的Policy部分。只是對ws啟用WSE增強。這個很簡單。
·服務端:在可視工具上的常規選項卡上勾選2項(如果不是網站專案,則不能新增soap protocol factory)
·客戶端(例如類庫專案):在可視工具常規選項卡上勾選1項,這項的主要作用就是新增對Microsoft.Web.Services3的引用。
在客戶端使用時,使用帶WSE後輟的代理類例項來實現對服務的請求:
FirstInstance.WebServiceWse client = new FirstInstance.WebServiceWse();
(二)啟用策略之匿名使用者
匿名使用者anonymous不要求有客戶憑證,而對訊息的保護如果要有簽名或加密,須啟用證書,有關證書的相關內容請見:
http://www.cnblogs.com/jams742003/archive/2010/04/12/1710124.html
http://www.cnblogs.com/jams742003/archive/2010/04/20/1716253.html
這裡啟用匿名使用者:
·服務端策略選項卡上新增服務端策略,新增完畢後,在服務上以修飾標籤的形式啟用策略。
·客戶端啟用相同的策略,但策略名不同。在應用時,可在程式碼中啟用策略
·在訊息保護項有3項可選擇,所以這裡需要一張證書
服務端:
1 策略選項卡——新增策略——策略名(ServerPolicy)——匿名——簽名——選擇證書——完成
2 在服務類新增修飾以啟用策略
[Microsoft.Web.Services3.Policy(“ServerPolicy”)]
public class WebService : System.Web.Services.WebService
客戶端:
1策略選項卡——新增策略——策略名(ClientPolicy)——匿名——簽名——選擇證書——完成
2 在程式碼中啟用策略:
client.SetPolicy(“ClientPolicy”);
這裡給出一段啟用匿名使用者策略且對訊息進行簽名的soap包部分:
<Signature
xmlns=“http://www.w3.org/2000/09/xmldsig#“>
<SignedInfo>
<ds:CanonicalizationMethod
Algorithm=“http://www.w3.org/2001/10/xml-exc-c14n#“
xmlns:ds=“http://www.w3.org/2000/09/xmldsig#“ />
<SignatureMethod
Algorithm=“http://www.w3.org/2000/09/xmldsig#hmac-sha1“ />
<Reference URI=“#Id-c7c03d5c-6e4b-493e-b3e8-c50ba9c27088“>
<Transforms>
<Transform Algorithm=“http://www.w3.org/2001/10/xml-exc-c14n#“ />
</Transforms>
<DigestMethod Algorithm=“http://www.w3.org/2000/09/xmldsig#sha1“ />
<DigestValue>1tzz6zotjDSBNQf0UhyrqfA2G6I=</DigestValue>
……
在匿名使用者策略下,訊息保護可選擇3種方式:
Sign-Only(只簽名)
Sign and Encrypt(簽名並加密)
Sign,Encrypt,Encrypt Signature
在上段例子中用的是第一種。在包中的包體部分可以看到:
<soap:Body>
<HelloWorld xmlns=”http://tempuri.org/“>
<strName>Songjiang</strName>
</HelloWorld>
</soap:Body>
Web方法傳入引數是明文形式。這個部分由策略斷言設定,在原設定中,請求部分的包體加密屬性為false:
encryptBody=“false“
現在改為要求加密包體,然後看包體中的引數部分:
<soap:Body>
<xenc>
<xenc:EncryptionMethod
Algorithm=“http://www.w3.org/2001/04/xmlenc#aes256-cbc“ />
<KeyInfo xmlns=“http://www.w3.org/2000/09/xmldsig#“>
<wsse:SecurityTokenReference>
<wsse:Reference
URI=“#SecurityToken-2bf9dfb3-9f7d-42ac-9bfc-e12919fb2202“
ValueType=“http://schemas.xmlsoap.org/ws/2005/02/sc/dk“ />
</wsse:SecurityTokenReference>
</KeyInfo>
<xenc:CipherData>
<xenc:CipherValue>
Ig7MdF2oZZS625taru1b/RwH5IDePxBUwIWDw
0Lw2Y/E8HetOG64sdpX6J7bZeLXf8XWA3TmyC
gCmqBgQJn/UD73ZlVdAufVv3pzTAeew62GcnH
Esj3AZOYNcDI90wVZUZ4Dm7LMn4T9K6SBJO7qgw==
</xenc:CipherValue>
</xenc:CipherData>
</xenc:EncryptedData>
</soap:Body>
可以看到包體中的明文已經變成了密文CipherValue
從這段程式碼來看,它的加密方法是AES,256位CBC格式。關於更多對稱加密的內容可見:
http://www.cnblogs.com/jams742003/archive/2010/04/07/1706471.html
對於soap訊息的加密保護可在策略斷言中設定,下面給出一段完整的策略斷言:
<policy name=“ClientPolicy“>
<anonymousForCertificateSecurity
establishSecurityContext=“false“
renewExpiredSecurityContext=“true“
requireSignatureConfirmation=“false“
messageProtectionOrder=“SignBeforeEncrypt“
requireDerivedKeys=“true“ ttlInSeconds=“300“>
<serviceToken>
<x509 storeLocation=“CurrentUser“
storeName=“AddressBook“
findValue=“CN=soapEncrypt“
findType=“FindBySubjectDistinguishedName“ />
</serviceToken>
<protection>
<request
signatureOptions=“IncludeAddressing,IncludeTimestamp,IncludeSoapBody“
encryptBody=“true“ />
<response
signatureOptions=“IncludeAddressing,IncludeTimestamp,IncludeSoapBody“
encryptBody=“false“ />
<fault
signatureOptions=“IncludeAddressing,IncludeTimestamp,IncludeSoapBody“
encryptBody=“false“ />
</protection>
</anonymousForCertificateSecurity>
</policy>
策略斷言可以使用 turnkey斷言或自定義。
turnkey安全斷言的作用:
·訊息級別或傳輸級別的安全
·證明客戶或服務或兩者的安全憑證
·保護soap訊息的安全憑證
它有很多種類,下邊列舉一下:
·<anonymousForCertificateSecurity>
·<kerberosSecurity>
·<mutualCertificate10>
·<mutualCertificate11>
·<usernameOverTransportSecurity>
·<usernameForCertificateSecurity>
相關文章
- wse說談(1)——簡介,下載與安裝
- 【雜談】策略模式模式
- 使用者備份策略和使用者密碼策略密碼
- 談談API版本控制的策略API
- 淺談策略模式(strategy)模式
- 談談財務資料管理策略
- 淺談線上廣告分配策略
- 2、安全策略
- 談談系統密碼儲存策略密碼
- 瀏覽器安全策略說之內容安全策略CSP瀏覽器
- 淺談撞庫防禦策略
- 亨登談判策略(轉載)
- Linux禦敵策略談(轉)Linux
- TX失敗策略2
- ORACLE備份策略(2)Oracle
- 也談談同源策略和跨域問題跨域
- oracle使用者口令管理策略Oracle
- 細說 Azure Storage 的冗餘策略
- 設計模式漫談之策略模式設計模式
- 淺談Redis安全策略佑葉Redis
- 再談量化策略失效的問題
- 使用者授權,策略的使用
- 從 gRPC 的重試策略說起RPC
- OkHttp3.0解析——談談內部的快取策略HTTP快取
- APP流失使用者的高效召回策略APP
- TSM for Oracle備份指令碼及策略說明Oracle指令碼
- 淺談電商養成類遊戲選型策略遊戲
- 雜談!設計師表達溝通策略
- 域組策略與本地組策略
- 淺析路由策略與策略路由路由
- pm2 重啟策略(restart strategies)REST
- javascript設計模式 之 2 策略模式JavaScript設計模式
- Ascend2:哪些SEO策略最有效
- WAF開放規則定義權:專家策略+使用者自定義策略=Web安全Web
- Oracle 10g 11g密碼策略 使用者口令 大小寫敏感 說明Oracle 10g密碼
- 談談HTTPS安全認證,抓包與反抓包策略HTTP
- IdentityServer4實戰 - 談談 JWT Token 的安全策略IDEServerJWT
- 談談構建有效資料治理策略的10條建議