Connexion à plusieurs clusters avec le fournisseur JCE - AWS CloudHSM

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connexion à plusieurs clusters avec le fournisseur JCE

Cette configuration permet à une seule instance client de communiquer avec plusieurs clusters. Par rapport au fait qu'une seule instance communique uniquement avec un seul cluster, cette fonctionnalité peut permettre de réaliser des économies dans certains cas d'utilisation. La CloudHsmProvider classe est AWS CloudHSM l'implémentation de la classe Provider de Java Security. Chaque instance de cette classe représente une connexion à l'ensemble de votre AWS CloudHSM cluster. Vous instanciez cette classe et vous l'ajoutez à la liste des fournisseurs de Java Security afin de pouvoir interagir avec elle à l'aide des classes JCE standard.

L'exemple suivant instancie cette classe et l'ajoute à la liste des fournisseurs Java Security :

if (Security.getProvider(CloudHsmProvider.PROVIDER_NAME) == null) { Security.addProvider(new CloudHsmProvider()); }

Configuration CloudHsmProvider

CloudHsmProvider peut être configuré de deux façons :

  1. Configuration avec un fichier (configuration par défaut)

  2. Configuration à l'aide du code

Configuration avec un fichier (configuration par défaut)

Lorsque vous instanciez CloudHsmProvider en utilisant le constructeur par défaut, il recherche par défaut le fichier de configuration dans le chemin /opt/cloudhsm/etc/cloudhsm-jce.cfg sous Linux. Ce fichier de configuration peut être configuré à l'aide du paramètre configure-jce.

Un objet créé à l'aide du constructeur par défaut utilisera le nom du fournisseur CloudHSM par défaut CloudHSM. Le nom du fournisseur est utile pour interagir avec JCE afin de lui indiquer quel fournisseur utiliser pour diverses opérations. Voici un exemple d'utilisation du nom du fournisseur CloudHSM pour l'opération Cipher :

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHSM");

Configuration à l'aide du code

À partir de la version 5.8.0 du SDK client, vous pouvez également le configurer CloudHsmProvider à l’aide de code Java. Pour cela, utilisez un objet de classe CloudHsmProviderConfig. Vous pouvez générer cet objet à l'aide de CloudHsmProviderConfigBuilder.

CloudHsmProvider possède un autre constructeur qui prend l'objet CloudHsmProviderConfig, comme le montre l'exemple suivant.

CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider = new CloudHsmProvider(config);

Dans cet exemple, le nom du fournisseur JCE est CloudHsmCluster1. C'est le nom que l'application peut ensuite utiliser pour interagir avec JCE :

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", "CloudHsmCluster1");

Les applications peuvent également utiliser l'objet fournisseur créé ci-dessus pour indiquer à JCE d'utiliser ce fournisseur pour l'opération :

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider);

Si aucun identifiant unique n'est spécifié avec la méthode withClusterUniqueIdentifier, un nom de fournisseur généré de manière aléatoire est créé pour vous. Pour obtenir cet identifiant généré de manière aléatoire, les applications peuvent appeler provider.getName().

Connexion à plusieurs clusters

Comme indiqué ci-dessus, chaque CloudHsmProvider représente une connexion à votre cluster CloudHSM. Si vous souhaitez communiquer avec un autre cluster à partir de la même application, vous pouvez créer un autre objet CloudHsmProvider avec des configurations pour votre autre cluster et vous pouvez interagir avec cet autre cluster en utilisant l'objet fournisseur ou en utilisant le nom du fournisseur, comme indiqué dans l'exemple suivant.

CloudHsmProviderConfig config = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath) .withClusterUniqueIdentifier("CloudHsmCluster1") .withServer(CloudHsmServer.builder().withHostIP(hostName).build()) .build()) .build(); CloudHsmProvider provider1 = new CloudHsmProvider(config); if (Security.getProvider(provider1.getName()) == null) { Security.addProvider(provider1); } CloudHsmProviderConfig config2 = CloudHsmProviderConfig.builder() .withCluster( CloudHsmCluster.builder() .withHsmCAFilePath(hsmCAFilePath2) .withClusterUniqueIdentifier("CloudHsmCluster2") .withServer(CloudHsmServer.builder().withHostIP(hostName2).build()) .build()) .build(); CloudHsmProvider provider2 = new CloudHsmProvider(config2); if (Security.getProvider(provider2.getName()) == null) { Security.addProvider(provider2); }

Une fois que vous avez configuré les deux fournisseurs (les deux clusters) ci-dessus, vous pouvez interagir avec eux en utilisant l'objet fournisseur ou en utilisant le nom du fournisseur.

Sur la base de cet exemple qui montre comment parler àcluster1, vous pouvez utiliser l'exemple suivant pour une opération NoPadding AES/GCM/ :

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider1);

Et dans la même application pour générer une clé « AES » sur le deuxième cluster en utilisant le nom du fournisseur, vous pouvez également utiliser l'exemple suivant :

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding", provider2.getName());