Amazon Relational Database Service
Guide de l'utilisateur

Oracle Secure Sockets Layer (SSL)

Vous activez le chiffrement SSL (Secure Sockets Layer) pour une instance de base de données Oracle en ajoutant l'option Oracle SSL au groupe d'options associé à une instance de base de données Oracle. Vous spécifiez le port via lequel vous voulez communiquer à l'aide de SSL. Vous devez configurer SQL*Plus, comme illustré dans la section suivante.

Vous activez le chiffrement SSL (Secure Sockets Layer) pour une instance de base de données Oracle en ajoutant l'option Oracle SSL au groupe d'options associé à l'instance de base de données Oracle. Amazon RDS utilise un deuxième port requis par Oracle pour les connexions SSL. Cette approche permet aussi bien aux communications en texte clair qu'à celles à chiffrement SSL de se produire simultanément entre une instance de base de données et SQL*Plus. Par exemple, vous pouvez utiliser le port avec une communication en texte clair pour communiquer avec d'autres ressources à l'intérieur d'un VPC, tout en utilisant le port avec une communication à chiffrement SSL pour communiquer avec des ressources extérieures au VPC.

Note

Vous pouvez utiliser le protocole SSL (Secure Sockets Layer) ou le chiffrement réseau natif, mais pas les deux. Pour plus d'informations, consultez Oracle NNE (Native Network Encryption).

Vous pouvez utiliser le chiffrement SSL avec les éditions et versions de bases de données Oracle suivantes :

  • 18.0.0.0 : toutes les versions, toutes les éditions, y compris Standard Edition Two

  • 12.2.0.1 : toutes les versions, toutes les éditions, y compris Standard Edition Two

  • 12.1.0.2 : toutes les versions, toutes les éditions, y compris Standard Edition Two

  • 11.2.0.4 : toutes les versions, Enterprise Edition

  • 11.2.0.4 : version 6 et ultérieures, Standard Edition, Standard Edition One, Enterprise Edition

Note

Vous ne pouvez pas utiliser le chiffrement SSL et Oracle NNE sur la même instance. Si vous utilisez le chiffrement SSL, vous devez désactiver tout autre chiffrement de connexion.

Versions TLS pour l'option Oracle SSL

Amazon RDS pour Oracle prend en charge le protocole TLS (Transport Layer Security) version 1.0 et 1.2. Pour utiliser l'option Oracle SSL, vous devez utiliser le paramètre d'option SQLNET.SSL_VERSION. Les valeurs admises pour ce paramètre d'option sont les suivantes :

  • "1.0" – Les clients ne peuvent se connecter à l'instance de base de données qu'avec TLS 1.0.

  • "1.2" – Les clients ne peuvent se connecter à l'instance de base de données qu'avec TLS 1.2.

  • "1.2 or 1.0" – Les clients peuvent se connecter à l'instance de base de données avec TLS 1.2 ou 1.0.

Pour utiliser l'option Oracle SSL, le paramètre d'option SQLNET.SSL_VERSION est également obligatoire :

  • Pour les options Oracle SSL existantes, SQLNET.SSL_VERSION est défini automatiquement sur "1.0". Vous pouvez modifier au besoin ce paramètre.

  • Lorsque vous ajoutez une nouvelle option Oracle SSL, vous devez définir SQLNET.SSL_VERSION explicitement sur une valeur valide.

Le tableau suivant affiche les paramètres d'option TLS pris en charge pour différentes versions et éditions du moteur Oracle.

Version de moteur Oracle SQLNET.SSL_VERSION="1.0" SQLNET.SSL_VERSION="1.2" SQLNET.SSL_VERSION="1.2 ou 1.0"

18.0.0.0 (toutes les éditions)

Pris en charge

Pris en charge

Pris en charge

12.2.0.1 (toutes les éditions)

Pris en charge

Pris en charge

Pris en charge

12.1.0.2 (toutes les éditions)

Pris en charge

Pris en charge

Pris en charge

11.2.0.4 (Oracle EE)

Pris en charge

