Configuration des méthodes de vérification de signature des réponses pour le client
Utilisez les API WSSVerification et WSSVerifyPart pour choisir les méthodes de signature. Les méthodes de vérification de signature des demandes incluent les méthodes d'algorithme de synthèse (digest) et de transport.
Avant de commencer
- Utilisez l'API WSSVerification pour configurer les méthodes de canonisation et de signature.
- Utilisez l'API WSSVerifyPart pour configurer les méthodes de synthèse (digest) et de transformation.
Pourquoi et quand exécuter cette tâche
Le tableau ci-après indique la finalité de ces informations. Certaines de ces définitions reposent sur la spécification Signature XML disponible sur le site web http://www.w3.org/TR/xmldsig-core.
Nom de la méthode | Objectif |
---|---|
Algorithme de synthèse (digest) | S'applique aux données après les opérations de conversion éventuelles pour générer l'élément <DigestValue>. La signature de l'élément <DigestValue> lie le contenu de la ressource à la clé du signataire. L'algorithme sélectionné pour la configuration de l'émetteur de la demande client doit correspondre à celui dans la configuration du destinataire de cette demande. |
Algorithme de transformation | S'applique à l'élément <Transform>. |
Algorithme de signature | Indique l'URI (Uniform Resource Identifier) de la méthode de vérification de la signature. |
Algorithme de canonisation | Indique l'URI (Uniform Resource Identifier) de la méthode de canonisation. |
Une fois le client configuré pour la signature numérique du message, vous devez le configurer pour vérifier cette signature. Vous pouvez utiliser les API WSS ou configurer des ensembles de règles à l'aide de la console d'administration pour vérifier la signature numérique et choisir les algorithmes de vérification et des portions vérifiées. Si vous utilisez les API WSS pour la configuration, servez-vous de WSSVerification et de WSSVerifyPart pour préciser les portions du message signées de façon numérique qui doivent être vérifiées, ainsi que les méthodes d'algorithme à employer lors de la configuration du client pour la signature des demandes.
Les API WSSVerification et WSSVerifyPart suivent les étapes ci-après pour configurer les méthodes d'algorithme de vérification de la signature et des portions vérifiées :
Procédure
Résultats
Exemple
L'exemple de code d'API WSS suivant indique les informations de vérification, le corps comme portion à vérifier, HMAC_SHA1 comme méthode de signature, C14N et EXC_C14N comme candidats des méthodes de canonisation, TRANSFORM_STRT10 comme méthode de transformation et SHA256 comme méthode de synthèse (digest).
// Obtenir le contexte de message
Object msgcontext = getMessageContext();
// Générer l'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";
// Emplacement du fichier de certificat 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);
// 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érer le gestionnaire d'appel
X509ConsumeCallbackHandler callbackHandler = new
X509ConsumeCallbackHandler(
"dsig-receiver.ks",
"jks",
"server".toCharArray(),
certList,
java.security.Security.getProvider(
"IBMCertPath")
);
// Générer l'instance WSSVerification
WSSVerification ver = factory.newWSSVerification(X509Token.class,
callbackHandler);
// Définir 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éfinir 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éfinir la portion que WSSVerifyPart doit indiquer
WSSVerifyPart verPart = factory.newWSSVerifyPart();
// Définir la portion que le mot clé doit indiquer
verPart.setRequiredVerifyPart(WSSVerification.BODY);
// Définir les candidats des méthodes de synthèse (digest) à utiliser pour la vérification (étape 3)
// PAR DEFAUT : WSSVerifypart.TRANSFORM_EXC_C14N : String
verPart.addAllowedTransform(WSSVerifyPart.TRANSFORM_STRT10);
// Définir les candidats des méthodes de synthèse (digest) à utiliser pour la vérification (étape 4)
// DEFAULT : WSSVerifyPart.SHA1
verPart.addAllowedDigestMethod(WSSVerifyPart.SHA256);
// Définir WSSVerifyPart à WSSVerification
ver.addRequiredVerifyPart(verPart);
// Ajouter WSSVerification à WSSConsumingContext
concont.add(ver);
// Valider l'en-tête WS-Security
concont.process(msgcontext);
Que faire ensuite
Vous avez fini de configurer les algorithmes de vérification de la signature. Configurez ensuite les algorithmes de chiffrement et de déchiffrement si ce n'est pas déjà fait. Sinon, configurez si besoin est les informations de jeton de sécurité.