Déchiffrement des messages SOAP à l'aide de l'API WSSDecryption

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 le client pour le déchiffrement des messages SOAP côté destinataire de la réponse (client), utilisez l'API WSSDecryption. L'API WSSDecryption définit les portions de message de demande SOAP à déchiffrer lors de la configuration du client.

Avant de commencer

Vous pouvez utiliser l'API WSS ou des ensembles de règles dans la console d'administration pour activer le déchiffrement et ajouter des jetons de sécurité du destinataire dans le message SOAP. Pour sécuriser les messages SOAP, vous devez avoir effectué les tâches de déchiffrement suivantes :

  • Chiffrement du message SOAP
  • Choix de la méthode de déchiffrement

Pourquoi et quand exécuter cette tâche

Les informations de déchiffrement côté destinataire servent à déchiffrer les messages SOAP entrants pour les liaisons du destinataire de la réponse (côté client). La configuration du destinataire client doit correspondre à celle du fournisseur générateur.

Les paramètres de confidentialité exigent l'application de contraintes de confidentialité aux messages générés.

Les portions de déchiffrement suivantes peuvent être configurées :

Tableau 1. Parties déchiffrées. Utilisation des portions déchiffrées pour la sécurisation des messages.
Parties déchiffrées Description
part Définit l'objet WSSDecryptPart comme cible de la portion déchiffrée.
keyword Définit, à l'aide de mots clés, la portion déchiffrée. WebSphere Application Server prend en charge les mots clés suivants :
  • BODY_CONTENT
  • SIGNATURE
  • USERNAME_TOKEN
xpath Ajoute la portion déchiffrée à l'aide d'une expression XPath.
verification Ajoute l'instance WSSVerification comme cible de la portion déchiffrée.
header Ajoute l'en-tête SOAP, indiqué par QName, comme cible de la portion déchiffrée.