Pris en charge pour 11.2.0.4.v8 et versions ultérieures

Pris en charge pour 11.2.0.4.v8 et versions ultérieures

11.2.0.4 (Oracle SE1)

Pris en charge

Non pris en charge

Non pris en charge

11.2.0.4 (Oracle SE)

Pris en charge

Non pris en charge

Non pris en charge

Ajout de l'option SSL

Pour utiliser SSL, votre instance de base de données Oracle Amazon RDS doit être associée à un groupe d'options qui inclut l'option SSL.

Console

Pour ajouter l’option SSL à un groupe d'options

  1. Créez un groupe d'options ou identifiez un groupe d'options existant auquel vous pouvez ajouter l'option SSL.

    Pour de plus amples informations sur la création d'un groupe d'options, veuillez consulter Création d'un groupe d'options.

  2. Ajoutez l'option SSL au groupe d'options.

    Pour de plus amples informations sur l'ajout d'une option à un groupe d'options, veuillez consulter Ajout d'une option à un groupe d'options.

  3. Créez une instance de base de données Oracle et associez le groupe d'options à cette instance ou modifiez une instance de base de données Oracle pour lui associer le groupe d'options.

    Pour de plus amples informations sur la création d'une instance de base de données Oracle, veuillez consulter Création d'une instance de base de données exécutant le moteur de base de données Oracle.

    Pour de plus amples informations sur la modification d'une instance de base de données Oracle, veuillez consulter Modification d'une instance de base de données exécutant le moteur de base de données Oracle.

AWS CLI

Pour ajouter l’option SSL à un groupe d'options

  1. Créez un groupe d'options ou identifiez un groupe d'options existant auquel vous pouvez ajouter l'option SSL.

    Pour de plus amples informations sur la création d'un groupe d'options, veuillez consulter Création d'un groupe d'options.

  2. Ajoutez l'option SSL au groupe d'options.

    Spécifiez les paramètres d’option suivants :

    • Port – Numéro du port SSL

    • VpcSecurityGroupMemberships – Groupe de sécurité pour lequel l’option est activée

    • SQLNET.SSL_VERSION – Version TLS que le client peut utiliser pour se connecter à l’instance de base de données

    Par exemple, la commande AWS CLI suivante ajoute l'option SSL à un groupe d'options nommé ora-option-group.

    Exemple

    Pour Linux, OS X ou Unix :

    aws rds add-option-to-option-group --option-group-name ora-option-group \ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'

    Pour Windows :

    aws rds add-option-to-option-group --option-group-name ora-option-group ^ --options 'OptionName=SSL,Port=2484,VpcSecurityGroupMemberships="sg-68184619",OptionSettings=[{Name=SQLNET.SSL_VERSION,Value=1.0}]'
  3. Créez une instance de base de données Oracle et associez le groupe d'options à cette instance ou modifiez une instance de base de données Oracle pour lui associer le groupe d'options.

    Pour de plus amples informations sur la création d'une instance de base de données Oracle, veuillez consulter Création d'une instance de base de données exécutant le moteur de base de données Oracle.

    Pour de plus amples informations sur la modification d'une instance de base de données Oracle, veuillez consulter Modification d'une instance de base de données exécutant le moteur de base de données Oracle.

Configuration de SQL*Plus de façon à utiliser SSL avec une instance de base de données Oracle

Vous devez configurer SQL*Plus avant de vous connecter à une instance de base de données Oracle utilisant l'option Oracle SSL.

Note

Pour permettre l'accès à l'instance de base de données à partir des clients appropriés, assurez-vous que vous groupes de sécurité soient bien configurés. Pour plus d'informations, consultez Contrôle d'accès par groupe de sécurité. Ces instructions s'appliquent également à SQL*Plus et à d'autres clients qui utilisent directement un Oracle Home. Pour les connexions JDBC, consultez Configuration d'une connexion SSL via JDBC.

