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 empezar
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. |
cabecera | 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 soporta el uso 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 soporta 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 soporta 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 del 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ñales:
|
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:
// Obtener el contexto de mensaje
Object msgcontext = getMessageContext();
// Generar la instancia WSSFactory (paso: a)
WSSFactory factory = WSSFactory.getInstance();
// Generar la instancia WSSGenerationContext (paso: b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Generar el manejador de retorno de llamada
X509GenerateCallbackHandler callbackHandler = new
X509GenerateCallbackHandler(
"",
"enc-sender.jceks",
"jceks",
"storepass".toCharArray(),
"bob",
null,
"CN=Bob, O=IBM, C=US",
null);
// Generar la señal de seguridad utilizada para el cifrado (paso: c)
SecurityToken token = factory.newSecurityToken(X509Token.class , callbackHandler);
// Generar la instancia WSSEncryption (paso: d)
WSSEncryption enc = factory.newWSSEncryption(token);
// Establecer la parte que se va cifrar (paso: e)
// DEFAULT: WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE
// Establecer la parte especificada por la palabra clave (paso: e)
enc.addEncryptPart(WSSEncryption.BODY_CONTENT);
// Establecer la parte de la cabecera SOAP especificada por QName (paso: e)
enc.addEncryptHeader(new QName("http://www.w3.org/2005/08/addressing",
"MessageID"));
// Establecer la parte especificada por WSSSignature (paso: e)
SecurityToken sigToken = getSecurityToken();
WSSSignature sig = factory.newWSSSignature(sigToken);
enc.addEncryptPart(sig);
// Establecer la parte especificada por SecurityToken (paso: e)
UNTGenerateCallbackHandler untCallbackHandler =
new UNTGenerateCallbackHandler("Chris", "sirhC");
SecurityToken unt = factory.newSecurityToken(UsernameToken.class,
untCallbackHandler);
enc.addEncryptPart(unt, false);
// Establecer la parte especificada por la expresión XPath (paso: 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());
// Establecer si se va a cifrar la clave (paso: f)
// DEFAULT: true
enc.encryptKey(true);
// Establecer el método de cifrado de datos (paso: g)
// DEFAULT: WSSEncryption.AES128
enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);
// Establecer el método de cifrado de claves (paso: h)
// DEFAULT: WSSEncryption.KW_RSA_OAEP
enc.setEncryptionMethod(WSSEncryption.KW_RSA15);
// Establecer la referencia de la señal (paso: i)
// DEFAULT: SecurityToken.REF_KEYID
enc.setTokenReference(SecurityToken.REF_STR);
// Añadir WSSEncryption a WSSGenerationContext (paso: j)
gencont.add(enc);
// Procesar la cabecera de WS-Security (paso: 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.