Descifrado de mensajes SOAP con la API WSSDecryption

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 descifrado en el lado del consumidor de respuestas (cliente), utilice la API WSSDecryption para descifrar los mensajes SOAP. La API WSSDecryption especifica qué partes del mensaje SOAP de solicitud se van a descifrar al configurar el cliente.

Antes de empezar

Puede utilizar la API de WSS o los conjuntos de políticas en la consola administrativa para habilitar el descifrado y añadir las señales de seguridad del consumidor en el mensaje SOAP. Para proteger los mensajes SOAP, debe haber completado las tareas de descifrado siguientes:

  • Cifrar el mensaje SOAP.
  • Seleccionar el método de descifrado.

Acerca de esta tarea

La información de descifrado en el lado del consumidor se utiliza para descifrar un mensaje SOAP entrante para los enlaces del consumidor de respuestas (lado del cliente). La configuración del consumidor de clientes debe coincidir con la configuración del generador de proveedores.

Los valores de confidencialidad requieren que las limitaciones de confidencialidad se apliquen a los mensajes generados.

Se pueden configurar las partes de descifrado siguientes:

Tabla 1. Partes de descifrado. Utilice las partes de descifrado para proteger los mensajes.
Partes de descifrado Descripción
part Añade el objeto WSSDecryptPart como un destino de la parte de descifrado.
palabra clave Añade la parte de descifrado utilizando palabras clave. WebSphere Application Server da soporte a las palabras clave siguientes:
  • BODY_CONTENT
  • SIGNATURE
  • USERNAME_TOKEN
xpath Añade la parte de descifrado utilizando una expresión XPath.
verification Añade la instancia WSSVerification como un destino de la parte de descifrado.
cabecera Añade la cabecera de SOAP, especificada por QName, como un destino de la parte de descifrado.

Para el descifrado, se producen determinados comportamientos predeterminados. La formas más fácil de utilizar la API de WSS para el descifrado es utilizar el comportamiento predeterminado (consulte el código de ejemplo). WSSDecryption proporciona valores predeterminados para el algoritmo de cifrado de claves, el algoritmo de cifrado de datos, y las partes de descifrado como, por ejemplo, el contenido del cuerpo SOAP y la firma. Los comportamientos predeterminados del descifrado incluyen:

Tabla 2. Decisiones de descifrado. De forma predeterminada, hay varias características de parte de descifrado configuradas.
Decisiones de descifrado Comportamiento predeterminado
Qué partes descifrar

Las partes de descifrado predeterminadas son BODY_CONTENT y SIGNATURE. WebSphere Application Server soporta el uso de estas palabras clave:

  • WSSDecryption.BODY_CONTENT
  • WSSDecryption.SIGNATURE
  • WSSDecryption.USERNAME_TOKEN

Después de especificar qué partes del mensaje desea descifrar, debe especificar qué método utilizar cuando se descifra el mensaje de solicitud del consumidor. Por ejemplo, si para el cifrado se aplican tanto la firma como el contenido del cuerpo, las partes del mensaje SOAP que se han descifrado incluyen las mismas partes.

Si se va a cifrar la clave (isEncrypt) El valor por omisión es cifrar la clave (true).
Qué algoritmo de descifrado de datos seleccionar (método)

El método del algoritmo de descifrado de datos predeterminado es AES128. WebSphere Application Server soporta estos métodos de cifrado de datos:

  • WSSDecryption.AES128: http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSDecryption.AES192: http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSDecryption.AES256: http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSDecryption.TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#tripledes-cbc
Qué método de descifrado de claves seleccionar (algoritmo)

El método del algoritmo de descifrado de claves predeterminado es la envoltura de claves RSA OAEP. WebSphere Application Server soporta estos métodos de cifrado de claves:

  • WSSDecryption.KW_AES128: http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSDecryption.KW_AES192: http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSDecryption.KW_AES256: http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSDecryption.KW_RSA_OAEP: http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSDecryption.KW_RSA15: http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSDecryption.KW_TRIPLE_DES: http://www.w3.org/2001/04/xmlenc#kw-tripledes
Qué señal de seguridad especificar

El tipo de señal de seguridad predeterminado es la señal X509. WebSphere Application Server proporciona los siguientes tipos de señal del consumidor preconfigurados:

  • Señal de clave derivada
  • Señales X509

