

# Capa de conexión segura de Oracle
<a name="Appendix.Oracle.Options.SSL"></a>

A fin de habilitar el cifrado SSL para una instancia de base de datos de RDS para Oracle, añada la opción Oracle SSL al grupo de opciones asociado a la instancia de base de datos. Amazon RDS utiliza un segundo puerto, según lo requiera Oracle, para las conexiones SSL. Este enfoque permite que se produzca la comunicación cifrada de SSL y de texto sin cifrar al mismo tiempo entre una instancia de base de datos y SQL\$1Plus. Por ejemplo, es posible utilizar el puerto con la comunicación de texto sin cifrar para ponerse en contacto con otros recursos dentro de una VPC mientras se utiliza el puerto con comunicación cifrada SSL para ponerse en contacto con recursos situados fuera de la VPC.

**nota**  
Se puede utilizar SSL o Native Network Encryption (NNE) en la misma instancia de base de datos de RDS para Oracle, pero no ambos. Si se utiliza el cifrado SSL, se debe desactivar cualquier otro cifrado de conexión. Para obtener más información, consulte [Oracle Native Network Encryption](Appendix.Oracle.Options.NetworkEncryption.md).

SSL/TLS y NNE ya no forman parte de Oracle Advanced Security. En RDS para Oracle, el cifrado SSL puede utilizarse con las ediciones con licencia de las siguientes versiones:
+ Oracle Database 21c (21.0.0)
+ Oracle Database 19c (19.0.0)

