Générer une Master Key TDE avec Key Vault

  • Imprimer

Comment avec Key Vault enrôlé un endpoint Oracle database puis générer une master key 12.1 (ou 11.2) et l’y stocker ? Si c’est la question que vous posez cet article est fait pour vous.

Tout d’abord il y a deux façons d’enrôler un endpoint, par une initiative venant d’un administrateur système de Key Vault qui envoie à un administrateur du serveur endpoint un token, ou bien par auto-enrôlement du endpoint si Key Vault est configuré pour le permettre. Ici c’est la première solution qui sera présentée.

 

Pour enrôler, il faut se connecter un rôle Key Vault System Administrator sur la console d’administration Key Vault. Ici le compte est KVSYSTEM comme créé sur le tutoriel d’installation Key Vault sur VirtualBox (Testbed: Key Vault 12.2). Une fois connecté, dans l’onglet Endpoints, sélectionnez Endpoints et cliquez sur le bouton Add. Si vous êtes connecté avec un compte qui n’a pas le rôle System Administrator il n’y aura pas de bouton Add.

 

Remplissez alors :

  • le Endpoint Name, ce n’est pas forcément le nom du serveur endpoint
  • le type, ici mettez Oracle Database c’est obligatoire car dans notre cas Key Vault doit s’interfacer avec OAS TDE  (Oracle Advanced Security Transparent Data Encryption).
  • le type de plateforme du endpoint
  • une description facultative
  • le mail de l’administrateur du endpoint. C’est facultatif, si vous le mettez et que le SMTP est configuré sur le serveur Key Vault alors un mail contenant un token pourra être envoyé à l’administrateur du endpoint

Une fois les champs remplis, cliquez sur le bouton Register

 

Une fois enregistré, le endpoint passe au status Registered et le token d’enrôlement apparait.

 

 

Si vous cliquez sur le endpoint comme ci-dessus, alors la fenêtre ci-dessous s’ouvrira et vous proposera d’envoyer le token par mail à l’administrateur du endpoint, faut-il encore que l’email de celui-ci soit renseigné.

 

 

Si pas d’envoie d’email possible, rien de bien compliqué il suffit de communiquer le token à l’administrateur. Le token est ici RgJNabqWlwqfQjFv.

Maintenant, l’administrateur doit se connecter à la console sans s’identifier. Pour rappel pour lancer la console https://<ip_key_vault_serveur> . Soit il peut le faire à partir du serveur endpoint avec un brower web type firefox, soit à partir d’un poste client. Sur la fenêtre de login, il faut cliquer sur le lien « Endpoint Enrollment Software Downlad ».

 

Une fenêtre demandant le token communiqué précédemment s’ouvre. L’administrateur doit alors remplir le champs prévu à cet effet, puis cliquer sur le bouton « Submit Token ».

 

Le message « Valid Token » en vert doit apparaître, l’administrateur du endpoint peut alors enrôler son serveur, en cliquant sur le bouton « Enroll ».

 

Et téléchargez le fichier okvclient.jar

 

 

Une fois téléchargé, il faut mettre le fichier dans un endroit où le compte linux devant se connecter à Key Vault puisse avoir accès et pas les autres comptes, donc dans notre cas, le compte oracle dans /home/oracle par exemple.

[root@ora12cdb home]# cp ./winroc/Downloads/okvclient.jar /home/oracle
[root@ora12cdb home]# chown oracle.oinstall /home/oracle/okvclient.jar

Sur le endpoint la version de JAVA doit être JDK 1.5 ou plus et être dans le PATH.

[oracle@ora12cdb ~]$ java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.0.1.el6_5-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)

Les deux variable d’environnement ORACLE_HOME et ORACLE_BASE doivent être settées

[oracle@ora12cdb ~]$ echo $ORACLE_HOME
/oracle/12.1.0.2/database

[oracle@ora12cdb ~]$ echo $ORACLE_BASE
/oracle/oraBase

Une fois tout cela de vérifié, l’administrateur du endpoint peut finir l’enregistrement auprès du serveur d’Oracle Key Vault, en exécutant le okclient.jar précédemment téléchargé. Dans l’exemple ci-dessous, il n’y a pas de password de saisi, l’administrateur à directement appuyé sur la touche enter :

[oracle@ora12cdb ~]$ java -jar okvclient.jar -d /home/oracle/okvutil -v
Detected JAVA_HOME: /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre
Enter new Key Vault endpoint password (<enter> for auto-login):
Oracle Key Vault endpoint software installed successfully.

Le client Key Vault est alors installé et configuré pour communiquer avec Key Vault serveur :

[oracle@ora12cdb okvutil]$ pwd
/home/oracle/okvutil
[oracle@ora12cdb okvutil]$ ls
bin  conf  jlib  lib  log  ssl

Il ne reste plus qu’à exécuter avec le compte root, le root.sh faire un lien avec la librairie liborapkcs.so dans /opt/oracle/extapi/64/hsm/oracle/1.0.0/. C’est facultatif mais pas dans notre cas pour faire du TDE. D’ailleurs le chemin /opt/oracle/extapi/64/hsm/oracle/1.0.0/ rappellera des souvenirs à ceux qui ont déjà configurer un HSM avec TDE.

 [root@ora12cdb bin]# pwd
/home/oracle/okvutil/bin

[root@ora12cdb bin]# ./root.sh
Creating directory: /opt/oracle/extapi/64/hsm/oracle/1.0.0/
Copying PKCS library to /opt/oracle/extapi/64/hsm/oracle/1.0.0/
Setting PKCS library file permissions
Installation successful.

