APHP Mise en Place TDE

Télécharger au format docx, pdf ou txt
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 16

Oracle Consulting

APHP

Mise en place de TDE

Version 1.0

Last update : 06/05/2020


MISE EN PLACE DE TDE
Par Oracle Consulting
Auteur: Amaury FRANCOIS
Création: 06 mai 2020
Last update: 06 mai 2020
Version 1.0
Type Installation

Copyright (C) 2020 Oracle Corporation

Approvals:

Client

Oracle Amaury FRANCOIS


Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

TOC

Introduction................................................................................................. 1
Documentation source....................................................................................................................... 1
Choix de configuration....................................................................................................................... 1
Bonnes pratiques à suivre................................................................................................................. 2

Implémentation TDE et chiffrement.......................................................... 3


Configuration de la base de données................................................................................................ 3
Création du wallet.............................................................................................................................. 4
Ouverture du wallet........................................................................................................................... 4
Création de la master encryption key................................................................................................ 5
Chiffrement des tablespaces............................................................................................................. 5

Utilisation de TDE....................................................................................... 7
Rotation des clés de tablespace........................................................................................................ 7
Rotation de la clé maître (rekey)........................................................................................................ 7
Changement du mot de passe du wallet............................................................................................ 8
Arrêt/démarrage de la base de données...........................................................................................8
Sauvegarde/restauration de la base de données..............................................................................9
Import-export de la base de données................................................................................................ 9
Duplication de la base de données.................................................................................................. 10

Annexe...................................................................................................... 11
Exemple de restauration.................................................................................................................. 11

Ref: 764276915.docx Sommaire - i


Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

INTRODUCTION

Documentation source

La documentation de référence se trouve, pour la base 18, ici :


https://docs.oracle.com/en/database/oracle/oracle-database/18/asoag/asopart1.html

La FAQ se trouve ici :


https://www.oracle.com/database/technologies/faq-tde.html

Les notes MOS importantes sont :


Additional Encryption Related Parameters For 11g/12c Data Pump Export (Doc ID
1195013.1)
TDE 12.2 :About TDE encryption of Ver 12.2 SYSTEM, SYSAUX, UNDO, TEMP
tablespaces (Doc ID 2393734.1)
How to delete old master keys from 12c TDE keystore (wallet). (Doc ID 2216279.1)
The Master Key : What happens when the master key is used, accessed and reset
in TDE ? (Doc ID 1342875.1)

Nous conseillons très fortement la lecture de ces documentations.

Choix de configuration

Pour le chiffrement de la base de données les choix suivants sont faits :

- Chiffrement des données au niveau tablespace (TDE tablespace encryption).


Cette méthode permet de chiffrer l’intégralité des tablespaces contenant des
données utilisateur. En l’occurrence ce sont les tablespaces USER_DATA et
USER_INDX
- Utilisation de l’algorithme AES256. Jugé plus robuste que AES128 (voir section
chiffrement par bloc du document sur TLS de l’ANSSI)
- Utilisation d’un wallet protégé par mot de passe. En effet au vu des échéances
cette approche semble préférable. Elle devra être réévaluée dans le futur. La
préconisation d’Oracle est l’utilisation d’Oracle Key Vault qui permet de localiser
la clé (master encryption key) sur un serveur sécurisé (hardened) différent de
celui de la base de données.

Ref: 764276915.docx Mise en place de TDE - 1


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

Bonnes pratiques à
suivre

Le contenu de chaque tablespace configuré avec TDE est chiffré par une clé
contenue dans le tablespace. Cette clé est stockée chiffrée par un une clé contenue
dans le wallet. Le wallet est chiffré par le mot de passe du wallet.

La perte du wallet implique la perte totale et irrémédiable des données. En effet sans wallet il est impossible de
déchiffrer les tablespaces ainsi que leurs sauvegardes.

Il convient donc :
- De générer le mot de passe du wallet de façon sécurisée (par exemple keepass)
- De stocker le mot de passe du wallet de façon sécurisée (par exemple keepass)
- De ne jamais faire apparaitre en clair le mot de passe du wallet (documentation,
fichiers textes, copier-coller temporaire etc.)
- De sauvegarder le répertoire du wallet à plusieurs endroits et à surtout un
endroit différent de la sauvegarde de la base de données
- De changer régulièrement le mot de passe du wallet
- D’effectuer régulièrement un changement de la « master encryption key »
(rekey)
- D’effectuer régulièrement un changement de la clé du tablespace (tablespace
rekey)

Ref: 764276915.docx Mise en place de TDE - 2


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

IMPLÉMENTATION TDE ET CHIFFREMENT

Configuration de la base
de données

Afin de définir la localisation de la base de données il faut soit modifier le fichier


