Méthodes de chiffrement

Pour les paramètres de liaison du générateur de demande, les méthodes de chiffrement incluent la spécification des algorithmes de chiffrement de données et de clés à utiliser pour chiffrer le message SOAP. L'API WSS destinée au chiffrement (WSSEncryption) indique le nom de l'algorithme et l'URI (Uniform Resource Identifier) de l'algorithme correspondant pour les méthodes de chiffrement de données et de clés. Si les algorithmes de chiffrement de données et de clés sont spécifiés, seuls les éléments chiffrés à l'aide de ces algorithmes sont admis.

Algorithmes de chiffrement de données

L'algorithme de chiffrement de données permet de chiffrer des parties du message SOAP, y compris le corps et la signature. Les algorithmes de chiffrement de données indiquent l'URI (Uniform Resource Identifier) de l'algorithme pour chaque type d'algorithmes de chiffrement de données.

Les algorithmes de chiffrement de données pré-configurés suivants sont pris en charge :
Tableau 1. Algorithmes de cryptage des données . Ce tableau répertorie les algorithmes de chiffrement des messages SOAP.
Nom de l'algorithme de chiffrement de données URI d'algorithme
WSSEncryption.AES128 (valeur par défaut) URI de l'algorithme de chiffrement de données, AES 128 : https://www.w3.org/2001/04/xmlenc#aes128-cbc
WSSEncryption.AES192 URI de l'algorithme de chiffrement de données, AES 192 : https://www.w3.org/2001/04/xmlenc#aes192-cbc
WSSEncryption.AES256 URI de l'algorithme de chiffrement de données, AES 256 : https://www.w3.org/2001/04/xmlenc#aes256-cbc
WSSEncryption.TRIPLE_DES URI de l'algorithme de chiffrement de données, TRIPLE DES : https://www.w3.org/2001/04/xmlenc#tripledes-cbc

Par défaut, Java™ Cryptography Extension (JCE) est livré avec des chiffrements à force restreinte ou limitée. Pour utiliser les algorithmes de chiffrement AES (Advanced Encryption Standard) 192 bits et 256 bits, vous devez appliquer des fichiers de règles de juridiction sans restriction.

Important: Votre pays d'origine peut avoir des restrictions sur l'importation, la possession, l'utilisation ou la réexportation vers un autre pays de logiciels de cryptage. Avant de télécharger ou d'utiliser des fichiers de règles non restreintes, vous devez vérifier les lois en vigueur dans votre pays, sa réglementation et ses règles concernant l'importation, la possession, l'utilisation et la réexportation du logiciel de chiffrement afin de déterminer si cela est autorisé.

Pour le AES256-cbc et le AES192-CBC algorithmes, vous devez télécharger les fichiers de stratégie Java™ Cryptography Extension (JCE) sans restriction à partir du site Web suivant : https://www.ibm.com/developerworks/java/jdk/security/index.html.

L'algorithme de chiffrement de données configuré pour le chiffrement côté générateur doit correspondre à l'algorithme de chiffrement de données configuré pour le déchiffrement côté destinataire.

Algorithmes de chiffrement de clés

Cet algorithme permet de chiffrer et de déchiffrer les clés. Ces informations de clés permettent d'indiquer la configuration requise pour générer la clé de la signature numérique et du chiffrement. Les configurations des informations de signature et de chiffrement peuvent partager les informations de clé. Les informations de clés côté destinataire permettent d'indiquer les informations de clé utilisées pour valider la signature numérique dans le message reçu ou pour déchiffrer les parties chiffrées du message. Le générateur de la requête est configuré pour le client.

Note: Les ensembles de règles ne prennent pas en charge le chiffrement à clé symétrique. Si vous utilisez l'API WSS pour le chiffrement de clé symétrique, vous ne pourrez pas interopérer avec des noeuds finaux web services à l'aide des ensembles de règles.

Les algorithmes de déchiffrement de clés indiquent l'URI (Uniform Resource Identifier) de l'algorithme de la méthode de déchiffrement de clés. Les algorithmes de chiffrement de clés pré-configurés suivants sont pris en charge :

