Sécurité de grille de données

La sécurité d'une grille de données permet de garantir qu'un serveur qui y est ajouté dispose des données d'identifications correctes afin qu'elles ne contiennent aucun serveur malveillant. La sécurité de la grille de données utilise un mécanisme de chaîne secrète partagée.

Tous les serveurs WebSphere eXtreme Scale, y compris les serveurs de catalogue, choisissent une chaîne de secret partagé commune. Lorsqu'un serveur rejoint la grille de données, il est invité à présenter la chaîne secrète. Si cette chaîne correspond à celle du serveur président ou du serveur de catalogues, le serveur est accepté. Dans le cas contraire, la demande de jointure est rejetée.

L'envoi d'un texte en clair n'est pas sécurisé. L'infrastructure de sécurité WebSphere eXtreme Scale propose un plug-in de gestionnaire de jetons sécurisé permettant au serveur de sécuriser la valeur confidentielle avant son envoi. Vous devez choisir le mode d'implémentation de cette opération. WebSphere eXtreme Scale propose une implémentation prête à l'emploi : l'opération de sécurité est implémentée pour chiffrer et signer la valeur confidentielle.

La chaîne confidentielle est définie dans le fichier server.properties. Reportez-vous à la rubrique Fichier de propriétés du serveur pour plus d'informations sur la propriété authenticationSecret.

Plug-in SecureTokenManager

Le plug-in de gestionnaire de jetons sécurisé est représenté par l'interface com.ibm.websphere.objectgrid.security.plugins.SecureTokenManager.

Pour plus d'informations sur ce plug-in, consultez la documentation relative à l'API SecureTokenManager.

La méthode generateToken(Object) prend un objet, puis génère un jeton ne pouvant être compris par les autres. La méthode verifyTokens(byte[]) suit le processus inverse : la méthode reconvertit le jeton à son format d'origine.

Une implémentation SecureTokenManager simple utilise un algorithme de codage simple, par exemple un algorithme OU exclusif (XOR), pour coder l'objet au format sérialisé, puis utilise l'algorithme de décodage pour décoder le jeton. Cette implémentation n'est pas sécurisée.

WebSphere eXtreme Scale propose une implémentation disponible immédiatement pour cette interface.

L'implémentation par défaut utilise une paire de clés pour signer et vérifier la signature et utilise une clé confidentielle pour en chiffrer le contenu. Chaque serveur a un fichier de clés de type JCKES pour stocker cette paire (une clé privée et une clé publique), ainsi qu'une clé confidentielle. Le fichier de clés doit être de type JCKES pour pouvoir stocker les clés confidentielles.

Ces clés sont utilisées pour chiffrer et signer ou vérifier la chaîne secrète côté envoi. Le jeton est associé à un délai d'expiration. Côté réception, les données sont vérifiées, déchiffrées et comparées à la chaîne secrète du récepteur. Les protocoles de communication SSL (Secure Sockets Layer) ne sont pas obligatoires pour l'authentification entre une paire de serveurs car les clés privées et les clés publiques ont les mêmes fonctions. Toutefois, si la communication avec les serveurs n'est pas chiffrée, les données peuvent être volées en regardant la communication. Le jeton expirant bientôt, la menace pesant sur les attaques de type replay est minime. Cette possibilité décroît même de manière significative lorsque tous les serveurs sont déployés derrière un pare-feu.

L'inconvénient de cette approche est que les administrateurs WebSphere eXtreme Scale doivent générer des clés et en assurer le transport vers tous les serveurs, au cours duquel la sécurité risque d'être enfreinte.

Exemples de scripts permettant de créer les propriétés du gestionnaire de jetons par défaut

Comme indiqué dans la section précédente, vous pouvez créer un fichier de clés contenant une paire de clés pour signer et vérifier la signature, ainsi qu'une clé secrète pour chiffrer le contenu.

Vous pouvez par exemple utiliser la commande de l'outil de clé JDK 6 pour créer les clés, comme ci-dessous :

keytool -genkeypair -alias keypair1 -keystore key1.jck -storetype JCEKS -keyalg
rsa -dname "CN=sample.ibm.com, OU=WebSphere eXtreme Scale" -storepass key111 -keypass
keypair1 -validity 10000
keytool -genseckey -alias seckey1 -keystore key1.jck -storetype JCEKS -keyalg
DES  -storepass key111 -keypass seckey1 -validity 1000
Ces deux commandes créent une paire de clés "keypair1" et une clé confidentielle "seckey1". Vous pouvez alors configurer les éléments suivants dans le fichier de propriétés du serveur :
secureTokenKeyStore=key1.jck
secureTokenKeyStorePassword=key111
secureTokenKeyStoreType=JCEKS
secureTokenKeyPairAlias=keypair1
secureTokenKeyPairPassword=keypair1
secureTokenSecretKeyAlias=seckey1
secureTokenSecretKeyPassword=seckey1
secureTokenCipherAlgorithm=DES
secureTokenSignAlgorithm=RSA

Configuration

Consultez la rubrique Propriétés du serveur pour plus d'informations sur les propriétés utilisées pour configurer le gestionnaire de jetons sécurisé.