「Web 服務安全」預設配置
在執行時期,「Web 服務安全」(WS-Security) 配置是對 WS-Security 原則的補充。 WS-Security 配置遵循 CXF 名稱/值配對樣式,且保留 CXF 內容名稱。 有些內容有預設值,有些內容沒有。
在 server.xml 檔中,WebSphere® Application Server Liberty 提供適用於所有服務的伺服器層次配置。 這個配置稱為預設 WS-Security 配置。
server.xml 檔有兩個預設的 WS-Security 配置:一個用於用戶端應用程式,一個用於提供者應用程式。 在 server.xml 檔中,不存在任何其他 WS-Security 配置。 如果您的應用程式需要有別於預設配置的自訂 WS-Security 配置,您必須以程式設計方式進行配置。
<wsSecurityClient id="default"
ws-security.username="user2"
ws-security.password="security">
<signatureProperties org.apache.ws.security.crypto.merlin.keystore.type="jks"
org.apache.ws.security.crypto.merlin.keystore.password="LibertyX509Client"
org.apache.ws.security.crypto.merlin.keystore.alias="x509ClientCert"
org.apache.ws.security.crypto.merlin.file="${server.config.dir}/x509ClientDefault.jks"/>
</wsSecurityClient>
<wsSecurityProvider id="default"
ws-security.username="user2">
<encryptionProperties org.apache.ws.security.crypto.merlin.keystore.type="jks"
org.apache.ws.security.crypto.merlin.keystore.password="LibertyX509Server"
org.apache.ws.security.crypto.merlin.keystore.alias="x509ServerCert"
org.apache.ws.security.crypto.merlin.file="${server.config.dir}/x509ServerDefault.jks"/>
</wsSecurityProvider>
Liberty/CXF 內容 | 預設值 |
---|---|
ws-security.username | none |
ws-security.password | none |
ws-security.signature.username | none |
ws-security.encryption.username | none |
Liberty 內容 | CXF 內容 | 預設值 |
---|---|---|
ws-security.callback-handler | none | |
<signatureProperties> | ws-security.signature.properties | none |
<encryptionProperties> | ws-security.encryption.properties | none |
<signatureProperties org.apache.ws.security.crypto.merlin.keystore.type="jks"
org.apache.ws.security.crypto.merlin.keystore.password="LibertyX509Client"
org.apache.ws.security.crypto.merlin.keystore.alias="x509ClientDefault"
org.apache.ws.security.crypto.merlin.file="${server.config.dir}/x509ClientDefault.jks">
</signatureProperties>
Liberty/CXF 內容 | 預設值 |
---|---|
org.apache.ws.security.crypto.provider | org.apache.ws.security.components. |
org.apache.ws.security.crypto. |
預設為已安裝的提供者 |
org.apache.ws.security.crypto. |
預設為金鑰儲存庫提供者 |
org.apache.ws.security.crypto. |
none |
Liberty/CXF 內容 | 預設值 |
---|---|
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
Liberty 內容 | 預設值 |
---|---|
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
org.apache.ws.security.crypto. |
none |
Liberty/CXF 內容 | 預設值 |
---|---|
ws-security.enable.nonce.cache | true |
ws-security.cache.config.file | none |
Liberty 內容 | CXF 內容 | 預設值 |
---|---|---|
callerToken | none | none |
配置其他內容
在 server.xml 檔中,您可以在預設 WS-Security 配置中指定任何其他內容。
<wsSecurityProvider id="default"
<signatureProperties ... />
<encryptionProperties ... />
ws-security.cache.config.file = "${server.config.dir}/resources/ws-security/new_cxf-ehcache.xml"
</wsSecurityProvider>
<wsSecurityClient id="default"
<signatureProperties ... />
<encryptionProperties ... />
ws-security.username-token.always.encrypted="false"
</wsSecurityClient>
配置快取
maxEntriesLocalHeap="5000"
timeToIdleSeconds="3600"
timeToLiveSeconds="3600"
overflowToDisk="true"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
如果要修改預設快取設定,您可以提供 ehCache 配置 XML 檔。 請利用 ws-security.cache.config.file 自訂內容來指定其自訂內容有別於預設值的檔名。 您必須將這個檔案放在伺服器設定檔中的某處。 您可以從下列位置找到其他快取設定配置檔範例:http://svn.apache.org/viewvc/cxf/trunk/rt/ws/security/src/main/resources/cxf-ehcache.xml?view=markup。
配置更強的簽章演算法
由於 SHA1 簽章演算法很弱,「國家標準與技術機構 (NIST)」建議您使用更強的簽章演算法。
- RSA-SHA-256
- RSA-SHA-384
- RSA-SHA-512
- HMAC-SHA-256
- HMAC-SHA-384
- HMAC-SHA-512
如果要配置 Liberty 中的 WS-Security 來支援更強的簽章演算法,您可以利用 signatureAlgorithm 屬性,在 server.xml 檔的 <signatureProperties> 元素內定義所需要的演算法。 signatureAlgorithm 屬性的有效值有 sha256、sha384 和 sha512。 比方說,如果您指定 sha512 作為 signatureAlgorithm 屬性值,在含有非對稱金鑰的簽章中所用的簽章演算法是 RSA-SHA-512,在含有對稱金鑰的簽章中所用的簽章演算法是 HMAC-SHA-512。
<wsSecurityClient id="default"
ws-security.password="security"
ws-security.username="user1"
ws-security.callback-handler="com.ibm.ws.wssecurity.example.cbh.CommonPasswordCallback"
ws-security.signature.username="soaprequester">
<signatureProperties
signatureAlgorithm="sha256"
org.apache.ws.security.crypto.merlin.keystore.type="jks"
org.apache.ws.security.crypto.merlin.keystore.password="client"
org.apache.ws.security.crypto.merlin.keystore.alias="soaprequester"
org.apache.ws.security.crypto.merlin.file="${server.config.dir}/dsig-sender.ks" />
</wsSecurityClient>
<wsSecurityProvider id="default"
ws-security.callback-handler="com.ibm.ws.wssecurity.example.cbh.CommonPasswordCallback"
ws-security.signature.username="soapprovider">
<signatureProperties
signatureAlgorithm="sha256"
org.apache.ws.security.crypto.merlin.keystore.type="jks"
org.apache.ws.security.crypto.merlin.keystore.password="server"
org.apache.ws.security.crypto.merlin.keystore.alias="soapprovider"
org.apache.ws.security.crypto.merlin.file="${server.config.dir}/dsig-receiver.ks" />
</wsSecurityProvider>