Tableau 2. Algorithmes de chiffrement à clé préconfigurés pris en charge . Ce tableau répertorie les algorithmes de chiffrement et de déchiffrement des clés.
API WSS URI
WSSEncryption.KW_AES128 URI de l'algorithme de chiffrement de clés, AES 128 avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#kw-aes128
WSSEncryption.KW_AES192 URI de l'algorithme de chiffrement de clés, AES 192 avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#kw-aes192
Restriction: N'utilisez pas l'algorithme de chiffrement à clé de 192 bits si vous souhaitez que votre application configurée soit conforme au profil de sécurité de base (BSP).
WSSEncryption.KW_AES256 URI de l'algorithme de chiffrement de clés, AES 256 avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#kw-aes256
WSSEncryption.KW_RSA_OAEP (valeur par défaut) URI de l'algorithme de chiffrement de clés, RSA OAEP avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p
WSSEncryption.KW_RSA15 URI de l'algorithme de chiffrement de clés, RSA 1.5 avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#rsa-1_5
WSSEncryption.KW_TRIPLE_DES URI de l'algorithme de chiffrement de clés, TRIPLE DES avec encapsulation de clé : https://www.w3.org/2001/04/xmlenc#kw-tripledes
Pour la conversation sécurisée, d'autres informations liées aux clés doivent être indiquées, par exemple :
  • algorithmName
  • keyLength
Par défaut, l'algorithme RSA-OAEP utilise l'algorithme de synthèse de message SHA1 pour calculer une synthèse de message pendant le chiffrement. Vous pouvez éventuellement utiliser l'algorithme de synthèse de message SHA256 ou SHA512 en indiquant une propriété d'algorithme de chiffrement des clés. Le nom de la propriété est : com.ibm.wsspi.wssecurity.enc.rsaoaep.DigestMethod. La valeur de la propriété correspond à l'une des URI suivantes de la méthode simplifiée :
  • https://www.w3.org/2001/04/xmlenc#sha256
  • https://www.w3.org/2001/04/xmlenc#sha512

Par défaut, l'algorithme RSA-OAEP utilise une chaîne nulle pour la chaîne d'octets de codage facultative pour OAEPParams. Vous pouvez fournir une chaîne d'octets de codage en définissant une propriété d'algorithme de chiffrement des clés. Pour le nom de la propriété, vous pouvez utiliser com.ibm.wsspi.wssecurity.enc.rsaoaep.OAEPparams. La valeur de la propriété correspond à la valeur codée en base 64 de la chaîne d'octets.

Important: Vous pouvez définir ces méthodes de digestion et ces propriétés OAEPParams uniquement côté générateur. Côté client, ces propriétés sont lues à partir du message SOAP entrant.

Pour le KW-AES256 et le KW-AES192 algorithmes de chiffrement à clé, vous devez télécharger les fichiers de stratégie JCE sans restriction à partir du site Web suivant : https://www.ibm.com/developerworks/java/jdk/security/index.html.

L'algorithme de chiffrement de clés du générateur doit correspondre à l'algorithme de déchiffrement de clés configuré pour le destinataire.

Voici une exemple de code de chiffrement utilisant la méthode de chiffrement de données Triple DES et la méthode de chiffrement de clés RSA1.5 :

	  // get the message context
	  Object msgcontext = getMessageContext();

	  // generate WSSFactory instance
	  WSSFactory factory = WSSFactory.getInstance();		

	  // generate WSSGenerationContext instance
	  WSSGenerationContext gencont = factory.newWSSGenerationContext();

	  // generate callback handler
	  X509GenerateCallbackHandler callbackHandler = new X509GenerateCallbackHandler(
			  "",
			  "enc-sender.jceks",
			  "jceks", 
			  "storepass".toCharArray(), 
			  "bob", 
			  null, 
			  "CN=Bob, O=IBM, C=US", 
			  null);

	  // generate the security token used to the encryption
	  SecurityToken token = factory.newSecurityToken(X509Token.class, 
        callbackHandler);

	  // generate WSSEncryption instance to encrypt the SOAP body content
	  WSSEncryption enc = factory.newWSSEncryption(token);
	  enc.addEncryptPart(WSSEncryption.BODY_CONTENT);

	  // set the data encryption method
	  // DEFAULT: WSSEncryption.AES128
	  enc.setEncryptionMethod(WSSEncryption.TRIPLE_DES);

	  // set the key encryption method
	  // DEFAULT: WSSEncryption.KW_RSA_OAEP
	  enc.setEncryptionMethod(WSSEncryption.KW_RSA15);

	  // add the WSSEncryption to the WSSGenerationContext
	  gencont.add(enc);

	  // generate the WS-Security header
	  gencont.process(msgcontext);