Configurer JCE

Utilisez les informations des rubriques suivantes pour configurer le fournisseur JCE Dedicated Key Management.

Définir la variable d'environnement pour le fournisseur JCE

Définissez la variable d'environnement suivante pour utiliser le fournisseur JCE :

LD_LIBRARY_PATH : Cette variable doit inclure le chemin d'accès au répertoire qui contient le fichier ocidkmsjca.so. L'utilisation de cette variable permet à JCE de trouver les bibliothèques java natives requises pour communiquer avec le module de sécurité matériel. Pour les installations standard, le répertoire est /opt/oci/hsm/lib.

Ajouter le fournisseur JCE à la sécurité Java

Vous devez ajouter le fournisseur JCE à la configuration de sécurité Java de votre système à l'aide de l'une des méthodes décrites dans cette section.

Pour modifier le fichier de sécurité Java

Dans JAVA_HOME, ajoutez le fournisseur de sécurité OCI Dedicated KMS à la fin de la liste des fournisseurs de sécurité. L'entrée fournisseur est la suivante :

security.provider.<list-number>=com.oracle.dkms.jce.provider.DedicatedKmsProvider
  1. Ouvrez le fichier java.security dans un éditeur. Par exemple, exécutez cette commande pour ouvrir le fichier dans l'éditeur VIM :

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
  2. Ajoutez l'entrée à la fin de la liste des fournisseurs de sécurité dans le fichier. Dans l'exemple suivant, l'entrée est ajoutée en tant que security.provider.13 :

    $ vim /usr/lib/jvm/java-11-openjdk/conf/security/java.security
    security.provider.1=SUN
    security.provider.2=SunRsaSign
    security.provider.3=SunEC
    security.provider.4=SunJSSE
    security.provider.5=SunJCE
    security.provider.6=SunJGSS
    security.provider.7=SunSASL
    security.provider.8=XMLDSig
    security.provider.9=SunPCSC
    security.provider.10=JdkLDAP
    security.provider.11=JdkSASL
    security.provider.12=SunPKCS11
    security.provider.13=com.oracle.dkms.jce.provider.DedicatedKmsProvider
Pour charger dynamiquement le fournisseur JCE dans les applications Java

Utilisez la méthode addProvider dans la classe Java Security pour ajouter le fournisseur JCE, comme suit :

DedicatedKmsProvider provider =  new DedicatedKmsProvider();
Security.addProvider(provider);

Pour plus d'informations, voir addProvider dans la documentation sur Java.

Authentification

Les utilisateurs sont authentifiés pour se connecter au module de sécurité matériel par des données d'identification extraites de plusieurs sources dans un ordre de priorité spécifique. Si des données d'identification valides sont trouvées dans n'importe quelle source, la connexion est terminée. Si aucune donnée d'identification valide n'est trouvée, la connexion échoue.

Sources de données d'identification et ordre de priorité

Les données d'identification de connexion sont fournies par les mécanismes suivants :

  1. CallbackHandler : Si cette valeur est fournie, les données d'identification sont extraites dynamiquement. Par exemple :

    public class CustomCallbackHandler implements CallbackHandler {
        private final String username;
        private final char[] password;
     
        public CustomCallbackHandler(String username, char[] password) {
            this.username = username;
            this.password = password;
        }
     
        @Override
        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
            for (Callback callback : callbacks) {
                if (callback instanceof NameCallback) {
                    ((NameCallback) callback).setName(username);
                } else if (callback instanceof PasswordCallback) {
                    ((PasswordCallback) callback).setPassword(password);
                } else {
                    throw new UnsupportedCallbackException(callback, "Unsupported callback type");
                }
            }
        }
    }            
    
    DedicatedKmsProvider provider = new DedicatedKmsProvider();
    Security.addProvider(provider);
    CustomCallbackHandler handler = new CustomCallbackHandler(crypto_user, cupassword.toCharArray());
    provider.login(null, handler);
  2. Fichier HsmCredentials.properties : L'application recherche un fichier de propriétés nommé HsmCredentials.properties dans la variable classpath. Si le fichier existe et contient des données d'identification valides, elles sont utilisées pour l'authentification. Ce fichier doit contenir les éléments suivants :

    • HSM_USER = crypto_user
    • HSM_PASSWORD = mot de passe
  3. Propriétés du système Java : Si les données d'identification ne sont pas trouvées dans le fichier de propriétés, les propriétés du système Java sont vérifiées. Les valeurs HSM_USER et HSM_PASSWORD doivent être définies en tant que propriétés de système. Vous pouvez les définir à l'aide d'indicateurs -D lors de l'exécution d'applications java. Par exemple

    -DHSM_USER=crypto_user 
    -DHSM_PASSWORD=cupassword
  4. Variables d'environnement de système d'exploitation (priorité la plus faible) : Si les données d'identification ne sont pas trouvées dans les propriétés de système Java, elles peuvent être extraites des variables d'environnement, si les variables d'environnement sont définies. Définissez les valeurs HSM_USER et HSM_PASSWORD en tant que variables d'environnement, puis exportez-les comme illustré dans l'exemple suivant :

    export HSM_USER=crypto_user 
    export HSM_PASSWORD=cupassword