Cifrado del mensaje SOAP mediante la API WSSEncryption
Puede proteger los mensajes SOAP, sin utilizar conjuntos de políticas para la configuración, utilizando las API de WSS (Web Services Security). Para configurar el cliente para el cifrado de solicitudes en el lado del generador, utilice la API WSSEncryption para cifrar el mensaje SOAP. La API WSSEncryption especifica las partes del mensaje SOAP de solicitud que se van a cifrar cuando se configura el cliente.
Antes de comenzar
Puede utilizar la API de WSS o los conjuntos de políticas en la consola administrativa para habilitar el cifrado y añadir señales de seguridad del generador en el mensaje SOAP. Para proteger mensajes SOAP, utilice las API de WSS para completar las tareas de cifrado siguientes, según sea necesario:
- Configurar el cifrado y seleccionar los métodos de cifrado utilizando la API WSSEncryption.
- Configurar las partes cifradas, según sea necesario, utilizando la API WSSEncryptPart.
Acerca de esta tarea
La información de cifrado en el lado del generador se utiliza para cifrar un mensaje SOAP saliente para los enlaces del generador de solicitudes (lado del cliente). La configuración del generador de clientes debe coincidir con la configuración del consumidor de proveedores.

Los valores de confidencialidad requieren que las limitaciones de confidencialidad se apliquen a los mensajes generados. Estas limitaciones incluyen especificar las partes del mensaje dentro del mensaje generado que se deben cifrar y las partes del mensaje a las que se adjuntan los elementos Nonce y timestamp cifrados.
Se pueden configurar las siguientes partes de cifrado:
| Partes de cifrado | Descripción |
|---|---|
| part | Añade el objeto WSSEncryptPart como un destino de la parte de cifrado. |
| palabra clave | Añade las partes de cifrado utilizando palabras clave. WebSphere® Application Server da soporte a las palabras clave siguientes:
|
| xpath | Añade la parte de cifrado utilizando una expresión XPath. |
| signature | Añade el componente WSSignature como un destino de la parte cifrada. |
| header | Añade la cabecera SOAP, especificada por QName, como un destino de la parte cifrada. |
| securityToken | Añade el objeto SecurityToken como un destino de la parte cifrada. |
Para el cifrado, se producen determinados comportamientos predeterminados. La forma más fácil de utilizar la API WSSEncryption es utilizar el comportamiento predeterminado (consulte el código de ejemplo).
WSSEncryption proporciona valores predeterminados para el algoritmo del cifrado de claves, el algoritmo del cifrado de datos, el método de referencia de señal de seguridad y las partes de cifrado como, por ejemplo, el contenido del cuerpo SOAP y la firma. Los comportamientos predeterminados de cifrado incluyen:
| Decisiones de cifrado | Comportamiento predeterminado |
|---|---|
| Qué partes del mensaje SOAP cifrar utilizando palabras clave | Establece las partes de cifrado que puede añadir utilizando palabras clave. Las partes de cifrado predeterminado son BODY_CONTENT y SIGNATURE. WebSphere Application Server da soporte a la utilización de estas palabras clave:
|
| Qué método de cifrado de datos seleccionar (algoritmo) | Establece el método de cifrado de datos. Se pueden especificar los métodos de cifrado de datos y también de claves. El método de algoritmo de cifrado de datos predeterminado es AES 128. WebSphere Application Server da soporte a estos métodos de cifrado de datos:
|
| Si se va a cifrar la clave (isEncrypt) | Especifica si se va a cifrar la clave. Los valores son true o false. El valor por omisión es cifrar la clave (true). |
| Qué método de cifrado de claves seleccionar (algoritmo) | Establece el método de cifrado de claves. Se pueden especificar los métodos de cifrado de datos y también de claves. El método de algoritmo del cifrado de claves predeterminado es envoltura de claves RSA OAEP. WebSphere Application Server da soporte a estos métodos de cifrado de claves:
|
| Qué señal de seguridad especificar (securityToken) | Establece SecurityToken. El tipo de la señal de seguridad predeterminado es X509Token. WebSphere Application Server proporciona los siguientes tipos de señal de consumidor preconfigurados:
|
| Qué referencia de señal utilizar (refType) | Establece el tipo de referencia de la señal de seguridad. La referencia de la señal predeterminada es SecurityToken.REF_KEYID. WebSphere Application Server da soporte a los siguientes tipos de referencia de señal:
|
| Si se va a utilizar MTOM (mtomOptimize) | Establece la optimización MTOM (Message Transmission Optimization Mechanism) para la parte cifrada. |
Procedimiento
Resultados
Ejemplo
En el ejemplo siguiente se proporciona código de ejemplo que utiliza métodos definidos en WSSEncryption:
// Get the message context
Object msgcontext = getMessageContext();
// Generate the WSSFactory instance (step: a)
WSSFactory factory = WSSFactory.getInstance();
// Generate the WSSGenerationContext instance (step: b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generate the callback handler
X509GenerateCallbackHandler callbackHandler = new
X509GenerateCallbackHandler(
"",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"bob",
null,
"CN=Bob, O=IBM, C=US",
null);
// Generate the security token used for encryption (step: c)
SecurityToken token = factory.newSecurityToken(X509Token.class , callbackHandler);
// Generate WSSEncryption instance (step: d)
WSSEncryption enc = factory.newWSSEncryption(token);
// Set the part to be encrypted (step: e)
// DEFAULT: WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE
// Set the part specified by the keyword (step: e)
enc.addEncryptPart(WSSEncryption.BODY_CONTENT);
// Set the part in the SOAP Header specified by QName (step: e)
enc.addEncryptHeader(new QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Set the part specified by WSSSignature (step: e)
SecurityToken sigToken = getSecurityToken();
WSSSignature sig = factory.newWSSSignature(sigToken);
enc.addEncryptPart(sig);
// Set the part specified by SecurityToken (step: e)
UNTGenerateCallbackHandler untCallbackHandler =
new UNTGenerateCallbackHandler("Chris", "sirhC");
SecurityToken unt = factory.newSecurityToken(UsernameToken.class,
untCallbackHandler);
enc.addEncryptPart(unt, false);
// sSt the part specified by XPath expression (step: e)
StringBuffer sb = new StringBuffer();
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Envelope']");
sb.append("/*[namespace-uri()='http://schemas.xmlsoap.org/soap/envelope/'
and local-name()='Body']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Ping']");
sb.append("/*[namespace-uri()='http://xmlsoap.org/Ping'
and local-name()='Text']");
enc.addEncryptPartByXPath(sb.toString());
// Set whether the key is encrypted (step: f)
// DEFAULT: true
enc.encryptKey(true);
// Set the data encryption method (step: g)
// DEFAULT: WSSEncryption.AES128
enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);
// Set the key encryption method (step: h)
// DEFAULT: WSSEncryption.KW_RSA_OAEP
enc.setEncryptionMethod(WSSEncryption.KW_RSA15);
// Set the token reference (step: i)
// DEFAULT: SecurityToken.REF_KEYID
enc.setTokenReference(SecurityToken.REF_STR);
// Add the WSSEncryption to the WSSGenerationContext (step: j)
gencont.add(enc);
// Process the WS-Security header (step: k)
gencont.process(msgcontext);
Qué hacer a continuación
Si no especificado previamente los métodos de cifrado que se van a utilizar, utilice la API de WSS o configure los conjuntos de políticas utilizando la consola administrativa para seleccionar los métodos del algoritmo de cifrado de datos y de claves.