Sélection des méthodes de vérification de parties à l'aide de l'API WSSVerifyPart
Vous pouvez configurer les informations de vérification de la signature pour la liaison du destinataire à l'aide de l'API WSS. Les méthodes d'algorithme de transformation et de synthèse sont utilisées pour la liaison du destinataire. Utilisez l'API WSSVerifyPart API pour configurer les méthodes d'algorithme. L'API WSSVerifyPart est fournie dans le package com.ibm.websphere.wssecurity.wssapi.verification.
Pour configurer les informations de vérification du destinataire afin de protéger l'intégrité des messages, vous devez d'abord procéder à la signature numérique puis vérifier la signature et les parties signées des messages SOAP. L'intégrité fait référence à la signature numérique alors que la confidentialité fait référence au chiffrement. L'intégrité limite le risque d'altération des données lors de leur transmission sur le réseau.
Méthodes
- Méthode de synthèse (digest)
- Définit la méthode de synthèse.
- Méthode de transformation
- Définit la méthode d'algorithme de transformation.
Algorithmes de synthèse
L'algorithme de méthode digest précisé dans l'élément et utilisé dans l'élément <Digest>. WebSphere Application Server prend en charge les algorithmes de synthèse (digest) préconfigurés suivants :
Méthode de synthèse (digest) | Description |
---|---|
WSSVerifyPart.SHA1 (valeur par défaut) | URI de l'algorithme de synthèse, SHA1 : http://www.w3.org/2000/09/xmldsig#sha1 |
WSSVerifyPart.SHA256 | URI de l'algorithme de synthèse, SHA256 : http://www.w3.org/2001/04/xmlenc#sha256 |
WSSVerifyPart.SHA512 | URI de l'algorithme de synthèse, SHA256 : http://www.w3.org/2001/04/xmlenc#sha512 |
Algorithme de transformation
L'algorithme de transformation est précisé dans l'élément <Transform> et indique celui pour la partie signée. WebSphere Application Server prend en charge les algorithmes de transformation préconfigurés suivants :
Méthode de synthèse (digest) | Description |
---|---|
WSSVerifyPart.TRANSFORM_ENVELOPED_SIGNATURE | URI de l'algorithme de transformation, signature enveloppée : http://www.w3.org/2000/09/xmldsig#enveloped-signature |
WSSVerifyPart.TRANSFORM_STRT10 | URI de l'algorithme de transformation, STR-Transform : http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#STR-Transform |
WSSVerifyPart.TRANSFORM_EXC_C14N (valeur par défaut) | URI de l'algorithme de transformation, Exc-C14N : http://www.w3.org/2001/10/xml-exc-c14n# |
WSSVerifyPart.TRANSFORM_XPATH2_FILTER | URI de l'algorithme de transformation, filtre 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
Voici un exemple de code d'API WSS vérifiant le corps à l'aide de SHA256 comme méthode de synthèse et TRANSFORM_EXC_14N et TRANSFORM_STRT10 comme méthodes de transformation :
// Obtenir le contexte du message
Object msgcontext = getMessageContext();
// Générer une instance WSSFactory
WSSFactory factory = WSSFactory.getInstance();
// Générer l'instance WSSConsumingContext
WSSConsumingContext concont = factory.newWSSConsumingContext();
// Générer la liste de certificats
String certpath = "intca2.cer";// The location of the X509
certificate file 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);
// Créer 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);
}
// génération du gestionnaire d'appel
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"dsig-receiver.ks",
"jks",
"server".toCharArray(),
certList,
java.security.Security.getProvider("IBMCertPath")
);
// génération de l'instance WSSVerification
WSSVerification ver = factory.newWSSVerification(X509Token.class,
callbackHandler);
//définition d'un ou plusieurs candidats de la méthode de signature utilisée pour la
//vérification (étape 1)
// DEFAULT : WSSVerification.RSA_SHA1
ver.addAllowedSignatureMethod(WSSVerification.HMAC_SHA1);
//définition d'un ou plusieurs candidats de la méthode de canonisation utilisée
//pour la vérification (étape 2)
// DEFAULT : WSSVerification.EXC_C14N
ver.addAllowedCanonicalizationMethod(WSSVerification.C14N);
ver.addAllowedCanonicalizationMethod(WSSVerification.EXC_C14N);
//définition de la partie à spécifier par WSSVerifyPart
WSSVerifyPart verPart = factory.newWSSVerifyPart();
//définition de la partie à spécifier par le mot clé
verPart.setRequiredVerifyPart(WSSVerification.BODY);
//définition des candidats des méthodes de synthèse à utiliser pour la vérification (étape 3)
// DEFAULT : WSSVerifypart.TRANSFORM_EXC_C14N
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_EXC_C14N);
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
//définition des candidats des méthodes de synthèse à utiliser pour la vérification (étape 4)
// DEFAULT : WSSVerifyPart.SHA1
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
//paramétrage de WSSVerifyPart sur WSSVerification
ver.addRequiredVerifyPart(verPart);
//ajout de WSSVerification à WSSConsumingContext
concont.add(ver);
// validation de l'en-tête WS-Security
concont.process(msgcontext);