Procedimiento

  1. Para descifrar el mensaje SOAP utilizando la API WSSDecryption, en primer lugar, asegúrese de que está instalado el servidor de aplicaciones.
  2. El proceso de la API de WSS para el descifrado realiza estos pasos del proceso:
    1. Utiliza WSSFactory.getInstance() para obtener la instancia de implementación de la API de WSS.
    2. Crea la instancia WSSConsumingContext desde la instancia WSSFactory. Siempre se debe llamar a WSSConsumingContext en una aplicación cliente de JAX-WS.
    3. Crea el manejador de retorno de llamada para el lado del consumidor.
    4. Crea WSSDecryption con la clase para la señal de seguridad y el manejador de retorno de llamada desde la instancia WSSFactory. El comportamiento predeterminado de WSSDecryption es asumir que el contenido del cuerpo y la firma están cifrados.
    5. Añade las partes que se van a descifrar, si el valor predeterminado no es apropiado.
    6. Añade los candidatos de los métodos de cifrado de datos para utilizarlos con el descifrado.
    7. Añade los candidatos de los métodos de cifrado de claves para utilizarlos con el descifrado.
    8. Añade los candidatos de la señal de seguridad para utilizarlos con el descifrado.
    9. Llama a WSSDecryption.encryptKey(false), si la aplicación no desea que se cifre la clave en el mensaje entrante.
    10. Añade WSSDecryption a WSSConsumingContext.
    11. Llama a WSSConsumingContext.process() con el SOAPMessageContext

Resultados

Si se produce una condición de error durante el descifrado, se proporciona una excepción WSSException. Si es correcto, se llama a WSSConsumingContext.process() y se aplica Web Services Security al mensaje SOAP.

Ejemplo

En el ejemplo siguiente se proporciona código de ejemplo para descifrar el contenido del cuerpo del mensaje SOAP:

// Obtener el contexto de mensaje 
   Object msgcontext = getMessageContext();

// Generar la instancia WSSFactory (paso: a)
   WSSFactory factory = WSSFactory.getInstance();

// Generar la instancia WSSConsumingContext (paso: b)
   WSSConsumingContext gencont = factory.newWSSConsumingContext();

// Generar el manejador de retorno de llamada (paso: c)
   X509ConsumeCallbackHandler callbackHandler = new 
       X509ConsumeCallbackHandler(
                                  "",
                                  "enc-sender.jceks",
                                  "jceks", 
                                  "storepass".toCharArray(), 
                                  "alice", 
                                  "keypass".toCharArray(), 
	"CN=Alice, O=IBM, C=US");

// Generar la instancia WSSDecryption (paso: d)
   WSSDecryption dec = factory.newWSSDecryption(X509Token.class, 
                                                callbackHandler);

// Establecer la parte que se va cifrar (paso: e)
// DEFAULT: WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE

// 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)
      dec.addRequiredDecryptPart(WSSDecryption.BODY_CONTENT);

// Establecer la parte de la cabecera SOAP especificada por QName  (paso: e)
    dec.addRequiredDecryptHeader(new 
       QName("http://www.w3.org/2005/08/addressing", 
       "MessageID"));

// Establecer la parte especificada por WSSVerification  (paso: e)
   X509ConsumeCallbackHandler verifyCallbackHandler = 
      getCallbackHandler();
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
                                                    verifyCallbackHandler);
      dec.addRequiredDecryptPart(ver);

// 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']");
      dec.addRequiredDecryptPartByXPath(sb.toString());

// Establecer la parte de la cabecera SOAP que se va a descifrar especificada por QName (paso: e)
      dec.addRequiredDecryptHeader(new 
          QName("http://www.w3.org/2005/08/addressing", 
          "MessageID"));

// Establecer los candidatos para el método de cifrado de datos (paso: f)
// DEFAULT : WSSDecryption.AES128
      dec.addAllowedEncryptionMethod(WSSDecryption.AES128);
      dec.addAllowedEncryptionMethod(WSSDecryption.AES192);

// Establecer los candidatos para el método de cifrado de claves (paso: g)
// DEFAULT : WSSDecryption.KW_RSA_OAEP
      dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);

// Establecer la señal de seguridad del candidato que se va a utilizar para el descifrado (paso: h)
   X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
      dec.addToken(X509Token.class, callbackHandler2);

// Establecer si se debe cifrar la clave en el mensaje SOAP entrante (paso: i) 
// DEFAULT: true
      dec.encryptKey(true);

// Añadir WSSDecryption a WSSConsumingContext (paso: j)
   concont.add(dec);

//Validar la cabecera de WS-Security (paso: k)
concont.process(msgcontext);

Qué hacer a continuación

A continuación, utilice la API WSSDecryptPart o configure los conjuntos de políticas utilizando la consola administrativa para añadir partes descifradas para el mensaje del consumidor.


Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confwssdecryption
File name: twbs_confwssdecryption.html