Selección de los métodos de las partes de verificación mediante la API WSSVerifyPart
Puede configurar la información de verificación de firmas para el enlace de consumidor mediante la API de WSS. El algoritmo de transformación y los métodos de conversión se utilizan para el enlace de consumidor. Utilice la API WSSVerifyPart para configurar los métodos del algoritmo. La API WSSVerifyPart se proporciona en el paquete com.ibm.websphere.wssecurity.wssapi.verification.
Para configurar la información acerca de las partes de verificación del consumidor que permiten proteger la integridad de los mensajes, en primer lugar debe firmar digitalmente y luego verificar la firma y las partes firmadas de los mensajes SOAP. La integridad hace referencia a la firma digital mientras que la confidencialidad hace referencia al cifrado. La integridad disminuye el riesgo de que se modifiquen los datos mientras estos se transmiten por la red.
Métodos
- Método de conversión
- Establece el método de conversión.
- Método de transformación
- Establece el método del algoritmo de transformación.
Algoritmos de conversión
El algoritmo del método de conversión se especifica dentro del elemento que se utiliza en el elemento <Digest>. WebSphere Application Server da soporte a los siguientes algoritmos de conversión preconfigurados.
Método de conversión | Descripción |
---|---|
WSSVerifyPart.SHA1 (el valor predeterminado) | Un URI del algoritmo de conversión, SHA1: http://www.w3.org/2000/09/xmldsig#sha1 |
WSSVerifyPart.SHA256 | Un URI del algoritmo de conversión, SHA256: http://www.w3.org/2001/04/xmlenc#sha256 |
WSSVerifyPart.SHA512 | Un URI del algoritmo de conversión, SHA256: http://www.w3.org/2001/04/xmlenc#sha512 |
Algoritmos de transformación
El algoritmo de transformación se especifica dentro del elemento <Transform> y especifica el algoritmo de transformación de la parte firmada. WebSphere Application Server da soporte a los siguientes algoritmos de transformación preconfigurados:
Método de conversión | Descripción |
---|---|
WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE | Un URI del algoritmo de transformación, firma de envoltura: http://www.w3.org/2000/09/xmldsig#enveloped-signature |
WSSVerifyPart.TRANSFORM_STRT10 | Un URI del algoritmo de transformación, STR-Transform: http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform |
WSSVerifyPart.EXC_C14N (el valor predeterminado) | Un URI del algoritmo de transformación, Exc-C14N: http://www.w3.org/2001/10/xml-exc-c14n# |
WSSVerifyPart.TRANSFORM_XPATH2_FILTER | Un URI del algoritmo de transformación, filtro XPath2: http://www.w3.org/2002/06/xmldsig-filter2 |
- http://www.w3.org/TR/1999/REC-xpath-19991116
- http://www.w3.org/2002/07/decrypt#XML
El ejemplo siguiente proporciona el código de la API de WSS de ejemplo que verifica el texto utilizando SHA256 como método de conversión y TRANSFORM_EXC_14N y TRANSFORM_STRT10 como métodos de transformación:
// obtener el contexto de mensaje
Object msgcontext = getMessageContext();
// generar la instancia WSSFactory
WSSFactory factory = WSSFactory.getInstance();
// generar la instancia de 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 de 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 se ha de especificar mediante WSSVerifyPart
WSSVerifyPart verPart = factory.newWSSVerifyPart();
//establecer la parte que se ha de especificar mediante la palabra clave
verPart.setRequiredVerifyPart(WSSVerification.BODY);
//establecer los candidatos de los métodos de conversión que utilizar en la verificación (paso 3)
// VALOR PREDETERMINADO: WSSVerifypart.TRANSFORM_EXC_C14N
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_EXC_C14N);
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
//establecer los candidatos de los métodos de conversión que utilizar en 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 WS-Security
concont.process(msgcontext);