选择使用者绑定的解密方法
要配置客户机以便对客户机绑定进行响应解密,请指定客户机对 SOAP 消息进行解密时要使用的数据和变换算法方法。
准备工作
完成这些步骤前,请参阅 XML 加密信息以熟悉如何对 SOAP 消息进行加密和解密。
要完成解密配置以保护 SOAP 消息,必须完成下列任务:
- 配置对 SOAP 消息部件的解密操作。
- 指定解密方法。
可以使用 WSSDecryption 和 WSSDecryptPart API 配置解密方法。 也可以通过管理控制台配置解密方法来配置策略集。
有关此任务
某些与加密相关的定义基于 XML-Encryption 规范。 以下信息定义了一些与数据加密相关的术语:
- 数据加密方法算法
- 数据加密算法指定数据加密方法的算法统一资源标识 (URI)。 此算法以固定大小,多个八位字节块对数据进行加密和解密。
默认情况下,Java™ 加密扩展 (JCE) 附带受限或有限强度的密码。 要使用 192 位和 256 位高级加密标准 (AES) 加密算法,必须应用无限制的权限策略文件。
为了AES256-cbc和AES192-cbc算法,您必须从以下网站下载不受限制的 Java™ 加密扩展 (JCE) 策略文件: https://www.ibm.com/developerworks/java/jdk/security/index.html。
- 密钥加密方法算法
- 密钥加密算法指定密钥加密方法的算法统一资源标识 (URI)。 此算法表示对加密和解密密钥指定的公用密钥加密算法。缺省情况下,RSA_OAEP 算法使用 SHA1 消息摘要算法来在加密操作期间计算消息摘要。 (可选)可通过指定密钥加密算法属性来使用 SHA256 或 SHA512 消息摘要算法。 属性名为:
com.ibm.wsspi.wssecurity.enc.rsaoaep.DigestMethod。 属性值是下列其中一个摘要方法 URI:- https://www.w3.org/2001/04/xmlenc#sha256
- https://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 策略文件: https://www.ibm.com/developerworks/java/jdk/security/index.html。
重要的:您的原籍国可能对加密软件的进口、持有、使用或再出口到其他国家有所限制。 下载或使用未限制的策略文件之前,必须检查您的国家或地区的法律、规章以及对加密软件进行进口、拥有、使用和再次出口的相关政策,从而确定是否可以使用该文件。
要完成解密配置,必须指定算法统一资源标识 (URI) 及其用法类型。 如果 URI 用于多个用法类型,那么必须定义指向每个用法类型的 URI。 WebSphere® Application Server支持以下解密使用类型:
| 用法类型 | 描述 |
|---|---|
| 数据加密 | 指定用于对数据进行加密和解密的算法 URI。 以固定大小,多个八位字节块对数据进行加密和解密。 |
| 密钥加密 | 指定用于加密和解密加密密钥的算法 URI。 |
要配置解密功能和解密部件算法,请使用 WSSDecryption 和 WSSDecryptPart API,或者通过管理控制台来配置策略集。
- 使用 WSSDecryption API 来配置数据加密算法和密钥加密算法方法。
- 使用 WSSDecryptPart API 来配置变换算法方法。
WSS API 过程完成下列高级步骤,以指定在配置客户机进行响应解密时要使用的解密和解密部件算法方法:
过程
结果
WSSConsumerContext.process() 方法,验证 WS-Security 头,然后使用 Web Service 安全来保护 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);