Verificación de las partes firmadas mediante la API WSSVerifyPart

Para proteger los mensajes SOAP en el lado del consumidor, utilice las API de WSS (Web Services Security) para configurar la información de partes de verificación para el enlace del consumidor en el consumidor de respuestas (lado del cliente). Puede especificar qué métodos de algoritmo y qué partes del mensaje SOAP se van a verificar. Utilice la API WSSVerifyPart para cambiar el método de conversión o el método de transformación. La API WSSVerifyPart forma parte del paquete com.ibm.websphere.wssecurity.wssapi.verification.

Antes de empezar

Para proteger los mensajes SOAP utilizando la información de verificación de firmas, debe completar una de las tareas siguientes:

  • Configurar la información de verificación de firma mediante la API WSSVerification.
  • Configurar las partes de verificación mediante la API WSSVerifyPart, según proceda.
WSSVerifyPart se utiliza para especificar los métodos de transformación o conversión para la verificación. Utilice la API WSSVerifyPart o configure los conjuntos de políticas mediante la consola administrativa.

Acerca de esta tarea

WebSphere Application Server utiliza la información de firmas para el consumidor predeterminado para verificar las partes firmadas del mensaje. La API WSSVerifyPart sólo está soportada en el consumidor de respuestas (solicitante).

En la tabla siguiente se muestran las partes de verificación necesarias, cuando se define la limitación de seguridad de firma digital (integridad):

Tabla 1. Información de partes de verificación. Utilice las partes de verificación para proteger los mensajes con información de verificación de firmas.
Información de partes de verificación Descripción
palabra clave Establece las partes de verificación mediante las siguientes palabras clave:
  • BODY
  • ADDRESSING_HEADERS
  • TIMESTAMP

Las cabeceras de WS-Addressing no se descifran, pero se pueden firmar y verificar.

xpath Establece las partes de verificación mediante una expresión XPath.
cabecera Establece la cabecera, especificada por QName, como una parte de verificación necesaria.

Para la verificación de firma, se producen determinados comportamientos predeterminados. La forma más sencilla de utilizar la API WSSVerification es utilizar el comportamiento predeterminado (consulte el código de ejemplo). Los valores predeterminados son definidos por la API de WSS para la firma del algoritmo de firma y el algoritmo de canonicalización y las partes de verificación.

Tabla 2. Comportamientos predeterminados de las partes de verificación. De forma predeterminada hay varias características de las partes de verificación configuradas.
Decisiones de partes de verificación Comportamiento predeterminado
Qué palabras clave se van a especificar

Las diferentes partes del mensaje SOAP que se van a firmar y utilizar para la protección del mensaje. WebSphere Application Server da soporte a las palabras clave siguientes:

  • WSSVerification.BODY
  • WSSVerification.ADDRESSING_HEADERS
  • WSSVerification.TIMESTAMP
Qué método de transformación utilizar (algoritmo) Añade el método de transformación. El algoritmo de transformación se especifica en el elemento <Transform> y especifica el algoritmo de transformación para la firma. El método de transformación predeterminado es TRANSFORM_EXC_C14N.

WebSphere Application Server da soporte a los siguientes algoritmos de transformación preconfigurados:

  • WSSVerifyPart.TRANSFORM_EXC_C14N (el valor predeterminado): http://www.w3.org/2001/10/xml-exc-c14n#
  • WSSVerifyPart.TRANSFORM_XPATH2_FILTER: http://www.w3.org/2002/06/xmldsig-filter2

    Utilice este método de transformación para garantizar la compatibilidad con BSP (Basic Security Profile).

  • WSSVerifyPart.TRANSFORM_STRT10: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform
  • WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE: http://www.w3.org/2000/09/xmldsig#enveloped-signature
Qué método de conversión utilizar (algoritmo) Establece el método del algoritmo de conversión. El algoritmo del método de conversión que se especifica en el elemento <DigestMethod> se utiliza en el elemento <SigningInfo>. El método de conversión predeterminado es SHA1.
WebSphere Application Server da soporte a los algoritmos del método de conversión siguientes:
  • WSSVerifyPart.SHA1: http://www.w3.org/2000/09/xmldsig#sha1
  • WSSVerifyPart.SHA256: http://www.w3.org/2001/04/xmlenc#sha256
  • WSSVerifyPart.SHA512: http://www.w3.org/2001/04/xmlenc#sha512

