Oracle Secure Sockets Layer (SSL) - Amazon Relational Database Service

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.

Oracle Secure Sockets Layer (SSL)

Vous activez le chiffrement SSL (Secure Sockets Layer) pour une instance de base de données RDS for Oracle en ajoutant l'option Oracle SSL au groupe d'options associé avec l'instance de base de données. Amazon RDS utilise un deuxième port, comme l'exige 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 SSL ou Native Network Encryption (NNE), mais pas les deux, sur la même instance de base de données RDS for Oracle. Si vous utilisez le chiffrement SSL, veillez à désactiver tout autre chiffrement de connexion. Pour plus d'informations, consultez Oracle NNE (Native Network Encryption).

SSL/TLS et NNE ne font plus partie d'Oracle Advanced Security. Dans RDS for Oracle, vous pouvez utiliser le chiffrement SSL avec toutes les éditions sous licence des versions de base de données suivantes :

  • Oracle Database 21c (21.0.0)

  • Oracle Database 19c (19.0.0)

  • Oracle Database 12c version 2 (12.2) : cette version n'est plus prise en charge

  • Oracle Database 12c version 1 (12.1) : cette version n'est plus prise en charge

Versions TLS pour l'option Oracle SSL

Amazon RDS for Oracle prend en charge le protocole TLS (Transport Layer Security) version 1.0 et 1.2. Lorsque vous ajoutez une nouvelle option Oracle SSL, définissez SQLNET.SSL_VERSION explicitement sur une valeur valide. Les valeurs suivantes sont autorisées pour ce paramètre d'option :

  • "1.0" – Les clients ne peuvent se connecter à l'instance de base de données qu'avec TLS version 1.0. Pour les options Oracle SSL existantes, SQLNET.SSL_VERSION est défini automatiquement sur "1.0". Vous pouvez modifier au besoin ce paramètre.

  • "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.

Suites de chiffrement pour l'option Oracle SSL

Amazon RDS for Oracle prend en charge plusieurs suites de chiffrement SSL. Par défaut, l'option Oracle SSL est configurée pour utiliser la suite de chiffrement SSL_RSA_WITH_AES_256_CBC_SHA. Pour indiquer une autre suite de chiffrement à utiliser sur les connexions SSL, utilisez le paramètre d'option SQLNET.CIPHER_SUITE.

La table suivante résume la prise en charge de SSL pour RDS for Oracle. Les versions de base de données Oracle spécifiées prennent en charge toutes les éditions.

Suite de chiffrement (SQLNET.CIPHER_SUITE) Prise en charge de la version de TLS (SQLNET.SSL_VERSION) Versions Oracle Database prises en charge Support FIPS Conforme au programme FedRAMP
SSL_RSA_WITH_AES_256_CBC_SHA (par défaut) 1.0 et 1.2 12c, 19c, 21c Oui Non
SSL_RSA_WITH_AES_256_CBC_SHA256 1.2 12c, 19c, 21c Oui Non
SSL_RSA_WITH_AES_256_GCM_SHA384 1.2 12c, 19c, 21c Oui Non
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 1.2 19c, 21c Oui Oui
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 1.2 19c, 21c Oui Oui
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 1.2 19c, 21c Oui Oui
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 1.2 19c, 21c Oui Oui
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA 1.2 19c, 21c Oui Oui
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 1.2 19c, 21c Oui Oui

Support FIPS

RDS for Oracle vous permet d'utiliser la norme FIPS (Federal Information Processing Standard) 140-2. FIPS 140-2 est une norme du gouvernement américain qui définit les exigences de sécurité du module de chiffrement. Pour activer la norme FIPS, définissez FIPS.SSLFIPS_140 sur TRUE pour l'option Oracle SSL. Quand la norme FIPS 140-2 est configurée pour SSL, les bibliothèques de chiffrement chiffrent les données entre le client et l'instance de base de données RDS for Oracle.

Les clients doivent utiliser la suite de chiffrement conforme à FIPS. Lors de l'établissement d'une connexion, le client et l'instance de base de données RDS for Oracle négocient quelle la suite de chiffrement utiliser lors de la transmission de messages dans les deux sens. Le tableau dans Suites de chiffrement pour l'option Oracle SSL présente les suites de chiffrement SSL conformes à FIPS pour chaque version de TLS. Pour plus d'informations, consultez Paramètres FIPS 140-2 d'Oracle Database (langue française non garantie) dans la documentation sur Oracle Database.

