Configuración de métodos de verificación de firma de respuesta para el cliente

Utilice las API WSSVerification y WSSVerifyPart para seleccionar los métodos de verificación de firma. Los métodos de verificación de firma de solicitudes incluyen el algoritmo de conversión y los métodos de transporte.

Antes de empezar

Para completar la configuración de la información de verificación de firma para proteger los mensajes SOAP, debe realizar las tareas de algoritmo siguientes:
  • Utilice la API WSSVerification para configurar los métodos de canonicalización y firma.
  • Utilice la API WSSVerifyPart para configurar los métodos de conversión y transformación.
Para configurar los métodos de algoritmo que se van a utilizar cuando se configure el cliente para la firma de solicitudes.

Acerca de esta tarea

La siguiente tabla describe la finalidad de esta información. Algunas de estas definiciones se basan en la especificación de firmas XML, que se puede consultar en el siguiente sitio web:http://www.w3.org/TR/xmldsig-core.

Tabla 1. Métodos de verificación de firma. Utilice la información de verificación de firma para proteger los mensajes.
Nombre del método Finalidad
Algoritmo de conversión Se aplica a los datos después de que se efectúen las transformaciones, si así se especifican, para ceder el elemento <DigestValue>. La firma del elemento <DigestValue> enlaza el contenido del recurso con la clave de firmante. El algoritmo seleccionado para la configuración del emisor de solicitudes de cliente debe coincidir con el algoritmo seleccionado en la configuración del receptor de solicitudes de cliente.
Algoritmo de transformación Se aplica al elemento <Transform>.
Algoritmo de firma Especifica los URI (identificadores de recursos uniformes) del método de verificación de firma.
Algoritmo de canonicalización Especifica los URI (identificadores de recursos uniformes) del método de canonicalización.

Después de configurar el cliente para firmar digitalmente el mensaje, debe configurar el cliente para verificar la firma digital. Puede utilizar las API de WSS o configurar conjuntos de políticas, utilizando la consola administrativa para verificar la firma digital y seleccionar la verificación y los algoritmos de la parte de verificación. Si utiliza las API de WSS para realizar la configuración, utilice las API WSSVerification y WSSVerifyPart para especificar qué partes del mensaje firmadas digitalmente se van a verificar y para especificar qué métodos de algoritmo se van a utilizar, cuando se configura el cliente para la firma de solicitudes.

Las API WSSVerification y WSSVerifyPart realizan los pasos siguientes para configurar la verificación de firma y los métodos del algoritmo de las partes de verificación:

Procedimiento

  1. Para el enlace del consumidor, la API WSSVerification especifica los métodos de firma permitidos para la verificación de firma. WebSphere Application Server da soporte a los métodos de firmas preconfigurados siguientes:
    • WSSVerification.RSA_SHA1 (el valor predeterminado): http://www.w3.org/2000/09/xmldsig#rsa-sha1
    • WSSVerification.HMAC_SHA1: http://www.w3.org/2000/09/xmldsig#hmac-sha1
    El método de firma digital DSA-SHA1 (http://www.w3.org/2000/09/xmldsig#dsa-sha1) no está soportado.
  2. Para el enlace del consumidor, la API WSSVerification especifica el método de canonicalización permitido para la verificación de la firma. WebSphere Application Server soporta los siguientes métodos de canonicalización preconfigurados de manera predeterminada:
    • WSSVerification.EXC_C14N (el valor predeterminado): http://www.w3.org/2001/10/xml-exc-c14n#
    • WSSVerification.C14N: http://www.w3.org/2001/10/xml-c14n#
  3. Para el enlace del consumidor, la API WSSVerifyPart especifica el método de conversión, según sea necesario: WebSphere Application Server da soporte a los algoritmos de método de conversión siguientes para la verificación de las partes firmadas:
    • WSSVerifyPart.SHA1 (el valor predeterminado): 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
  4. Para el enlace del consumidor, la API WSSVerifyPart especifica el método de transformación. WebSphere Application Server da soporte a los algoritmos de transformación siguientes para las partes de verificación:
    • 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
    • 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

    Para las API de WSS, WebSphere Application Server no soporta estos algoritmos:

    • http://www.w3.org/2002/07/decrypt#XML
    • http://www.w3.org/TR/1999/REC-xpath-19991116

Resultados

Ha especificado el método que se va a utilizar al verificar una firma digital, cuando el cliente envía un mensaje.

Ejemplo

En el ejemplo siguiente se proporciona un código de ejemplo de la API de WSS que especifica la información de verificación, el cuerpo como una parte que se debe verificar, HMAC_SHA1 como un método de firma, C14N y EXC_C14N como los candidatos de los métodos de canonicalización, TRANSFORM_STRT10 como un método de transformación y SHA256 como un método de conversión.

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

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

// Generar la instancia WSSConsumingContext
   WSSConsumingContext concont = factory.newWSSConsumingContext();

// Generar la lista de certificados
   String certpath = "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 el manejador de retorno de llamada
   X509ConsumeCallbackHandler callbackHandler = new 
      X509ConsumeCallbackHandler(
                                 "dsig-receiver.ks", 
                                 "jks",
                                 "server".toCharArray(), 
                                 certList, 
                                 java.security.Security.getProvider(
                                       "IBMCertPath")
                                 );

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

// Establecer uno o más candidatos del método de firma utilizado para 
//    la verificación (paso. 1)
// DEFAULT : WSSVerification.RSA_SHA1
      ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);

// Establecer uno o más candidatos del método de canonicalización utilizado para 
//    la verificación (paso. 2)
// DEFAULT : WSSVerification.EXC_C14N 
      ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
      ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);

// Establecer la parte que va a ser especificada por WSSVerifyPart
   WSSVerifyPart verPart = factory.newWSSVerifyPart();

// Establecer la parte que va a ser especificada por la palabra clave
      verPart.setRequiredVerifyPart(WSSVerification.BODY);

// Establecer los candidatos de los métodos de conversión para utilizar para la verificación (paso. 3)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N : String
      verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);

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

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

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

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

Qué hacer a continuación

Ha completado la configuración de los algoritmos de verificación de firma. A continuación, configure los algoritmos de cifrado o descifrado, si todavía no los ha configurado. O bien, configure la información de la señal de seguridad, según sea necesario.


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_confwssverifyalgorithms
File name: twbs_confwssverifyalgorithms.html