sqlnet.ora soit utiliser le paramètre d’instance wallet_root. C’est cette dernière
solution qui est privilégiée car plus flexible. En effet l’utilisation de sqlnet.ora
nécessite de modifier TNS_ADMIN pour chaque base de données partageant un
même oracle home.

On crée le répertoire du wallet :


mkdir /app/YYY/XXXXXXX/home/wallet
chmod 700 /app/YYY/XXXXXXX/home/wallet
chown ora2018:dba /app/YYY/XXXXXXX/home/wallet

On modifie le paramètre d’instance :


alter system set WALLET_ROOT='/app/YYY/XXXX/home/wallet' scope=spfile;

Redémarrer la base de données.

Et modifier les paramètres dynamiques :


ALTER SYSTEM SET TDE_CONFIGURATION="KEYSTORE_CONFIGURATION=file";
ALTER SYSTEM SET encrypt_new_tablespaces='always';

Le premier paramètre active l’utilisation de wallet_root.


Le second paramètre force l’utilisation du chiffrement pour tout nouveau tablespace.
A noter que par défaut le chiffrement sera fait en AES128.

On peut vérifier la configuration ainsi :


SELECT * FROM V$ENCRYPTION_WALLET
2 ;

WRL_TYPE
--------------------
WRL_PARAMETER
--------------------------------------------------------------------------------
STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
------------------------------ -------------------- --------- -------- ---------
CON_ID
----------
FILE
/app/YYY/XXXXXXX/home/wallet/tde/
NOT_AVAILABLE UNKNOWN SINGLE NONE UNDEFINED

Ref: 764276915.docx Mise en place de TDE - 3


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

Création du wallet

Un wallet est un fichier nommé ewallet.p12 (conteneur PKCS12).

Pour le créer :
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY "<mot de passe du wallet>";

On vérifie l’état :
SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE
--------------------
WRL_PARAMETER
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
---------------------------------
STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
CON_ID
------------------------------ -------------------- --------- -------- ---------
----------
FILE
/app/YYY/XXXXXXX/home/wallet/tde/
CLOSED UNKNOWN SINGLE NONE UNDEFINED
0

Ouverture du wallet

Afin de pouvoir utiliser le wallet, il faut que la base de données l’ai ouverte. Pour
cela :

ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<mot de passe du wallet>";

On vérifie l’état :
SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE
--------------------
WRL_PARAMETER
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
---------------------------------
STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
CON_ID
------------------------------ -------------------- --------- -------- ---------
----------
FILE
/app/YYY/XXXXXXX/home/wallet/tde/

Ref: 764276915.docx Mise en place de TDE - 4


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

OPEN_NO_MASTER_KEY PASSWORD SINGLE NONE UNDEFINED


0

Création de la master
encryption key

Pour créer la clé « maitre » :


ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<mot de passe du wallet>" WITH BACKUP;

On vérifie l’état :
SELECT * FROM V$ENCRYPTION_WALLET;

WRL_TYPE
--------------------
WRL_PARAMETER
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
---------------------------------
STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
CON_ID
------------------------------ -------------------- --------- -------- ---------
----------
FILE
/app/YYY/XXXXXXX/home/wallet/tde/
OPEN PASSWORD SINGLE NONE NO
0

Chiffrement des
tablespaces

On choisit un chiffrement ONLINE. Dans ce cas un nouveau fichier de données est


créé et le fichier initial est supprimé en fin de processus. Il faut spécifier la règle de
conversion de nom des fichiers de données :

ALTER TABLESPACE USER_DATA ENCRYPTION ONLINE USING 'AES256' ENCRYPT FILE_NAME_CONVERT =


('dbs_user', 'dbs_enc_user');

ALTER TABLESPACE USER_INDX ENCRYPTION ONLINE USING 'AES256' ENCRYPT FILE_NAME_CONVERT =


('dbs_user', 'dbs_enc_user');

On vérifie ensuite l’état des tablespaces :


select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces order by 1;

TABLESPACE_NAME ENC
-------------------- ---
SYSAUX NO
SYSTEM NO
TEMP NO

Ref: 764276915.docx Mise en place de TDE - 5


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

UNDOTBS1 NO
USER_DATA YES
USER_INDX YES

SELECT TS#,ENCRYPTIONALG,STATUS FROM V$ENCRYPTED_TABLESPACES;

TS# ENCRYPT STATUS


---------- ------- ----------
4 AES256 NORMAL
5 AES256 NORMAL

SELECT * FROM V$ENCRYPTED_TABLESPACES;

TS# ENCRYPT ENC ENCRYPTEDKEY MASTERKEYID BLOCKS_ENCRYPTED BLOCKS_DECRYPTED KEY_VERSION STATUS


