Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo puedo usar una conexión SSL para conectarme correctamente a mi instancia de Amazon RDS?
Quiero usar una conexión Secure Socket Layer (SSL) para conectarme a mi instancia de base de datos de Amazon Relational Database Service (Amazon RDS).
Descripción corta
Para cifrar una conexión a una instancia de base de datos que ejecute MySQL, MariaDB, Microsoft SQL Server, Oracle o PostgreSQL, utilice SSL o Transport Layer Security (TLS) desde su aplicación. Las conexiones SSL/TLS proporcionan una capa de seguridad porque cifran los datos que se transfieren entre el cliente y la instancia de base de datos. Un certificado de servidor proporciona una capa adicional de seguridad porque valida que la conexión se está realizando con una instancia de base de datos de Amazon RDS.
Al aprovisionar una instancia de base de datos, Amazon RDS crea un certificado SSL e instala el certificado en la instancia. Estos certificados están firmados por una autoridad de certificación (CA). El certificado SSL incluye el punto de enlace de la instancia de base de datos como nombre común del certificado SSL para proteger la instancia contra los ataques de suplantación de identidad. Un certificado SSL creado por Amazon RDS es la entidad raíz de confianza y funciona en la mayoría de los casos. Sin embargo, si la aplicación no acepta cadenas de certificados, es posible que el certificado no funcione. En estos casos, utilice un certificado intermedio para conectarse a su región de AWS. Por ejemplo, cuando usa SSL para conectarse a las regiones de AWS GovCloud (EE. UU.), debe usar un certificado intermedio.
Puede descargar un paquete de certificados que contenga los certificados intermedios y raíz para todas las regiones desde AWS Trust Services. Si su aplicación está en Microsoft Windows y requiere un archivo PKCS7, puede descargar el paquete de certificados PKCS7 de Amazon Trust Services. Este paquete contiene los certificados intermedios y raíz.
Resolución
Cada motor de base de datos tiene su propio proceso para implementar SSL/TLS. Para implementar una conexión SSL/TLS para su clúster de base de datos, utilice uno de los siguientes métodos en función del motor de base de datos.
Amazon RDS para Oracle
En el caso de las instancias de Amazon RDS para Oracle, para activar el modo SSL, añada la opción de SSL en su grupo de opciones personalizado.
RDS para Oracle admite las versiones 1.0 y 1.2 de TLS. Para utilizar la opción SSL de Oracle, utilice la configuración de la opción SQLNET.SSL_VERSION en su grupo de opciones. Se permiten los siguientes valores para esta configuración de la opción:
- «1.0»: los clientes solo pueden conectarse a la instancia de base de datos mediante TLS 1.0.
- «1.2»: los clientes solo pueden conectarse a la instancia de base de datos mediante TLS 1.2.
- «1.2 o 1.0»: los clientes pueden conectarse a la instancia de base de datos mediante TLS 1.2 o 1.0.
Para las opciones de SSL de Oracle existentes, SQLNET.SSL_VERSION se establece automáticamente en «1.0». Si es necesario, puede cambiar la configuración.
Debe configurar el cliente SQL*Plus para que utilice SSL antes de conectarse a una instancia de base de datos de Oracle que utilice la opción de SSL de Oracle. Para usar 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, a continuación, configurar la conexión SSL.
Ejemplo de código que usa JDBC para configurar la conexión SSL:
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 = "example-dns"; private static final Integer SSL_PORT = "example-ssl-option-port-in-option-group"; private static final String DB_SID = "example-oracle-sid"; private static final String DB_USER = "example-username"; private static final String DB_PASSWORD = "example-password"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "example-file-path-to-keystore"; private static final String KEY_STORE_PASS = "example-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("example-username", DB_USER); properties.put("example-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 there is no exception, it means that an SSL connection can be opened } }
Antes de usar SSL para conectarse a su instancia de RDS para Oracle, compruebe lo siguiente:
- El certificado raíz de RDS se descarga y se agrega a un archivo de cartera. Este archivo se almacena en un directorio especificado por el parámetro WALLET_LOCATION del archivo sqlnet.ora.
- Tiene el número de puerto SSL correcto en la entrada de TNS.
- El grupo de seguridad de Amazon RDS está configurado para permitir las conexiones entrantes desde sus máquinas a través del puerto SSL.
- El firewall o las políticas de seguridad están configuradas adecuadamente para permitir el tráfico en el puerto SSL desde Amazon RDS.
Amazon RDS para MariaDB
Amazon RDS para MariaDB admite las versiones 1.0, 1.1, 1.2 y 1.3 de TLS. En una conexión TLS unidireccional, TLS se usa sin un certificado de cliente y solo se puede autenticar el servidor. Por lo tanto, la autenticación solo es posible en una dirección. Sin embargo, el cifrado sigue siendo posible en ambas direcciones. Para obtener más información, consulte Activación de TLS unidireccional para los clientes de MariaDB en el sitio web de MariaDB.
Con la verificación del certificado del servidor, el cliente comprueba que el certificado pertenece al servidor. Para obtener más información, consulte Verificación del certificado del servidor en el sitio web de MariaDB.
Para iniciar el cliente MySQL 5.7 o una versión posterior con un certificado RDS, ejecute un comando similar al siguiente:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-mode=VERIFY_IDENTITY
Para iniciar el cliente MariaDB con certificado RDS, ejecute un comando similar al siguiente:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-verify-server-cert
Para requerir conexiones SSL para usuarios o cuentas específicos, ejecute la siguiente consulta según su versión de MariaDB:
ALTER USER 'test'@'%' REQUIRE SSL;
Para la versión 10.5 y posteriores de RDS para MariaDB con el esquema de rendimiento activado y las aplicaciones conectadas a una instancia de base de datos, compruebe qué conexiones utilizan SSL/TLS:
MariaDB> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
Nota: Para obtener más información sobre el esquema de rendimiento, consulte Esquema de rendimiento en el sitio web de MariaDB.
Amazon RDS para MySQL
MySQL usa OpenSSL para conexiones seguras. Para obtener más información, consulte Compatibilidad con SSL/TLS para instancias de bases de datos MySQL en Amazon RDS.
De forma predeterminada, los programas cliente de MySQL intentan establecer una conexión cifrada cuando el servidor admite conexiones cifradas. Para mayor seguridad, utilice el parámetro --ssl-ca para hacer referencia al certificado SSL que incluye el punto de enlace de la instancia de base de datos como nombre común. El certificado SSL protege la instancia contra los ataques de suplantación de identidad.
Para usar el parámetro --ssl-ca en MySQL 5.7 y versiones posteriores para iniciar el cliente, ejecute un comando similar al siguiente:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-mode=VERIFY_IDENTITY
Para requerir conexiones SSL para usuarios o cuentas específicos, ejecute un comando similar al siguiente en función de su versión de MySQL:
mysql -h myinstance.123456789012.rds-us-east-1.amazonaws.com -u testuser -p --ssl-ca=[full path]global-bundle.pem --ssl-verify-server-cert
Para MySQL 5.7 y versiones posteriores, ejecute el siguiente comando:
ALTER USER 'testuser'@'%' REQUIRE SSL;
Para las versiones 5.7 u 8.0 de RDS para MySQL con el esquema de rendimiento activado y las aplicaciones conectadas a una instancia de base de datos, compruebe qué conexiones utilizan SSL/TLS:
mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
Nota: Para obtener más información sobre el esquema de rendimiento, consulte Esquema de rendimiento en el sitio web de MariaDB.
Amazon RDS para Microsoft SQL Server
Para usar SSL para conectarse a su instancia de base de datos de RDS para Microsoft SQL Server, puede forzar el SSL para todas las conexiones o cifrar conexiones específicas.
Para cifrar las conexiones de otros clientes SQL, añada encrypt=true a la cadena de conexión. Esta cadena puede estar disponible como opción o como propiedad en la página de conexión de las herramientas de la GUI.
Para confirmar que la conexión está cifrada, ejecute la siguiente consulta:
SELECT ENCRYPT_OPTION FROM SYS.DM_EXEC_CONNECTIONS WHERE SESSION_ID = @@SPID;
Compruebe que la consulta devuelva true para encrypt_option.
Nota: Para activar el cifrado SSL para los clientes que utilizan JDBC para conectarse, es posible que deba agregar el certificado SQL de RDS al almacén de certificados de CA de Java (cacerts). Para ello, utilice la utilidad keytool.
Amazon RDS para PostgreSQL
Amazon RDS admite el cifrado SSL para las instancias de base de datos de PostgreSQL. Para obtener más información, consulte Uso de SSL con una instancia de base de datos de PostgreSQL.
Antes de conectarse a una instancia de base de datos de RDS para PostgreSQL mediante SSL, siga estos pasos:
- Descargue el certificado.
- Importe el certificado a su sistema operativo.
Para obtener más información, consulte Conexión a una instancia de base de datos de PostgreSQL mediante SSL.
Para hacer referencia al certificado, utilice el parámetro sslrootcert. Por ejemplo, sslrootcert=rds-ssl-ca-cert.pem:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg sslmode=verify-full sslrootcert=global-bundle.pem"
Para configurar las conexiones a su instancia de RDS para PostgreSQL para que usen SSL, defina rds.force_ssl en 1 (activado) en su grupo de parámetros personalizado. De forma predeterminada, este valor se establece en 0 (desactivado).
Al establecer rds.force_ssl en 1 (activado), el archivo pg_hba.conf de su instancia de base de datos se modifica para que sea compatible con la nueva configuración SSL. Para ver el resumen del contenido del pg_hba.conf, utilice la vista pg_hba_file_rules. Para obtener más información, consulte pg\ _hba\ _file\ _rules en el sitio web de PostgreSQL.
Al establecer rds.force_ssl en 0 (desactivado), el archivo pg_hba.conf tiene un aspecto similar al siguiente:
SELECT * FROM pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+-------+-------------------+------------+----------+---------+-------------+---------+------- 4 | local | {all} | {all} | | | md5 | | 10 | host | {all} | {rdsadmin} | samehost | | md5 | | 11 | host | {all} | {rdsadmin} | all | | reject | | 12 | host | {rdsadmin} | {all} | all | | reject | | 13 | host | {all} | {all} | all | | md5 | | 14 | host | {replication} | {all} | samehost | | md5 | | 15 | host | {rds_replication} | {all} | all | | md5 | | (7 rows)
Al establecer rds.force_ssl to 1 (activado), el archivo pg_hba.conf tiene un aspecto similar al siguiente:
SELECT * FROM pg_hba_file_rules; line_number | type | database | user_name | address | netmask | auth_method | options | error -------------+---------+-------------------+------------+----------+---------+-------------+---------+------- 4 | local | {all} | {all} | | | md5 | | 10 | host | {all} | {rdsadmin} | samehost | | md5 | | 11 | host | {all} | {rdsadmin} | all | | reject | | 12 | host | {rdsadmin} | {all} | all | | reject | | 13 | hostssl | {all} | {all} | all | | md5 | | 14 | host | {replication} | {all} | samehost | | md5 | | 15 | hostssl | {rds_replication} | {all} | all | | md5 | |
Nota: El valor de type para line_number (13) puede actualizarse a hostssl después de establecer rds.force_ssl en 1 (activado).
Después de activar la conexión SSL en la instancia e iniciar una conexión con la instancia de RDS para PostgreSQL, aparece un mensaje similar al siguiente:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg"
. . . SL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off) Type "help" for help.
Todas las conexiones que no son SSL se rechazan con el siguiente mensaje:
psql "host=myinstance.123456789012.rds-us-east-1.amazonaws.com port=5432 user=testuser dbname=testpg sslmode=disable"psql: FATAL: no pg_hba.conf entry for host "host.ip", user "testuser", database "testpg", SSL off
Información relacionada
Uso de SSL/TLS para cifrar una conexión a una instancia o clúster de base de datos
Vídeos relacionados


Contenido relevante
- preguntada hace 14 días
- preguntada hace un mes
- preguntada hace 2 meses
- preguntada hace 2 meses
- preguntada hace 5 meses