Ajout de portions signées à l'aide de l'API WSSSignPart
Vous pouvez sécuriser les messages SOAP, sans utiliser d'ensemble de règles de configuration, en utilisant les API Web Services Security (WSS API). Pour configurer des portions signées pour les liaisons du générateur de la demande (côté client), utilisez l'API WSSSignPart afin de conserver l'intégrité des messages et de configurer les algorithmes de synthèse (digest) et de transformation. L'API WSSSignPart se trouve dans le package com.ibm.websphere.wssecurity.wssapi.signature.
Avant de commencer
Vous pouvez utiliser l'API WSS ou configurer des ensembles de règles à l'aide de la console d'administration pour configurer les informations de signature. Pour sécuriser des messages SOAP à l'aide des informations de signature, vous devez exécuter l'une des tâches suivantes :
- Configurer les informations de signature.
- Configurer les portions signées, si besoin est.
Pourquoi et quand exécuter cette tâche
WebSphere Application Server utilise les informations de signature du générateur par défaut pour signer les portions de message et utilise la signature numérique XML avec les algorithmes de synthèse (digest) et de transformation existants (par exemple, SHA1 ou TRANSFORM_EXC_C14N).
Les informations de signature définissent les contraintes d'intégrité appliquées aux messages générés. Les portions signées sont utilisées pour protéger l'intégrité des messages. Vous pouvez définir les portions signées à ajouter pour la protection de l'intégrité des messages.
Le tableau suivant montre les portions signées obligatoires lorsque la contrainte de sécurité de signature numérique (intégrité) est définie :
Portions signées | Description |
---|---|
keyword | Ajoute, à l'aide de mots clé, les portions signées. Pour les portions signées, WebSphere Application
Server prend en charge les mots clés suivants :
|
xpath | Ajoute les portions signées obligatoires à l'aide d'une expression XPath. |
header | Ajoute l'en-tête, indiqué par QName, comme portion signée. |
timestamp | Ajoute un objet WSSTimestamp comme portion signée. Lorsqu'elles sont fournies, les informations sur l'horodatage indiquent à quel moment le message est généré et expire. |
Il est possible d'indiquer diverses parties du message dans la protection de celui-ci pour la demande côté générateur. WSSSignPart permet d'ajouter un algorithme de transformation, de définir une méthode de synthèse (digest), de définir des objets comme cibles et d'indiquer les portions signées (comme le corps SOAP, l'en-tête WS-Addressing et des informations sur l'horodatage).
Certains comportements par défaut s'appliquent aux informations de signature. La façon la plus simple d'utiliser l'API WSSSignPart est d'appliquer le comportement par défaut (voir l'exemple de code). Le comportement par défaut des portions signées inclut :
Choix de signature | Comportement par défaut |
---|---|
Parties de message SOAP à signer | WebSphere Application Server prend en charge les parties du message SOAP suivantes en vue de les faire signer et de les utiliser pour la protection du message :
|
Méthode de synthèse (digest) à utiliser | Définit la méthode d'algorithme de synthèse. L'algorithme de la méthode de synthèse (digest) indiqué dans l'élément <DigestMethod> est utilisé dans l'élément <SigningInfo>t. WebSphere Application Server prend
en charge les méthodes de synthèse (digest) préconfigurées suivantes :
|
Algorithmes de transformation à utiliser | Ajoute la méthode de transformation. L'algorithme
de transformation est précisé dans l'élément <Transform> et indique celui utilisé pour la signature. WebSphere Application Server prend en charge les algorithmes de transformation préconfigurés suivants :
|
Procédure
Résultats
Exemple
L'exemple suivant fournit l'exemple de code utilisant toutes les méthodes définies dans l'API WSSSignPart :
// Obtenir le contexte de message
Object msgcontext = getMessageContext();
// Générer l'instance WSSFactory (étape : a)
WSSFactory factory = WSSFactory.getInstance();
// Générer l'instance WSSGenerationContext (étape : b)
WSSGenerationContext gencont = factory.newWSSGenerationContext();
// Générer le gestionnaire d'appel
X509GenerateCallbackHandler callbackHandler = new
X509GenerateCallbackHandler
"",
"dsig-sender.ks",
"jks",
"client".toCharArray(),
"soaprequester",
"client".toCharArray(),
"CN=SOAPRequester, OU=TRL, O=IBM, ST=Kanagawa, C=JP", null);
// Générer le jeton de sécurité utilisé dans la signature (étape : c)
SecurityToken token = factory.newSecurityToken(X509Token.class, callbackHandler);
// Générer l'instance WSSSignature (étape : d)
WSSSignature sig = factory.newWSSSignature(token);
// Définir la partie indiquée par WSSSignPart (étape : e)
WSSSignPart sigPart = factory.newWSSSignPart();
// Définir la partie indiquée par WSSSignPart (étape : f)
sigPart.setSignPart(WSSSignature.BODY);
// Définir la méthode de synthèse (digest) indiquée par WSSSignPart (étape : g)
sigPart.setDigestMethod(WSSSignPart.SHA256);
// Définir la méthode de transformation indiquée par WSSSignPart (étape : h)
sigPart.setTransformMethod(WSSSignPart.TRANSFORM_STRT10);
// Ajouter la partie indiquée par WSSSignPart (étape : i)
sig.addSignPart(sigPart);
// Ajouter WSSSignature ç WSSGenerationContext (étape : j)
gencont.add(sig);
// Générer l'en-tête WS-Security (étape : k)
gencont.process(msgcontext);
Que faire ensuite
Utilisez l'API WSSVerifyPart ou configurez des ensembles de règles à l'aide de la console d'administration pour vérifier les portions signées côté destinataire.