---------- ------- --- ---------------------------------------------------------------- -------------------------------- ---------------- ---------------- ----------- ----------
4 AES256 YES 8EF413DCE4350D1C7C8D8737095D23682D3E32C25CD49F5D2398426C08BCCD51 8AE79FD97CBA4F6ABFD0FF14F83B0D7D 557055 0 1 NORMAL
5 AES256 YES 758186D9B927702F2F4F93DE4E9BACD065C433F8575470871DFB7FD1DE1BE85A 8AE79FD97CBA4F6ABFD0FF14F83B0D7D 262143 0 1 NORMAL

Ref: 764276915.docx Mise en place de TDE - 6


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

UTILISATION DE TDE

Rotation des clés de


tablespace
Afin de changer la clé d’un tablespace, lancer par exemple :
ALTER TABLESPACE USER_DATA ENCRYPTION USING 'AES256' REKEY FILE_NAME_CONVERT =
('dbs_user', 'dbs_enc_user');

ALTER TABLESPACE USER_INDX ENCRYPTION USING 'AES256' REKEY FILE_NAME_CONVERT =


('dbs_user', 'dbs_enc_user');

Rotation de la clé maître


(rekey)
Cette opération change la clé maitre et réencrypte les clés des tablespaces avec
cette nouvelle clé.

SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "<mot de passe du wallet>" WITH
BACKUP;

On peut ensuite vérifier que les clés sont différemment chiffrées :


SELECT * FROM V$ENCRYPTED_TABLESPACES;

TS# ENCRYPT ENC ENCRYPTEDKEY MASTERKEYID BLOCKS_ENCRYPTED BLOCKS_DECRYPTED KEY_VERSION STATUS CON_ID
---------- ------- --- ---------------------------------------------------------------- -------------------------------- ---------------- ---------------- ----------- ---------- ----------
4 AES256 YES 27DE4006ADA780362CD9012C3BEE4DC8F5432732B07F9B9D3D1233E56A78A4C5 CA419CD5A5034FB0BF695BEE831D2D0B 0 0 1 NORMAL 0
5 AES256 YES A0058C91A6698F155953D396931053C862DF65059B643C7E353E47C1236D0972 CA419CD5A5034FB0BF695BEE831D2D0B 0 0 1 NORMAL 0

A noter que le wallet contient l’historique des clés (cela afin de pouvoir déchiffrer les
sauvegardes)
select KEY_ID, CREATION_TIME, ACTIVATION_TIME, KEY_USE from V$ENCRYPTION_KEYS;

KEY_ID
CREATION_TIME
------------------------------------------------------------------------------
---------------------------------------------------------------------------
ACTIVATION_TIME KEY_USE
--------------------------------------------------------------------------- ----------
AYrnn9l8uk9qv9D/FPg7DX0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 05/05/20
11:21:12,422475 +01:00
05/05/20 11:21:12,422484 +01:00 TDE

AcpBnNWlA0+wv2lb7oMdLQsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 05/05/20
14:42:21,685286 +01:00
05/05/20 14:42:21,685290 +01:00 TDE

Ref: 764276915.docx Mise en place de TDE - 7


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

Changement du mot de
passe du wallet

Pour changer le mot de passe du wallet :


ADMINISTER KEY MANAGEMENT ALTER KEYSTORE PASSWORD
IDENTIFIED BY
old_password SET new_password
WITH BACKUP;

Si nécessaire supprimer le backup généré dans le répertoire. En effet celui-ci est


encore protégé par l’ancien mot de passe.

Arrêt/démarrage de la
base de données

Au redémarrage de la base de données, le wallet sera en état « CLOSED » et il sera


impossible d’accéder aux données des tablespaces chiffrés :
SQL> startup
ORACLE instance started.

Base de donnees ouverte.

SQL> SELECT STATUS FROM V$ENCRYPTION_WALLET;

STATUS
------------------------------
CLOSED

SQL> select count(*) from CYBERLAB.VISIT;


select * from CYBERLAB.VISIT
*
ERREUR a la ligne 1 :
ORA-28365: le portefeuille n'est pas ouvert

Il convient donc d’ouvrir le wallet à chaque démarrage de la base de données :

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<mot de passe du wallet>";

Fichier de cles modifie.

SQL> SELECT STATUS FROM V$ENCRYPTION_WALLET;

STATUS
------------------------------
OPEN

SQL> select count(*) from CYBERLAB.VISIT;

COUNT(*)
----------
20

Ref: 764276915.docx Mise en place de TDE - 8


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

Sauvegarde/restauration
de la base de données

- Les données chiffrées dans les tablespaces sont également chiffrées dans les
sauvegardes
- La sauvegarde compressée déchiffre les données, compresse les données et
chiffre les données
- La restauration compressée déchiffre la sauvegarde, décompresse les données
et chiffre les données
Il faut donc que le wallet soit en état OPEN lors de la sauvegarde et aussi de la
restauration.
Voir en annexe l’exemple de la restauration.