Ajout de l'option SSL

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

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.

    Si vous souhaitez utiliser uniquement des suites de chiffrement conformes à la norme FIPS pour les connexions SSL, définissez l'option FIPS.SSLFIPS_140 sur TRUE. Pour de plus amples informations sur la norme FIPS, veuillez consulter Support FIPS.

    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 nouvelle instance de base de données RDS for Oracle et associez le groupe d'options à cette instance ou modifiez une instance de base de données RDS for Oracle pour lui associer le groupe d'options.

    Pour obtenir des informations sur la création d'une instance de base de données, consultez Création d'une instance de base de données Amazon RDS.

    Pour obtenir des informations sur la modification d'une instance de base de données, consultez Modification d'une instance de base de données Amazon RDS.

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é VPC 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 LinuxmacOS, 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}]'

    Dans 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 nouvelle instance de base de données RDS for Oracle et associez le groupe d'options à cette instance ou modifiez une instance de base de données RDS for Oracle pour lui associer le groupe d'options.

    Pour obtenir des informations sur la création d'une instance de base de données, consultez Création d'une instance de base de données Amazon RDS.

    Pour obtenir des informations sur la modification d'une instance de base de données, consultez Modification d'une instance de base de données Amazon RDS.

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

Vous devez configurer SQL*Plus avant de vous connecter à une instance de base de données RDS for Oracle qui utilise 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 base de données RDS for 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 fichier .pem du bundle de certificats qui fonctionne pour tous Régions AWS et placez-le dans le répertoire ssl_wallet. Pour plus d’informations, consultez .

  5. Dans l'annuaire $ORACLE_HOME/network/admin, modifiez ou créez le fichier tnsnames.ora 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 de plus amples informations, veuillez consulter 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 la commande suivante pour créer le portefeuille Oracle.

    prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
  8. Extrayez chaque certificat du fichier groupé .pem dans un fichier .pem distinct à l'aide d'un utilitaire du système d'exploitation.

  9. Ajoutez chaque certificat à votre portefeuille à l'aide de orapki commandes distinctes, en le certificate-pem-file remplaçant par le nom de fichier absolu du fichier .pem.

    prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert certificate-pem-file -auto_login_only

    Pour plus d'informations, consultez Rotation de votre certificat SSL/TLS.

Connexion à une instance de base de données RDS for 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 RDS for 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 RDS for 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, vous pouvez utiliser la commande suivante. Pour plus d'informations sur la création du keystore, consultez la section Création d'un keystore dans la documentation Oracle. Pour des informations de référence, voir keytool dans le manuel Java Platform, Standard Edition Tools Reference.

keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore

Suivez les étapes ci-dessous pour faire confiance au certificat CA racine Amazon RDS.

Pour approuver le certificat de l'autorité de certification racine Amazon RDS
  1. Téléchargez le fichier .pem du bundle de certificats qui fonctionne pour tous Régions AWS et placez-le dans le répertoire ssl_wallet.

    Pour plus d'informations sur le téléchargement de certificats, veuillez consulter .

  2. Extrayez chaque certificat du fichier .pem dans un fichier distinct à l'aide d'un utilitaire du système d'exploitation.

  3. Convertissez chaque certificat au format .der à l'aide d'une openssl commande distincte, en le certificate-pem-fileremplaçant par le nom du fichier .pem du certificat (sans l'extension .pem).

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. Importez chaque certificat dans le keystore à l'aide de la commande suivante.

    keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der

    Pour plus d'informations, consultez Rotation de votre certificat SSL/TLS.

  5. 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 } }
Note

Spécifiez un mot de passe autre que celui indiqué ici, en tant que bonne pratique de sécurité.

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);

Dépannage des connexions SSL

Il se peut que vous interrogiez votre base de données et que vous receviez l'erreur ORA-28860.

ORA-28860: Fatal SSL error 28860. 00000 - "Fatal SSL error" *Cause: An error occurred during the SSL connection to the peer. It is likely that this side sent data which the peer rejected. *Action: Enable tracing to determine the exact cause of this error.

Cette erreur se produit lorsque le client tente de se connecter à l'aide d'une version de TLS non prise en charge par le serveur. Pour éviter cette erreur, modifiez le fichier sqlnet.ora et définissezSSL_VERSION sur la bonne version TLS. Pour plus d'informations, consultez le document de support Oracle 2748438.1 dans My Oracle Support.