

# 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.