Pour tester la communication du enpoint vers le serveur Key Vault, l’administratuer du endpoint peut exécuter la commande okvutil list, il ne doit pas alors obtenir d’erreur :

[oracle@ora12cdb bin]$ pwd
/home/oracle/okvutil/bin

[oracle@ora12cdb bin]$ ./okvutil list
No objects found

Et par précaution, il doit ne pas oublier de supprimer le okvclient.jar.

 

Si en tant que Key Vault système administrateur, vous regardez le status du endpoint TEST_BIGDB précédemment créé, vous devriez voir que le status vient de passer à Enrolled.

 

 Avant que l’administrateur de la base BIGDB sur le fraîchement endpoint enrôlé, ne crée une Master Key pour le chiffrement de ses tablespaces, vous pouvez créer un virtual wallet dans Key Vault pour que la clef y soit stockée. Une virtual wallet est un espace logique, il ne faut pas la voir comme une wallet classique. Cet espace logique peut être partagé par plusieurs endpoint. Pour cela avec un compte administrateur (KVADMIN dans Testbed: Key Vault 12.2), connectez-vous à la console (attention capture d’écran avec connexion KVSYSTEM, c’est possible de le faire mais on ne verra pas alors les item si ils existent, ni les rajouter à la wallet)

Pour créer la virtual wallet, allez dans l’onglet Kets & Wallets, puis sélectionnez Wallets et cliquez sur le bouton Create

 

Après avoir rempli le nom et la description, cliquez sur le bouton Save

 

Puis cliquez sur le crayon pour éditer le détail de la wallet

 

Cliquez sur le bouton Add dans la rubrique Wallet Access Settings

 

 Sélectionnez Read and Modify et Manage Wallet, puis cliquez sur Save

 

Voilà la virtual wallet est prête. Je reprécise elle n’est pas obligatoire pour la création de la master key TDE. Le endpoint a le droit d’écrire sur le serveur Key Vault depuis qu’il est enrôlé. D’ailleurs nous allons maintenant générer la clef, et elle ne sera pas dans la virtual wallet par défaut à sa création, il faudra l’y déplacer de façon logique.

Côté base de données, la génération est très simple, il faut juste au préalable configurer le sqlnet.ora se trouvant dans le $ORACLE_HOME/network/admin, comme ceci :

[oracle@ora12cdb bin]$ cd /oracle/12.1.0.2/database/network/admin/
[oracle@ora12cdb admin]$ vi sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=HSM))

La base de données est en 12c, il faut se connecter avec un utilisateur qui a le grant SYSKM, comme SYS par exemple :

[oracle@ora12cdb ~]$ sqlplus / as syskm

SQL> select WRL_TYPE,STATUS,WALLET_TYPE from V$ENCRYPTION_WALLET;
WRL_TYPE               STATUS                                              WALLET_TYPE
-------------------- ------------------------------ --------------------
HSM                           CLOSED                                              UNKNOWN

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY  "null";

System altered.

SQL> ADMINISTER KEY MANAGEMENT SET ENCRYPTION KEY IDENTIFIED BY "null";

keystore altered.

SQL> select WRL_TYPE,STATUS,WALLET_TYPE from V$ENCRYPTION_WALLET;

WRL_TYPE               STATUS                                              WALLET_TYPE
-------------------- ------------------------------ --------------------
HSM                           OPEN                                                  HSM

Si la base de données est en 11g, alors il faut se connecter avec un compte ayant le droit ALTER SYSTEM, comme SYS par exemple :

[oracle@ora11gsrv ~]$ sqlplus / as sysdba

SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "null";

SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "null";

Remarque : Ici le mot de passe est null car précédemment lors de l’installation du client okvclient.jar nous n’avons pas mis de mot de passe pour le Key Vault endpoint. Si vous avez initialisé un mot de passe alors il faut remplacer null par ce mot de passe.

La master key est générée (SET ENCRYPTION KEY), et la base de données y a accès car la wallet (11g WALLET OPEN) ou la keystore (12c KEYSTORE OPEN) est ouverte, des tablespaces chiffrés peuvent être dorénavant créés:

SQL> create tablespace TEST_CRYPT datafile '/oracle/oradata/BIGDB/test_crypt01.dbf' size 10m ENCRYPTION USING 'AES128' DEFAULT STORAGE (ENCRYPT);

L’utilitaire okvutil local à la base de données permet d’interroger le serveur Key Vault, l’option list permet de lister le contenu du serveur Key Vault accessible à ce endpoint. Et il y a bien une Master Key TDE qui remonte maintenant.

 [oracle@ora12cdb bin]$ ./okvutil list
Unique ID                                                       Type                                                Identifier
4574ACC0-CDB0-148D-E053-0100007F393E         Symmetric Key  TDE Master Key: MKID 06C6DB9B4D491E4F68BF54AD7B23CE0E53

 

Si nous revenons dans la console d’administration avec un compte de type Administrateur, nous pouvons voir dans l’onglet Keys & Wallets  rubrique All Items, la master key nouvellement créée.

 

Dans la rubrique Wallets, sélectionnez alors la virtual wallet précédemment créée et cliquez sur Add. Il faut être connecté avec un compte Administeur Key Vault, et pas System qui lui n’a pas accès aux clefs.

 

 

La virtual wallet contient maintenant la master key.

 

 

Et voilà, la question: « Comment avec Key Vault enrôlé un endpoint Oracle database puis générer une master key 12.1 (ou 11.2) et l’y stocker? », a trouvé sa réponse.