資料加密演算法指定資料加密方法的演算法統一資源識別碼 (URI)。 此演算法會以固定大小、多個八位元組區塊來加密及解密資料。
依預設, Java™ Cryptography Extension (JCE) 隨附有限或有限強度的密碼。 如果要使用 192 位元和 256 位元的進階加密標準 (AES) 加密演算法,您必須套用無限適用範圍的原則檔。
對於 AES256-cbc 和 AES192-cbc 演算法,您必須從下列網站下載未限定的 Java™ Cryptography Extension (JCE) 原則檔:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
金鑰加密演算法指定金鑰加密方法的演算法統一資源識別碼 (URI)。 演算法代表指定用於加密及解密金鑰的公開金鑰加密演算法。
依預設,在加密作業中, RSA_OAEP 演算法會使用 SHA1 訊息摘要演算法來計算訊息摘要。 您可以選擇性地指定金鑰加密演算法內容來使用 SHA256 或 SHA512 訊息摘要演算法。 內容名稱為
com.ibm.wsspi.wssecurity.enc.rsaoaep.DigestMethod
。 內容值是摘要方法的下列 URI 之一:
-
http://www.w3.org/2001/04/xmlenc#sha256
-
http://www.w3.org/2001/04/xmlenc#sha512
依預設, RSA_OAEP 演算法會對 OAEPParams 的選用編碼八位元組字串使用空值字串。 您可以指定金鑰加密演算法內容來提供明確的編碼八進位字串。 對於內容名稱,您可以指定
com.ibm.wsspi.wssecurity.enc.rsaoaep.OAEPparams
。 內容值是八進位字串的基本 64 編碼值。
重要事項:
您只能在產生器端設定這些摘要方法及 OAEPParams 內容。 在消費端,這些內容是從送入的 SOAP 訊息中讀取。
對於 KW_AES256 及 KW_AES192 金鑰加密演算法,您必須從下列網站下載未限定的 JCE 原則檔案:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
重要事項:
您的原產地可能對加密軟體的匯入、佔有、使用或重新匯出至另一個國家/地區有限制。 在下載或使用未限定的原則檔之前,您必須先查核您所在國家或地區的法令、規章,以及其對於加密軟體的輸入、佔有、使用或重新輸出等方面的政策,來判定是否允許這麼做。
若要完成解密配置,您必須指定演算法統一資源識別碼 (URI) 及其用法類型。 如果 URI 用於多個用法類型,則您必須定義每一個用法類型的 URI。 WebSphere® Application Server 支援下列解密用法類型:
表 1. 解密用法類型
。
WebSphere Application Server支援這些解密類型。
如果要配置解密和解密組件演算法,請使用 WSSDecryptPart API 和 WSSDecryptPart API ,或使用管理主控台來配置原則集。
附註:
原則集不支援對稱金鑰加密。 如果您使用 WSS API 來進行對稱金鑰加密,您將無法與使用原則集的 Web 服務端點交互作業。
如果您使用 WSS API ,當用戶端解密 SOAP 訊息時, WSSDecryption 和 WSSDecryptPart API 會指定使用哪些演算法方法。
-
使用 WSSDecryption API 來配置資料加密演算法及金鑰加密演算法方法。
-
使用 WSSDecryptPart API 來配置轉換演算法方法。
程序
-
使用 WSSDecryption API ,新增必要的資料加密演算法。
資料加密演算法用於加密或解密 SOAP 訊息的組件。 資料解密演算法指定資料加密方法的演算法統一資源識別碼 (URI)。
預設資料加密演算法是 AES 128。 資料加密名稱是 AES128,資料加密演算法的 URI 是 http://www.w3.org/2001/04/xmlenc#aes128-cbc。 WebSphere Application Server 支援下列預先配置的資料解密演算法:
-
AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
AES 128 演算法是預設資料演算法方法。
-
AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
若要使用此 AES 256-cbc 演算法,您必須從下列網站下載未限定的 Java Cryptography Extension (JCE) 原則檔:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
-
AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
為了確保配置的應用程式與基本安全設定檔 (BSP) 的互通性,請勿使用 192 位元金鑰加密演算法。
若要使用此 AES 192-cbc 演算法,您必須從下列網站下載無限制 Java Cryptography Extension (JCE) 原則檔:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
-
TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#tripledes-cbc
-
視需要變更 WSSEncryption API 方法,以指定另一個資料加密演算法。
例如,您可以新增下列程式碼,以從預設 AES 128 演算法變更為「三重 DES 演算法」:
dec.addAllowedKeyEncryptionMethod(WSSDecryption.TRIPLE_DES);
-
使用 WSSDecryption API ,新增必要的金鑰加密演算法。
金鑰加密演算法用於加密 SOAP 訊息內用於加密訊息組件的金鑰。 如果不需要用來加密資料的金鑰,則必須指定 WSSDecryption.encryptKey (false)。
您為消費者端選取的金鑰加密演算法必須符合您為產生者端選取的金鑰加密方法。
預設金鑰加密演算法值是金鑰包裝 RSA_OAEP。 金鑰加密名稱是 KW_RSA_OAEP ,金鑰加密演算法的 URI 是 http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p。 WebSphere Application Server 支援下列預先配置的金鑰加密演算法:
-
KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
-
KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
若要使用此金鑰包裝 AES 192 演算法,您必須從下列網站下載未限制的 Java Cryptography Extension (JCE) 原則檔:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
限制:
如果您想要已配置的應用程式符合「基本安全設定檔 (BSP)」,請不要使用 192 位元金鑰加密演算法。
-
KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
若要使用此金鑰包裝 AES 256-cbc 演算法,您必須從下列網站下載未限定的 Java Cryptography Extension (JCE) 原則檔:
http://www.ibm.com/devdeveloperworks/java/jdk/security/index.html
。
-
KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p。
KW_RSA_OAEP 演算法是預設金鑰演算法方法。
使用 Software Development Kit (SDK) 1.4 版執行時,支援的金鑰傳輸演算法清單不包括此演算法。 當搭配 SDK 1.5 版來執行時,這個演算法會出現在支援的金鑰傳輸演算法清單中。 如需相關資訊,請參閱
http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
-
KW_RSA_15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
-
KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
附註:
對於 Web 服務安全交談, WSSEncryption API 可能會指定其他金鑰相關資訊,例如:
-
algorithmName
-
keyLength
-
根據需要,使用 WSSDecryption API 方法來變更為其他金鑰加密演算法。
例如,您可以新增下列程式碼,從預設金鑰加密演算法 KW_RSA_OAEP 變更為 TRIPLE_DES 演算法:
dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);
-
使用 WSSDecryptPart API ,視需要新增轉換演算法。
沒有預設轉換演算法。 不過, WebSphere Application Server 提供可新增的預先配置解密組件
WSSDecryptPart.TRANSFORM_ATTACHMENT_CIPHERTEXT
。
結果
如果有錯誤狀況,則會提供 WSSException。 如果成功, API 會呼叫
WSSConsumerContext.process()
方法,會驗證 WS-Security 標頭,現在會使用「Web 服務安全」來保護 SOAP 訊息的安全。
下列範例提供範例 WSS API 程式碼,用來解密內文內容,以及從預設值變更資料加密和金鑰加密演算法:
// Get the message context
Object msgcontext = getMessageContext();
// Generate the WSSFactory instance
WSSFactory factory = WSSFactory.getInstance();
// Generate the WSSConsumingContext instance
WSSConsumingContext gencont = factory.newWSSConsumingContext();
// Generate the callback handler
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"alice",
"keypass".toCharArray(),
"CN=Alice, O=IBM, C=US");
// Generate WSSDecryption instance
WSSDecryption dec = factory.newWSSDecryption(X509Token.class,
callbackHandler);
// Set the candidates for the data encryption method
// DEFAULT : WSSDecryption.AES128
dec.addAllowedEncryptionMethod(WSSDecryption.AES128);
dec.addAllowedEncryptionMethod(WSSDecryption.AES192);
// Set the candidates for the key encryption method
// DEFAULT : WSSDecryption.KW_RSA_OAEP
dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);
// Add the WSSDecryption to WSSConsumingContext
concont.add(dec);
// Validate the WS-Security header
concont.process(msgcontext);