**Topics**
+ [

## Versiones de TLS para la opción Oracle SSL
](#Appendix.Oracle.Options.SSL.TLS)
+ [

## Conjuntos de cifrado para la opción Oracle SSL
](#Appendix.Oracle.Options.SSL.CipherSuites)
+ [

## Compatibilidad FIPS
](#Appendix.Oracle.Options.SSL.FIPS)
+ [

## Compatibilidad de certificados con conjuntos de cifrado
](#Appendix.Oracle.Options.SSL.CertificateCompatibility)
+ [

# Adición de la opción SSL
](Appendix.Oracle.Options.SSL.OptionGroup.md)
+ [

# Configuración de SQL\$1Plus para utilizar SSL con una instancia de base de datos de RDS para Oracle
](Appendix.Oracle.Options.SSL.ClientConfiguration.md)
+ [

# Conexión a una instancia de base de datos de RDS para Oracle mediante SSL
](Appendix.Oracle.Options.SSL.Connecting.md)
+ [

# Configuración de una conexión SSL a través de JDBC
](Appendix.Oracle.Options.SSL.JDBC.md)
+ [

# Obligatoriedad de la coincidencia del DN con una conexión SSL
](Appendix.Oracle.Options.SSL.DNMatch.md)
+ [

# Solución de problemas de las conexiones SSL
](Appendix.Oracle.Options.SSL.troubleshooting.md)

## Versiones de TLS para la opción Oracle SSL
<a name="Appendix.Oracle.Options.SSL.TLS"></a>

Amazon RDS para Oracle supports Transport Layer Security (TLS) versiones 1.0 y 1.2. Cuando añada una nueva opción Oracle SSL, establezca `SQLNET.SSL_VERSION` explícitamente en un valor válido. Los siguientes valores están permitidos para esta continuación de opciones:
+ `"1.0"`: los clientes pueden conectarse a la instancia de base de datos utilizando TLS versión 1.0 solo. Para las opciones de Oracle SSL existentes, `SQLNET.SSL_VERSION` se establece en `"1.0"` automáticamente. Puede cambiar la configuración si es necesario.
+ `"1.2"`: los clientes pueden conectarse a la instancia de base de datos utilizando TLS 1.2 solo.
+ `"1.2 or 1.0"`: los clientes pueden conectarse a la instancia de base de datos utilizando TLS 1.2 o 1.0.

## Conjuntos de cifrado para la opción Oracle SSL
<a name="Appendix.Oracle.Options.SSL.CipherSuites"></a>

Amazon RDS para Oracle es compatible con múltiples conjuntos de cifrado SSL. De manera predeterminada, la opción Oracle SSL está configurada para utilizar el conjunto de cifrado `SSL_RSA_WITH_AES_256_CBC_SHA`. Para especificar un conjunto de cifrado diferente para utilizarlo en las conexiones SSL, utilice la configuración de opciones `SQLNET.CIPHER_SUITE`.

Puede especificar varios valores para `SQLNET.CIPHER_SUITE`. Esta técnica resulta útil si tiene enlaces de bases de datos entre sus instancias de base de datos y decide actualizar los conjuntos de cifrado.

En la siguiente tabla se resume la compatibilidad de SSL para RDS para Oracle en todas las ediciones de Oracle Database 19c y 21c.


| Conjunto de cifrado (SQLNET.CIPHER\$1SUITE) | Compatibilidad de la versión de TLS (SQLNET.SSL\$1VERSION) | Compatibilidad FIPS | Conforme con FedRAMP | 
| --- | --- | --- | --- | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA (predeterminado) | 1.0 y 1.2 | Sí | No | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 | 1.2 | Sí | No | 
| SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sí | No | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 | 1.2 | Sí | Sí | 
| TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 | 1.2 | Sí | Sí | 

## Compatibilidad FIPS
<a name="Appendix.Oracle.Options.SSL.FIPS"></a>

RDS para Oracle le permite usar el estándar federal de procesamiento de la información (FIPS) para 140-2. FIPS 140-2 es un estándar del gobierno estadounidense que define los requisitos de seguridad de los módulos criptográficos. Para activar el estándar FIPS, establezca el valor `FIPS.SSLFIPS_140` en `TRUE` para la opción SSL de Oracle. Cuando FIPS 140-2 se configura para SSL, las bibliotecas criptográficas cifran los datos entre el cliente y la instancia de base de datos de RDS para Oracle.

Los clientes deben usar el conjunto de cifrado compatible con FIPS. Al establecer una conexión, el cliente y la instancia de base de datos de RDS para Oracle negocian qué conjunto de cifrado utilizar al transmitir mensajes entre ellos. La tabla en [Conjuntos de cifrado para la opción Oracle SSL](#Appendix.Oracle.Options.SSL.CipherSuites) muestra los conjuntos de cifrado SSL compatibles con FIPS para cada versión de TLS. Para obtener más información, consulte [Oracle Database FIPS 140-2 Settings](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/dbseg/oracle-database-fips-140-settings.html#GUID-DDBEB3F9-B216-44BB-8C18-43B5E468CBBB) en la documentación de Oracle.

## Compatibilidad de certificados con conjuntos de cifrado
<a name="Appendix.Oracle.Options.SSL.CertificateCompatibility"></a>

RDS para Oracle admite certificados RSA y de algoritmo de firma digital de curva elíptica (ECDSA). Al configurar SSL para la instancia de base de datos, debe asegurarse de que los conjuntos de cifrado que especifique en la configuración de la opción `SQLNET.CIPHER_SUITE` sean compatibles con el tipo de certificado utilizado por la instancia de base de datos.

En la siguiente tabla, se muestra la compatibilidad entre los tipos de certificados y los conjuntos de cifrado:


| Tipo de certificado | Conjuntos de cifrado compatibles | Conjuntos de cifrado incompatibles | 
| --- | --- | --- | 
| Certificados RSA (rds-ca-2019, rds-ca-rsa2048-g1, rds-ca-rsa4096-g1) |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  | 
| Certificados de ECDSA (rds-ca-ecc384-g1) |  TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384  |  SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA SSL\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA256 SSL\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1GCM\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA384 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA256 TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1CBC\$1SHA TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1128\$1CBC\$1SHA  | 

Al especificar varios conjuntos de cifrado en la configuración de la opción `SQLNET.CIPHER_SUITE`, asegúrese de incluir al menos un conjunto de cifrado que sea compatible con el tipo de certificado utilizado por la instancia de base de datos. Si utiliza un grupo de opciones con varias instancias de base de datos que tienen distintos tipos de certificados, incluya al menos un conjunto de cifrado para cada tipo de certificado.

Si intenta asociar un grupo de opciones a una opción de SSL que contenga solo conjuntos de cifrado incompatibles con el tipo de certificado de una instancia de base de datos, la operación producirá un error y aparecerá un mensaje de error que indica la incompatibilidad.

# Adición de la opción SSL
<a name="Appendix.Oracle.Options.SSL.OptionGroup"></a>

Para usar SSL, su instancia de base de datos de RDS para Oracle debe estar asociada a un grupo de opciones que incluya la opción `SSL`.

## Consola
<a name="Appendix.Oracle.Options.SSL.OptionGroup.Console"></a>

**Para agregar la opción SSL a un grupo de opciones, realice el siguiente procedimiento:**

1. Cree un nuevo grupo de opciones o identifique uno ya existente al que pueda añadir la opción `SSL`.

   Para obtener información acerca de cómo crear un grupo de opciones, consulte [Creación de un grupo de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. Agregue la opción `SSL` al grupo de opciones.

   Si solo desea utilizar conjuntos de cifrado verificados por FIPS para las conexiones SSL, establezca la opción `FIPS.SSLFIPS_140` en `TRUE`. Para obtener información sobre el estándar FIPS, consulte [Compatibilidad FIPS](Appendix.Oracle.Options.SSL.md#Appendix.Oracle.Options.SSL.FIPS).

   Para obtener información acerca de cómo añadir una opción a un grupo de opciones, consulte [Agregar una opción a un grupo de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption).

1. Cree una nueva instancia de base de datos de RDS para Oracle y asocie el grupo de opciones a ella, o bien modifique una instancia de base de datos de RDS para Oracle para asociarla al grupo de opciones.

   Para obtener información acerca de la creación de una instancia de base de datos, consulte [Creación de una instancia de base de datos de Amazon RDS](USER_CreateDBInstance.md).

   Para obtener información acerca de la modificación de una instancia de base de datos, consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

## AWS CLI
<a name="Appendix.Oracle.Options.SSL.OptionGroup.CLI"></a>

**Para agregar la opción SSL a un grupo de opciones, realice el siguiente procedimiento:**

1. Cree un nuevo grupo de opciones o identifique uno ya existente al que pueda añadir la opción `SSL`.

   Para obtener información acerca de cómo crear un grupo de opciones, consulte [Creación de un grupo de opciones](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. Añada la opción `SSL` al grupo de opciones.

   Especifique las siguientes opciones de configuración:
   + `Port`: el número de puerto SSL.
   + `VpcSecurityGroupMemberships`: el grupo de seguridad de VPC para el que se ha habilitado la opción.
   + `SQLNET.SSL_VERSION`: la versión TLS que el cliente puede utilizar para conectarse a la instancia de base de datos.

   Por ejemplo, el siguiente comando de la AWS CLI añade la opción `SSL` a un grupo de opciones denominado `ora-option-group`.  
**Example**  

   Para Linux, macOS o: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}]'
   ```

   En: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}]'
   ```

1. Cree una nueva instancia de base de datos de RDS para Oracle y asocie el grupo de opciones a ella, o bien modifique una instancia de base de datos de RDS para Oracle para asociarla al grupo de opciones.

   Para obtener información acerca de la creación de una instancia de base de datos, consulte [Creación de una instancia de base de datos de Amazon RDS](USER_CreateDBInstance.md).

   Para obtener información acerca de la modificación de una instancia de base de datos, consulte [Modificación de una instancia de base de datos de Amazon RDS](Overview.DBInstance.Modifying.md).

# Configuración de SQL\$1Plus para utilizar SSL con una instancia de base de datos de RDS para Oracle
<a name="Appendix.Oracle.Options.SSL.ClientConfiguration"></a>

Para poder conectarse a una instancia de base de datos de RDS para Oracle que utilice la opción Oracle SSL, deberá configurar SQL\$1Plus antes de conectarse.

**nota**  
Para permitir el acceso a la instancia de base de los clientes adecuados, asegúrese de que configuren los grupos de seguridad correctamente. Para obtener más información, consulte [Control de acceso con grupos de seguridad](Overview.RDSSecurityGroups.md). Estas instrucciones también son para SQL\$1Plus y otros clientes que usan directamente un sistema interno de Oracle. Para las conexiones JDBC, consulte [Configuración de una conexión SSL a través de JDBC](Appendix.Oracle.Options.SSL.JDBC.md).

**Para configurar SQL\$1Plus para que use SSL para conectarse a una instancia de base de datos de RDS para Oracle**

1. Establezca la variable de entorno `ORACLE_HOME` en la ubicación del directorio principal de Oracle.

   La ruta al directorio principal de Oracle depende de cada instalación. En el ejemplo siguiente, se establece la variable de entorno `ORACLE_HOME`.

   ```
   prompt>export ORACLE_HOME=/home/user/app/user/product/19.0.0/dbhome_1
   ```

   Para obtener más información sobre cómo establecer variables de entorno de Oracle, consulte [SQL\$1Plus Environment Variables](http://docs.oracle.com/database/121/SQPUG/ch_two.htm#SQPUG331) en la documentación de Oracle y vea además la guía de instalación de Oracle correspondiente a su sistema operativo.

1. Agregue `$ORACLE_HOME/lib` a la variable de entorno `LD_LIBRARY_PATH`.

   En el ejemplo siguiente, se establece la variable de entorno LD\$1LIBRARY\$1PATH.

   ```
   prompt>export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib 
   ```

1. Cree un directorio para el wallet de Oracle en `$ORACLE_HOME/ssl_wallet`.

   En el ejemplo siguiente, se crea el directorio del wallet de Oracle.

   ```
   prompt>mkdir $ORACLE_HOME/ssl_wallet
   ```

1. Descargue el archivo de paquete de certificados .pem que funciona con todas las Regiones de AWS y coloque el archivo en el directorio ssl\$1wallet. Para obtener más información, consulte [Uso de SSL/TLS para cifrar una conexión a una instancia o un clúster de base de datos](UsingWithRDS.SSL.md).

1. En el directorio `$ORACLE_HOME/network/admin`, modifique o cree el archivo `tnsnames.ora` e incluya la siguiente entrada.

   ```
   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")
       )
     )
   ```

1. En el mismo directorio, modifique o cree el archivo sqlnet.ora e incluya los siguientes parámetros.
**nota**  
Para comunicarse con entidades a través de una conexión segura TLS, Oracle requiere un wallet con los certificados necesarios para la autenticación. Puede usar la utilidad ORAPKI de Oracle para crear y mantener los wallets de Oracle, tal y como se muestra en el paso 7. Para obtener más información, consulte [Setting Up Oracle Wallet Using ORAPKI (Configuración de wallet de Oracle mediante ORAPKI)](https://docs.oracle.com/cd/E92519_02/pt856pbr3/eng/pt/tsvt/task_SettingUpOracleWalletUsingORAPKI.html) en la documentación de 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
   ```
**nota**  
Puede establecer `SSL_VERSION` en un valor superior si su instancia de base de datos es compatible.

1. Ejecute el siguiente comando para crear el wallet de Oracle.

   ```
   prompt>orapki wallet create -wallet $ORACLE_HOME/ssl_wallet -auto_login_only
   ```

1. Extraiga cada certificado del archivo de paquete .pem en un archivo .pem independiente mediante una utilidad del sistema operativo.

1. Agregue cada certificado a su wallet mediante comandos `orapki` independientes y sustituya `certificate-pem-file` por el nombre absoluto del archivo .pem.

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

   Para obtener más información, consulte [Rotar certificados SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md).

# Conexión a una instancia de base de datos de RDS para Oracle mediante SSL
<a name="Appendix.Oracle.Options.SSL.Connecting"></a>

Después de configurar SQL\$1Plus para utilizar SSL tal como se ha descrito anteriormente, puede conectarse a la instancia de base de datos de RDS para Oracle con la opción SSL. Opcionalmente, puede primero exportar el valor `TNS_ADMIN` que apunta al directorio que contiene los archivos tnsnames.ora y sqlnet.ora. Si realiza este procedimiento, se asegurará de que SQL\$1Plus puede detectar estos archivos sistemáticamente. En el siguiente ejemplo se exporta el valor `TNS_ADMIN`.

```
export TNS_ADMIN = ${ORACLE_HOME}/network/admin          
```

Conéctese a la instancia de base de datos. Por ejemplo, puede conectarse utilizando SQL\$1Plus y un *<net\$1service\$1name>* en un archivo tnsnames.ora.

```
sqlplus mydbuser@net_service_name          
```

También puede conectar a la instancia de base de datos mediante SQL\$1Plus sin utilizar un archivo tnsnames.ora utilizando el siguiente comando.

```
sqlplus 'mydbuser@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = endpoint) (PORT = ssl_port_number))(CONNECT_DATA = (SID = database_name)))'          
```

También puede conectarse a la instancia de base de datos de RDS para Oracle sin utilizar SSL. Por ejemplo, el siguiente comando se conecta a la instancia de base de datos a través del puerto de texto sin cifrar que no utiliza el cifrado SSL.

```
sqlplus 'mydbuser@(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = endpoint) (PORT = port_number))(CONNECT_DATA = (SID = database_name)))'          
```

Si desea cerrar el acceso al puerto TCP (Protocolo de control de transmisión), cree un grupo de seguridad sin entradas de dirección IP y añádalo a la instancia. Esta adición cierra las conexiones a través del puerto TCP, pero permite las conexiones a través del puerto SSL que se realizan desde las direcciones IP incluidas en el rango permitido por el grupo de seguridad de la opción SSL.

# Configuración de una conexión SSL a través de JDBC
<a name="Appendix.Oracle.Options.SSL.JDBC"></a>

Para utilizar una conexión SSL a través de JDBC, debe crear un almacén de claves, confiar en el certificado de CA raíz de Amazon RDS y utilizar el siguiente fragmento de código especificado.

Para crear el almacén de claves con formato JKS, puede utilizar el siguiente comando. Para obtener más información acerca de la creación del almacén de claves, consulte [Creating a keystore](https://docs.oracle.com/cd/E35822_01/server.740/es_admin/src/tadm_ssl_jetty_keystore.html) en la documentación de Oracle. Para obtener información de referencia, consulte [keytool](https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html) en la *Referencia de herramientas de la plataforma Java, edición estándar*.

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

Siga estos pasos para confiar en el certificado de CA raíz de Amazon RDS.

**Para confiar en el certificado de CA raíz de Amazon RDS**

1. Descargue el archivo de paquete de certificados .pem que funciona con todas las Regiones de AWS y coloque el archivo en el directorio ssl\$1wallet.

   Para obtener más información acerca de cómo descargar certificados, consulte [Uso de SSL/TLS para cifrar una conexión a una instancia o un clúster de base de datos](UsingWithRDS.SSL.md).

1. Extraiga cada certificado del archivo .pem en un archivo independiente mediante una utilidad del sistema operativo.

1. Convierta cada certificado al formato .der mediante un comando `openssl` independiente y sustituya *certificate-pem-file* por el nombre del archivo .pem del certificado (sin la extensión .pem).

   ```
   openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der                
   ```

1. Importe cada certificado al almacén de claves utilizando el siguiente comando.

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

   Para obtener más información, consulte [Rotar certificados SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md).

1. Confirme que el almacén de claves se haya creado correctamente.

   ```
   keytool -list -v -keystore clientkeystore.jks                                            
   ```

   Especifique la contraseña del almacén de claves cuando se le solicite.

El siguiente ejemplo de código muestra cómo configurar la conexión SSL mediante 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
    }
}
```

**nota**  
Especifique una contraseña distinta de la que se muestra aquí como práctica recomendada de seguridad.

# Obligatoriedad de la coincidencia del DN con una conexión SSL
<a name="Appendix.Oracle.Options.SSL.DNMatch"></a>

Puede utilizar el parámetro de Oracle `SSL_SERVER_DN_MATCH` para hacer que sea obligatorio que el nombre distinguido (DN) del servidor de bases de datos coincida con su nombre de servicio. Si la verificación de coincidencia es obligatoria, SSL se asegura de que el certificado sea el del servidor. Si la verificación de coincidencia no es obligatoria, SSL realiza la comprobación, pero permite la conexión, independientemente de que haya o no una coincidencia. Si no se hace obligatoria la coincidencia, el servidor podría falsificar su identidad.

Para hacer obligatoria la coincidencia del DN, añada la propiedad de coincidencia del DN y utilice la cadena de conexión especificada a continuación.

Añada la propiedad a la conexión del cliente para hacer obligatoria la coincidencia del DN.

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

Utilice la siguiente cadena de conexión para hacer obligatoria la coincidencia del DN al utilizar 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);
```

# Solución de problemas de las conexiones SSL
<a name="Appendix.Oracle.Options.SSL.troubleshooting"></a>

Puede consultar la base de datos y recibir el error `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.
```

Este error se produce cuando el cliente intenta conectarse mediante una versión de TLS que el servidor no admite. Para evitar este error, edite sqlnet.ora y establezca `SSL_VERSION` en la versión de TLS correcta. Para obtener más información, consulte el [documento de soporte de Oracle 2748438.1](https://support.oracle.com/epmos/faces/DocumentDisplay?id=2748438.1) en My Oracle Support.