Pour configurer SQL*Plus de façon à utiliser SSL pour se connecter à une instance de bases de données Oracle

  1. Configurez la variable d'environnement ORACLE_HOME sur l'emplacement de votre répertoire de base Oracle.

    Le chemin vers votre répertoire de base Oracle dépend de votre installation. L'exemple suivant définit la variable d'environnement ORACLE_HOME.

    prompt>export ORACLE_HOME=/home/user/app/user/product/12.1.0/dbhome_1

    Pour plus d'informations sur la définition de variables d'environnement Oracle, consultez SQL*Plus Environment Variables dans la documentation Oracle, ainsi que le guide d'installation Oracle pour votre système d'exploitation.

  2. Ajoutez $ORACLE_HOME/lib à la variable d'environnement LD_LIBRARY_PATH.

    Voici un exemple qui définit la variable d'environnement LD_LIBRARY_PATH.

    prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
  3. Créez un répertoire pour le portefeuille Oracle dans $ORACLE_HOME/ssl_wallet.

    Voici un exemple qui crée le répertoire du portefeuille Oracle.

    prompt>mkdir $ORACLE_HOME/ssl_wallet
  4. Téléchargez le certificat racine qui fonctionne pour toutes les régions et placez le fichier dans le répertoire ssl_wallet.

    Pour plus d'informations sur le téléchargement du certificat racine, consultez Utilisation de SSL/TLS pour chiffrer une connexion à une instance de base de données.

  5. Dans le répertoire $ORACLE_HOME/network/admin, modifiez ou créez le fichier tnsnames.ora file et incluez l'entrée suivante.

    <net_service_name>= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCPS) (HOST = <endpoint>) (PORT = <ssl port number>)))(CONNECT_DATA = (SID = <database name>)) (SECURITY = (SSL_SERVER_CERT_DN = "C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=<endpoint>")))
  6. Dans le même répertoire, modifiez ou créez le fichier sqlnet.ora et incluez les paramètres suivants.

    Note

    Pour communiquer avec des entités via une connexion sécurisée TLS, Oracle a besoin d'un portefeuille avec les certificats nécessaire pour l'authentification. Vous pouvez utiliser l'utilitaire ORAPKI d'Oracle pour créer et gérer des portefeuilles Oracle, comme illustré à l'étape 7. Pour plus d'informations, consultez Setting Up Oracle Wallet Using ORAPKI dans la documentation Oracle.

    WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = $ORACLE_HOME/ssl_wallet))) SSL_CLIENT_AUTHENTICATION = FALSE SSL_VERSION = 1.0 SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA) SSL_SERVER_DN_MATCH = ON

    Note

    Vous pouvez définir SSL_VERSION sur une valeur plus élevée si votre instance de base de données la prend en charge.

  7. Exécutez les commandes suivantes pour créer le portefeuille Oracle.

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only   prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/rds-ca-2015-root.pem -auto_login_only

    Remplacez le nom de fichier par le nom de celui que vous avez téléchargé.

Connexion à une instance de base de données Oracle à l'aide de SSL

Une fois que vous avez configuré SQL*Plus pour utiliser SSL comme décrit précédemment, vous pouvez vous connecter à l'instance de base de données Oracle avec l'option SSL. Vous pouvez éventuellement d'abord exporter la valeur TNS_ADMIN qui pointe vers le répertoire qui contient les fichiers tnsnames.ora et sqlnet.ora. Vous vous assurez ainsi que SQL*Plus peut trouver ces fichiers de manière cohérente. L'exemple suivant exporte la valeur TNS_ADMIN.

export TNS_ADMIN = ${ORACLE_HOME}/network/admin

Connectez-vous à l'instance de base de données. Par exemple, vous pouvez vous connecter en utilisant SQL*Plus et <net_service_name> dans un fichier tnsnames.ora.

sqlplus <mydbuser>@<net_service_name>

Vous pouvez également vous connecter à l'instance de base de données à l'aide de SQL*Plus sans fichier tnsnames.ora, en utilisant la commande suivante.

sqlplus '<mydbuser>@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = <endpoint>) (PORT = <ssl port number>))(CONNECT_DATA = (SID = <database name>)))'

