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.
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):
Información de partes de verificación | Descripción |
---|---|
palabra clave | Establece las partes de verificación mediante las siguientes palabras clave:
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.
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:
|
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:
|
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:
|
Procedimiento
Resultados
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);