Key Locator Framework (KLF)
Conformément à la norme PCI DSS (Payment Card Industry Data Security Standard), Key Locator Framework a été intégré pour permettre le stockage d'une clé de chiffrement en dehors de HCL Commerce. Par exemple, la clé de commerçant peut désormais être stockée et extraite sur un support configurable, comme une unité externe plus sécurisée. Cette opération est exécutée en associant chaque clé de chiffrement à une classe de fournisseur de clé.
Deux fournisseurs de clés qui sont prêts pour une utilisation immédiate.
- WCMerchantKeyImpl : stocke la clé de commerçant dans le fichier de configuration de l'instance.
- WCExternalFileMerchantKeyImpl : stocke la clé de commerçant dans un fichier externe.
Si vous souhaitez stocker la clé de chiffrement à l'aide d'un mécanisme différent, par exemple, à l'aide d'une unité matérielle, vous devez créer une classe de fournisseur de clés personnalisée. Cette classe doit implémenter l'interface WCKey, et étendre la classe abstraite suivante : WCKeyBaseImpl. Elle implémente une partie des méthodes les plus courantes de l'interface WCKey. La liste des clés de chiffrement que le système peut utiliser est enregistrée dans un fichier de configuration de clés.
Pour définir un fournisseur de clés de commerçant de remplacement dans un fichier de configuration de clés personnalisé distinct, voir Implémentation de la structure KLF.
<key name="MerchantKey"
providerName="WC"
status="current"
className="com.ibm.commerce.security.keys.WCExternalFileMerchantKeyImpl">
<config name="keyFile" value="merchantKey.xml" />
<config name="keyEncryptionKeyFile" value="KeyEncryptionKey.xml" />
</key>
<key name="SessionKey"
providerName="WC"
status="current"
className="com.ibm.commerce.security.keys.WCSessionKeyImpl">
</key>Où :
- nom
- Nom de la clé.
- providerName
- Nom du fournisseur. Vous pouvez indiquer votre propre nom de fournisseur pour faire référence à un nom de classe de fournisseur personnalisé. Uniquement modifiable pour la clé de commerçant.
- état
- Les valeurs admises sont "current" (en cours) et "new" (nouvelle). La plupart du temps, il y a une clé unique pour chaque nom de clé, et la clé a le statut "current". Dans ce cas, la clé est utilisée pour chiffrer les nouvelles données et déchiffrer les données existantes.
Les valeurs admises sont "current" (en cours), "pending" (en attente) et "new" (nouvelle). La plupart du temps, il y a une clé unique pour chaque nom de clé, et la clé a le statut "current". Dans ce cas, la clé est utilisée pour chiffrer les nouvelles données et déchiffrer les données existantes.
Lors de l'exécution de MigrateEncryptedInfo, une clé supplémentaire avec le statut "new" doit être ajoutée au fichier de configuration de clés.Si vous souhaitez modifier la clé de commerçant pendant que le site est opérationnel, modifiez le statut de la nouvelle clé de "en attente" à "nouveau" dans le fichier de configuration de clé, puis effectuez une autre mise à jour EAR partielle. Pendant la propagation de la modification, les noeuds qui ont déjà récupéré la nouvelle clé (statut "new") l'utilisent pour leurs nouvelles opérations de chiffrement. Les noeuds qui ne l'ont pas encore récupérée peuvent encore déchiffrer les données à l'aide de la clé en attente (statut "pending").
Une fois que la nouvelle clé ("new") est récupérée par tous les noeuds, il est possible d'exécuter MigrateEncryptedInfo sur le site opérationnel. Une fois que l'exécution de MigrateEncryptedInfo s'est terminée avec succès, vous pouvez supprimer la clé en cours (statut "current") du fichier de configuration de clés et faire passer le statut de la nouvelle clé (statut "new") à "current".
- className
- Classe Java qui implémente votre fournisseur de clés.
- version
- Facultatif : Version de la clé. Vous devez spécifier une version si vous prévoyez d'exécuter l'utilitaire MigrateEncryptedInfo pour modifier la clé de chiffrement alors que le site est actif. L'utilitaire MigrateEncryptedInfo déchiffre les données chiffrées avec la clé en cours (statut "current"), et chiffre à nouveau avec la nouvelle clé (statut "new"). Lorsque le site est actif et que l'utilitaire est en cours d'exécution, HCL Commerce doit disposer d'un moyen de différencier les données chiffrées avec la clé en cours des données chiffrées avec la nouvelle clé. C'est pourquoi vous devez associer un numéro de version unique à chaque clé à l'aide du paramètre version. Lors du chiffrement des données à l'aide d'une clé versionnée, le fournisseur de chiffrement ActiveProvider ajoute un suffixe aux données elles-mêmes en suivant cette convention :
_IBM_n. Par exemple,_IBM_3indique que les données sont chiffrées avec la version 3 de la clé de chiffrement. L'utilitaire ajoute aux données ce suffixe en texte en clair, par exemple :yXiW3W4iblU=_IBM_3. Les données qui ont été chiffrées avant l'introduction de la gestion des versions ne possèdent pas ce suffixe, et sont associées à une clé sans version. En cas de chiffrement des données en cours d'exécution, le fournisseur de la nouvelle clé est utilisé s'il est défini. Si une nouvelle clé (statut "new") n'est pas définie, alors la clé en cours (statut "current") dont la version est la plus élevée est utilisée. - config
- Facultatif : Paramètres requis par le fournisseur. Par exemple, le nom d'un fichier de configuration.
- algorithm
- Algorithme de la clé de commerçant. Les valeurs valides sont "AES" et "3DES". Si vous exécutez la commande MigrateEncryptedInfo pour la première fois afin de migrer le mode de chiffrement 3DES vers AES, affectez la valeur AES à ce paramètre. Si le paramètre algorithm n'est pas défini pour la clé de commerçant, le paramètre AES_DB est vérifié dans le fichier suivant afin de déterminer si AES est utilisé :
Une fois que toutes les clés de chiffrement sont enregistrées dans le fichier de configuration de clés, la classe WCKeyRegistry est utilisée pour lire ce fichier et placer tous les fournisseurs de clés en mémoire cache.
Vous pouvez utiliser les méthodes getKey(strKeyName) et getNewKey(strKeyName) de la classe WCKeyRegistry pour extraire respectivement le fournisseur de la clé en cours et celui de la nouvelle clé.
WCKey key = WCKeyRegistry.getInstance().getKey(<name of the key>);
String keyValue = key.getValueAsString();Pour extraire une nouvelle clé ("new") avec un nom et un fournisseur spécifiques : WCKey newKey = WCKeyRegistry.getInstance().getNewKey(<name of the key>, <name of the provider>);
String newKeyValue = newKey.getNewValueAsString();- getKey(strKeyName) renvoie la nouvelle clé ("new") si elle existe, ou la clé en cours ("current") avec la version la plus élevée.
- getCurrentKeys() renvoie les clés en cours.
- getNewKey() renvoie la nouvelle clé si elle est définie.