Vous pouvez également vous connecter à l'instance de base de données Oracle sans utiliser SSL. Par exemple, la commande suivante se connecte à l'instance de base de données via le port en texte clair sans chiffrement SSL.

sqlplus '<mydbuser>@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = <endpoint>) (PORT = <port number>))(CONNECT_DATA = (SID = <database name>)))'

Si vous voulez fermer l'accès au port TCP, créez un groupe de sécurité sans entrée d'adresse IP et ajoutez-le à l'instance. Cet ajout ferme les connexions sur le port TCP, tout en continuant à autoriser les connexions sur le port SSL spécifiées à partir d'adresses IP au sein de la plage autorisée par le groupe de sécurité de l'option SSL.

Configuration d'une connexion SSL via JDBC

Pour utiliser une connexion SSL via JDBC, vous devez créer un keystore, approuver le certificat d'autorité de certification racine Amazon RDS et utiliser l'extrait de code suivant.

Pour créer le keystore au format JKS, utilisez la commande suivante. Pour plus d'informations sur la création du keystore, consultez la documentation Oracle.

keytool -keystore clientkeystore -genkey -alias client

Ensuite, suivez les étapes ci-après pour approuver le certificat d'autorité de certification racine Amazon RDS.

Pour approuver le certificat de l'autorité de certification racine Amazon RDS

  1. Téléchargez le certificat racine qui fonctionne pour toutes les régions et placez le fichier dans le répertoire ssl_wallet.

    Pour plus d'informations sur le téléchargement du certificat racine, consultez Utilisation de SSL/TLS pour chiffrer une connexion à une instance de base de données.

  2. Convertissez le certificat au format .der à l'aide de la commande suivante.

    openssl x509 -outform der -in rds-ca-2015-root.pem -out rds-ca-2015-root.der

    Remplacez le nom de fichier par le nom de celui que vous avez téléchargé.

  3. Importez le certificat dans le keystore à l'aide de la commande suivante.

    keytool -import -alias rds-root -keystore clientkeystore -file rds-ca-2015-root.der
  4. Vérifiez que le magasin de clés a été créé avec succès.

    keytool -list -v -keystore clientkeystore.jks

    Entrez le mot de passe du magasin de clés lorsque vous y êtes invité.

L'exemple de code suivant montre comment configurer la connexion SSL à l'aide de JDBC.

import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "<dns-name-provided-by-amazon-rds>"; private static final Integer SSL_PORT = "<ssl-option-port-configured-in-option-group>"; private static final String DB_SID = "<oracle-sid>"; private static final String DB_USER = "<user name>"; private static final String DB_PASSWORD = "<password>"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "<file-path-to-keystore>"; private static final String KEY_STORE_PASS = "<keystore-password>"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }

Application d'une correspondance de nom unique avec une connexion SSL

Vous pouvez utiliser le paramètre Oracle SSL_SERVER_DN_MATCH pour imposer que le nom unique du serveur de base de données corresponde à son nom de service. Si vous appliquez les vérifications de correspondance, SSL garantit que le certificat provient du serveur. Si vous n'appliquez pas la vérification de correspondance, SSL effectue le contrôle, mais autorise la connexion, qu'il y ait correspondance ou pas. Si vous n'appliquez pas la correspondance, vous autorisez le serveur à falsifier potentiellement son identité.

Pour appliquer la correspondance de nom unique, ajoutez la propriété DN Match et utilisez la chaîne de connexion spécifiée ci-dessous.

Ajoutez la propriété à la connexion client pour appliquer la correspondance de nom unique.

properties.put("oracle.net.ssl_server_dn_match", "TRUE”);

Utilisez la chaîne de connexion suivante pour appliquer la correspondance de nom unique lors de l'utilisation de SSL.

final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))" + "(CONNECT_DATA=(SID=%s))" + "(SECURITY = (SSL_SERVER_CERT_DN = \"C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=%s\")))", DB_SERVER_NAME, SSL_PORT, DB_SID, DB_SERVER_NAME);