Procedimiento

  1. Para verificar partes firmadas utilizando la API WSSVerifyPart, en primer lugar, asegúrese de que está instalado el servidor de aplicaciones.
  2. Utilice la API de Web Services Security para comprobar la verificación en un mensaje SOAP. El proceso de la API de WSS para verificar la firma sigue estos pasos:
    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. Garantiza que se llama a WSSConsumingContext en la clase de implementación del proveedor JAX-WS. Debido a la naturaleza del modelo de programación de JAX-WS, se debe implementar un proveedor JAX-WS y se debe llamar a WSSConsumingContext para verificar la firma del mensaje SOAP.
    3. Crea CallbackHandler para utilizarlo en la verificación.
    4. Crea el objeto WSSVerification desde la instancia WSSFactory.
    5. Crea WSSVerifyPart desde la instancia WSSFactory.
    6. Establece la parte que se va a verificar, si el valor predeterminado no es apropiado.
    7. Establece los candidatos del método de conversión, si el valor predeterminado no es apropiado.
    8. Establece los candidatos del método de transformación, si el valor predeterminado no es apropiado.
    9. Añade WSSVerifyPart a WSSVerification.
    10. Añade WSSVerification a WSSConsumingContext.
    11. Llama a WSSConsumingContext.process() con SOAPMessageContext.

Resultados

Ha completado los pasos para verificar las partes firmadas en el lado del consumidor. Si existe una condición de error cuando se verifica la información de firmas, se proporciona una excepción WSSException. Si es correcto, se llama a WSSConsumingContext.process() y se verifica Web Services Security para el mensaje SOAP.

Ejemplo

En el ejemplo siguiente se proporciona código de ejemplo para el proceso de la API WSSVerification para verificar la información de firmas en un 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 concont = factory.newWSSConsumingContext();

// Generar la lista de certificados
   String certpath = 
   "c:/WebSphere/AppServer/etc/ws-security/samples/intca2.cer";
// La ubicación del archivo de certificados X509
   X509Certificate x509cert = null;
               try {
          InputStream is = new FileInputStream(certpath);
          CertificateFactory cf = CertificateFactory.getInstance("X.509");
          x509cert = (X509Certificate)cf.generateCertificate(is);
      } catch(FileNotFoundException e1){
            throw new WSSException(e1);
      } catch (CertificateException e2) {
            throw new WSSException(e2);
      }

      Set<Object> eeCerts = new HashSet<Object>();
      eeCerts.add(x509cert);  
// crear certStore
      java.util.List<CertStore> certList = new 
          java.util.ArrayList<CertStore>();
      CollectionCertStoreParameters certparam = new 
          CollectionCertStoreParameters(eeCerts);
      CertStore cert = null;
               try {
	        	           cert = CertStore.getInstance("Collection", 
              certparam, "IBMCertPath");
      } catch (NoSuchProviderException e1) {
           throw new WSSException(e1);
      } catch (InvalidAlgorithmParameterException e2) {
           throw new WSSException(e2);
      } catch (NoSuchAlgorithmException e3) {
           throw new WSSException (e3);
      }
      if(certList != null ){
      certList.add(cert);
      }

// generar manejador de retorno de llamada (paso: c)  
   X509ConsumeCallbackHandler callbackHandler = new 
       X509ConsumeCallbackHandler(
                                  "dsig-receiver.ks", 
                                  "jks",
                                  "server".toCharArray(), 
                                  certList, 
       java.security.Security.getProvider("IBMCertPath")
);

// Generar la instancia WSSVerification (paso: d)
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
       callbackHandler);

// Establecer la parte especificada por WSSVerifyPart (paso: e)
   WSSVerifyPart verPart = factory.newWSSVerifyPart();

// Establecer la parte que va a especificar la palabra clave (paso: f)
   verPart.setRequiredVerifyPart(WSSVerification.BODY);

// Establecer los candidatos para el método de conversión para la verificación (paso: g)
// DEFAULT : WSSVerifyPart.SHA1
   verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);

// Establecer los candidatos para el método de transformación para la verificación (paso: h)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N : String
   verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);

// Establecer WSSVerifyPart en WSSVerification (paso: i)
   ver.addRequiredVerifyPart(verPart);

// Añadir WSSVerification a WSSConsumingContext (paso: j)
   concont.add(ver);

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

Qué hacer a continuación

Ha completado la configuración de la parte firmada que se va a verificar.

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_confsignaturepartcon
File name: twbs_confsignaturepartcon.html