

# 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 obtener más información acerca de la creación del almacén de claves, consulte [Creating a keystore](https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdbc/client-side-security.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\_wallet.

   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 String 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=%s))(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.