Import-export de la base
de données
ATTENTION : l’export de la base de données sans paramètre « ENCRYPTION » va générer un fichier dump
non crypté.

Le message suivant sera indiqué en fin d’export :


ORA-39173: Des donnees cryptees ont ete stockees decryptees dans un ensemble de fichiers
dump.

Afin de transporter les données de façon sécurisée, il existe deux possibilités en


fonction de la destination
- Soit l’export se fait à destination d’une base de données qui utilise le même
wallet que la base source. On peut alors utiliser le mode transparent. L’import
utilisera la clé contenue dans le wallet pour déchiffrer. Il faut donc utiliser les
options d’export suivantes :
ENCRYPTION=ALL
ENCRYPTION_ALGORITHM=AES256
ENCRYPTION_MODE=transparent

- Soit l’export se fait à destination d’une base de données qui n’utilise pas le
même wallet que la base source. On peut donc protéger le fichier d’export par
un mot de passe (qui devra être sécurisé évidemment). L’import demandera le
mot de passe de déchiffrement :
ENCRYPTION=ALL
ENCRYPTION_PWD_PROMPT=yes
ENCRYPTION_ALGORITHM=AES256
ENCRYPTION_MODE=password

A noter qu’il faut utiliser les mêmes paramètres pour l’import et l’export.

Ref: 764276915.docx Mise en place de TDE - 9


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

Duplication de la base de
données
L’utilisation de la commande DUPLICATE (par exemple pour la génération d’une
base standby) nécessite le passage du wallet en mode AUTO_LOGIN.

Attention : le passage en mode AUTO_LOGIN crée un fichier cwallet.sso dans le répertoire du wallet. Ce fichier
contient le mot de passe (masqué seulement) du wallet. Il faut donc désactiver le mode auto_login le plus
rapidement possible et changer le mot de passe du wallet immédiatement après l’opération. Il est conseillé
d’utiliser la méthode de sauvegarde/restauration plutôt que le duplicate.

Pour passer en mode auto login lancer la commande :


ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE IDENTIFIED BY "<mot de
passe du wallet>";

Pour repasser en mode non auto login, il suffit de supprimer le fichier cwallet.sso
dans le répertoire du wallet.

Ref: 764276915.docx Mise en place de TDE - 10


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

ANNEXE

Exemple de restauration
$ rman target /

Recovery Manager: Release 18.0.0.0.0 - Production on Tue May 5 17:28:51 2020


Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.

connected to target database (not started)

RMAN> startup nomount

Oracle instance started

Total System Global Area 3221225280 bytes

Fixed Size 8662848 bytes


Variable Size 2801795072 bytes
Database Buffers 402653184 bytes
Redo Buffers 8114176 bytes

RMAN> restore controlfile from '<chemin du backup de controlfile>';

Starting restore at 05-MAY-20


using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=283 device type=DISK

channel ORA_DISK_1: restoring control file


channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
....
....
Finished restore at 05-MAY-20

RMAN> alter database mount;

released channel: ORA_DISK_1


Statement processed

RMAN> restore database;

Starting restore at 05-MAY-20


allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=319 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=325 device type=DISK

channel ORA_DISK_1: starting datafile backup set restore


channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00003 to
....
....
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 05/05/2020 17:31:06
ORA-19870: erreur lors de la restauration de l'element de sauvegarde
ORA-19913: impossible de decrypter la sauvegarde
ORA-28365: le portefeuille n'est pas ouvert

Ref: 764276915.docx Mise en place de TDE - 11


Annexe
Le: 06/05/2020 APHP/DB/INSTALLATION
Version 1.0
Installation - Mise en place de TDE

$ sqlplus

SQL*Plus: Release 18.0.0.0.0 - Production on Tue May 5 17:32:44 2020


Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle. All rights reserved.

Enter user-name: / as sysdba

Connecte a :
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "<mot de passe du
wallet>";

Fichier de cles modifie.

$ rman target /

Recovery Manager: Release 18.0.0.0.0 - Production on Tue May 5 17:33:54 2020


Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates. All rights reserved.

connected to target database: XXXXXXX (DBID=888467056, not open)

RMAN> restore database;

Starting restore at 05-MAY-20


using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=319 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=325 device type=DISK
....
....
....
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 05-MAY-20

RMAN> recover database;

Starting recover at 05-MAY-20


using channel ORA_DISK_1
using channel ORA_DISK_2

starting media recovery


....
media recovery complete, elapsed time: 00:00:00
Finished recover at 05-MAY-20

RMAN> alter database open resetlogs;

Statement processed

Ref: 764276915.docx Mise en place de TDE - 12


Annexe

Vous aimerez peut-être aussi