Verificación de la firma mediante la API WSSVerification
Puede proteger los mensajes SOAP, sin utilizar conjuntos de políticas para la configuración, utilizando las API WSS (Web Services Security). Para verificar la información de firmas para las secciones de enlace del consumidor para la solicitud del lado del cliente, utilice la API WSSVerification. También debe especificar qué métodos de algoritmo y qué partes de firma del mensaje SOAP se van a verificar. La API WSSVerification forma parte del paquete com.ibm.websphere.wssecurity.wssapi.verification.
Antes de empezar
Utilice las API WSS, o configure los conjuntos de políticas utilizando la consola administrativa para verificar la información de firmas. Para proteger los mensajes SOAP, debe completar las tareas de firma siguientes:
- Configurar la información de firmas.
- Seleccionar los métodos de algoritmo para la firma y la verificación de firma.
- Verificar la información de firmas.
Acerca de esta tarea
WebSphere Application Server utiliza la información de firmas para el generador predeterminado con objeto de firmar partes del mensaje y utiliza la firma digital XML con algoritmos existentes como, por ejemplo, RSA-SHA1 y HMAC-SHA1.
La firma XML define muchos métodos para describir información clave y permite la definición de un nuevo método. A menudo, es necesaria la canonicalización XML (C14N) cuando se utiliza la firma XML. La información se puede representar de varias formas dentro de los documentos XML serializados. El proceso C14N se utiliza para canonicalizar información XML. Seleccione un algoritmo C14N apropiado porque la información que se canonicaliza depende de este algoritmo.
En la tabla siguiente, se muestra la información de enlace necesaria y opcional, cuando se define una limitación de seguridad de firma digital (integridad).
Partes de verificación | Descripción |
---|---|
keywords | Añade partes de firma necesarias como destinos de verificación utilizando palabras clave. Se pueden especificar distintas partes de mensaje en la protección del mensaje para la solicitud en el lado del generador.
Utilice las siguientes palabras clave para las partes de verificación de firma necesarias:
|
xpath | Añade partes de verificación utilizando una expresión XPath. |
part | Añade el objeto WSSVerifyPart como una parte de verificación. |
cabecera | Añade la cabecera, especificada por QName, como una parte de verificación. |
Para la información de verificación de firma, se producen determinados comportamientos predeterminados. La forma más sencilla de utilizar la API WSSVerification es utilizar el comportamiento predeterminado.
Los valores predeterminados son definidos por la API WSS para el método de conversión, el método de transformación, la señal de seguridad y las partes de verificación necesarias.
Decisiones de verificación de firma | Comportamiento predeterminado |
---|---|
Qué método de firma utilizar (algoritmo) | Establece el método del algoritmo de firma. Se pueden especificar tanto el cifrado de datos, como la firma, como la canonicalización. El método de firma predeterminado
es RSA SHA1. WebSphere Application Server da soporte a los métodos de
firma preconfigurados siguientes:
|
Qué método de canonicalización utilizar (algoritmo) | Establece el método del algoritmo de canonicalización.
Se pueden especificar tanto el cifrado de datos, como la firma, como la canonicalización. El método de firma predeterminado es EXC_C14N. WebSphere Application Server da soporte a los métodos de canonicalización preconfigurados siguientes:
|
Es necesaria la confirmación de firma | Si la API WSSSignature especifica que es necesaria la confirmación de firma, la API WSSVerification verifica el valor de confirmación de firma en el mensaje de respuesta
que tiene adjunto el valor de confirmación de firma cuando se recibió. La confirmación de firma se define en la especificación OASIS Web Services Security Versión 1.1. La confirmación de firma predeterminado es false. |
Qué señal de seguridad especificar (securityToken) | Añade el objeto securityToken como parte de firma. WebSphere Application Server establece la información de señal que se utiliza para la verificación. WebSphere Application Server soporta las siguientes señales preconfiguradas para la firma:
|
Procedimiento
Resultados
Ejemplo
En el ejemplo siguiente se proporciona código de ejemplo que utiliza métodos que se definen en la API WSSVerification:
// 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 el almacén de certificados
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 (paso: d)
WSSVerification ver = factory.newWSSVerification(X509Token.class, callbackHandler);
// Establecer la parte que se va a verificar (paso: e)
// DEFAULT: WSSVerification.BODY, WSSSignature.ADDRESSING_HEADERS,
// y WSSSignature.TIMESTAMP.
// Establecer la parte de la cabecera SOAP especificada por QName (paso: e)
ver.addRequiredVerifyHeader(new QName("http://www.w3.org/2005/08/addressing", "MessageID"));
// Establecer la parte especificada por la palabra clave (paso: e)
ver.addRequiredVerifyPart(WSSVerification.BODY);
// Establecer la parte especificada por WSSVerifyPart (paso: e)
WSSVerifyPart verPart = factory.newWSSVerifyPart();
verPart.setRequiredVerifyPart(WSSVerification.BODY);
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
ver.addRequiredVerifyPart(verPart);
// 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']");
ver.addRequiredVerifyPartByXPath(sb.toString());
// Establecer uno o más candidatos del método de canonicalización para verificación (paso: f)
// DEFAULT : WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
// Establecer uno o más candidatos del método de firma para verificación (paso: g)
// DEFAULT : WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
// Establecer la señal de seguridad del candidato que se va a utilizar para la verificación (paso: h)
X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
ver.addToken(X509Token.class, callbackHandler2);
// Establecer el código para requerir la confirmación de firma (paso: i)
ver.requireSignatureConfirmation();
// 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
Después de verificar la firma y establecer los métodos del algoritmo para el mensaje SOAP, puede establecer el método de conversión o el método de transformación. Si desea establecer estos métodos, utilice la API WSSVerifyPart, o configure conjuntos de políticas mediante la consola administrativa.