Certains comportements par défaut s'appliquent aux portions déchiffrées. La façon la plus simple d'utiliser l'API WSS pour le déchiffrement est d'appliquer les comportements par défaut (voir l'exemple de code). WSSDecryption fournit des valeurs par défaut pour l'algorithme de chiffrement de clé, l'algorithme de chiffrement de données et les portions déchiffrées, comme le contenu du corps SOAP et la signature. Les comportements par défaut des portions déchiffrées incluent :

Tableau 2. Choix de déchiffrement. Certaines caractéristiques des portions déchiffrées sont configurées par défaut.
Choix de déchiffrement Comportement par défaut
Les portions à déchiffrer

Par défaut, les portions à déchiffrer sont BODY_CONTENT et SIGNATURE. WebSphere Application Server prend en charge les mots clés suivants :

  • WSSDecryption.BODY_CONTENT
  • WSSDecryption.SIGNATURE
  • WSSDecryption.USERNAME_TOKEN

Après avoir indiqué les portions du message à déchiffrer, vous devez préciser la méthode à employer lors du déchiffrement du message de demande du destinataire. Par exemple, si le chiffrement est appliqué à la signature et au contenu du corps, les portions du message SOAP déchiffrées sont les mêmes.

Le chiffrement, ou non, de la clé (isEncrypt) La valeur par défaut consiste à chiffrer la clé (true).
L'algorithme de déchiffrement (method)

L'algorithme de déchiffrement de données par défaut est AES128. WebSphere Application Server prend en charge les méthodes de chiffrement de données suivantes :

  • WSSDecryption.AES128 : http://www.w3.org/2001/04/xmlenc#aes128-cbc
  • WSSDecryption.AES192 : http://www.w3.org/2001/04/xmlenc#aes192-cbc
  • WSSDecryption.AES256 : http://www.w3.org/2001/04/xmlenc#aes256-cbc
  • WSSDecryption.TRIPLE_DES : http://www.w3.org/2001/04/xmlenc#tripledes-cbc
La méthode de déchiffrement de clé (algorithm)

La méthode d'algorithme de déchiffrement de clé par défaut est l'encapsulation de clé RSA OAEP. WebSphere Application Server prend en charge les méthodes de chiffrement suivantes :

  • WSSDecryption.KW_AES128 : http://www.w3.org/2001/04/xmlenc#kw-aes128
  • WSSDecryption.KW_AES192 : http://www.w3.org/2001/04/xmlenc#kw-aes192
  • WSSDecryption.KW_AES256 : http://www.w3.org/2001/04/xmlenc#kw-aes256
  • WSSDecryption.KW_RSA_OAEP : http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
  • WSSDecryption.KW_RSA15 : http://www.w3.org/2001/04/xmlenc#rsa-1_5
  • WSSDecryption.KW_TRIPLE_DES : http://www.w3.org/2001/04/xmlenc#kw-tripledes
Le jeton de sécurité

Le type de jeton de sécurité par défaut est le jeton X509. WebSphere Application Server fournit les types de jeton de destinataire préconfigurés suivants :

  • Jeton de clé dérivée
  • Jetons X509

Procédure

  1. Pour déchiffrer le message SOAP à l'aide de l'API WSSDecryption, vérifiez d'abord que le serveur d'applications est installé.
  2. Le processus de déchiffrement de l'API WSS est le suivant :
    1. Utilise WSSFactory.getInstance() pour obtenir l'instance d'implémentation d'API WSS.
    2. Création de l'instance WSSConsumingContext à partir de l'instance WSSFactory. L'instance WSSConsumingContext doit toujours être appelée dans une application client JAX-WS.
    3. Création du gestionnaire d'appel pour le côté destinataire.
    4. Crée WSSDecryption avec la classe pour le jeton de sécurité et le gestionnaire d'appel à partir de l'instance WSSFactory. Par défaut, WSSDecryption assume que le contenu du corps et la signature sont chiffrés.
    5. Ajout des portions à déchiffrer si celles par défaut ne sont pas appropriées.
    6. Ajout des candidats pour les méthodes de chiffrement à utiliser pour le déchiffrement.
    7. Ajout des candidats pour les méthodes de chiffrement de clé à utiliser pour le déchiffrement.
    8. Ajout des candidats pour le jeton de sécurité pour le déchiffrement.
    9. Appel de WSSDecryption.encryptKey(false) si l'application ne veut pas que la clé soit chiffrée dans le message entrant.
    10. Ajout de WSSDecryption à WSSConsumingContext.
    11. Appel de WSSConsumingContext.process() avec SOAPMessageContext.

Résultats

En cas d'erreur lors du déchiffrement, une exception WSSException est lancée. Si l'opération aboutit, la méthode WSSConsumingContext.process() est appelée et la sécurité des services Web est appliquée au message SOAP.

Exemple

L'exemple suivant fournit un exemple de code pour déchiffrer le contenu du corps d'un message SOAP :

// 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 WSSConsumingContext (étape : b)
   WSSConsumingContext gencont = factory.newWSSConsumingContext();

// Générer le gestionnaire d'appel (étape : c)
   X509ConsumeCallbackHandler callbackHandler = new 
       X509ConsumeCallbackHandler(
                                  "",
                                  "enc-sender.jceks",
                                  "jceks", 
                                  "storepass".toCharArray(), 
                                  "alice", 
                                  "keypass".toCharArray(), 
	"CN=Alice, O=IBM, C=US");

// Générer l'instance WSSDecryption (étape : d)
   WSSDecryption dec = factory.newWSSDecryption(X509Token.class, 
                                                callbackHandler);

// Définir la portion à chiffrer (étape : e)
// PAR DEFAUT : WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE

// Définir la portion à chiffrer (étape : e)
// PAR DEFAUT : WSSEncryption.BODY_CONTENT and WSSEncryption.SIGNATURE

// Définir la portion indiquée par le mot clé (étape : e)
      dec.addRequiredDecryptPart(WSSDecryption.BODY_CONTENT);

// Définir la portion dans l'en-tête SOAP indiquée par QName (étape : e)
    dec.addRequiredDecryptHeader(new 
       QName("http://www.w3.org/2005/08/addressing", 
       "MessageID"));

// Définir la portion indiquée par WSSVerification (étape : e)
   X509ConsumeCallbackHandler verifyCallbackHandler = 
      getCallbackHandler();
   WSSVerification ver = factory.newWSSVerification(X509Token.class, 
                                                    verifyCallbackHandler);
      dec.addRequiredDecryptPart(ver);

// Définir la portion indiquée par l'expression XPath (étape : 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']");
      dec.addRequiredDecryptPartByXPath(sb.toString());

// Définir la portion dans l'en-tête SOAP à déchiffrer indiquée par QName (étape : e)
      dec.addRequiredDecryptHeader(new 
          QName("http://www.w3.org/2005/08/addressing", 
          "MessageID"));

// Définir les candidats pour les méthodes de chiffrement de données (étape : f)
// PAR DEFAUT : WSSDecryption.AES128
      dec.addAllowedEncryptionMethod(WSSDecryption.AES128);
      dec.addAllowedEncryptionMethod(WSSDecryption.AES192);

// Définir les condidats pour la méthode de chiffrement de clé (étape : g)
// PAR DEFAUT : WSSDecryption.KW_RSA_OAEP
      dec.addAllowedKeyEncryptionMethod(WSSDecryption.KW_TRIPLE_DES);

// Définir candidat pour le jeton de sécurité à utiliser pour le déchiffrement (étape : h)
   X509ConsumeCallbackHandler callbackHandler2 = getCallbackHandler2();
      dec.addToken(X509Token.class, callbackHandler2);

// Définir si la clé doit être chiffrée dans le message SOAP entrant (étape : i) 
// PAR DEFAUT : true
      dec.encryptKey(true);

// Ajouter WSSDecryption à WSSConsumingContext (étape : j)
   concont.add(dec);

// Valider l'en-tête WS-Security (étape : k)
concont.process(msgcontext);

Que faire ensuite

Utilisez ensuite l'API WSSDecryptPart, ou configurez les ensembles de règles à l'aide de la console d'administration pour ajouter des portions déchiffrées pour le message du destinataire.


Icône indiquant le type de rubrique Rubrique de tâche



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_confwssdecryption
Nom du fichier : twbs_confwssdecryption.html