Actualización de aplicaciones para la conexión a los clústeres de base de datos de PostgreSQL de Aurora con los nuevos certificados SSL/TLS - Amazon Aurora

Actualización de aplicaciones para la conexión a los clústeres de base de datos de PostgreSQL de Aurora con los nuevos certificados SSL/TLS

El 13 de enero de 2023, Amazon RDS publicó nuevos certificados de entidades de certificación (CA) para la conexión a sus clústeres de base de datos de Aurora mediante la capa de sockets seguros o la seguridad de la capa de transporte (SSL/TLS). Después, puede encontrar la información sobre la actualización de sus aplicaciones para utilizar los nuevos certificados.

Este tema puede ayudarle a determinar las aplicaciones de cualquier cliente utilizan SSL/TLS para conectarse a sus clústeres de base de datos. Si lo hacen, puede comprobar de manera adicional si esas aplicaciones precisan una verificación de certificados para conectarse.

nota

Algunas aplicaciones están configuradas para conectarse a los clústeres de base de datos de PostgreSQL de Aurora solo si pueden verificar con éxito el certificado del servidor.

Para esas aplicaciones, debe actualizar los almacenes de confianza de la aplicación de su cliente para incluir los nuevos certificados de CA.

Después de que actualice sus certificados de CA en los almacenes de confianza de la aplicación de su cliente, puede rotar los certificados en sus clústeres de base de datos. Recomendamos encarecidamente probar estos procedimientos en un entorno de desarrollo o ensayo antes de implementarlos en sus entornos de producción.

Para obtener más información acerca de la rotación de certificados, consulte Rotar certificados SSL/TLS. Para obtener más información acerca de cómo descargar certificados, consulte Uso de SSL/TLS para cifrar una conexión a un clúster de base de datos. Para obtener información sobre el uso de SSL/TLS con los clústeres de base de datos de PostgreSQL, consulte Protección de los datos de Aurora PostgreSQL con SSL/TLS.

Determinación de si las aplicaciones se conectan a sus clústeres de base de datos de PostgreSQL de Aurora mediante SSL

Compruebe la configuración del clúster de base de datos para obtener el valor del parámetro de rds.force_ssl. De forma predeterminada, el parámetro rds.force_ssl está definido como 0 (desactivado). Si el parámetro rds.force_ssl está configurado como 1 (activado), se precisa que los clientes utilicen SSL/TLS para las conexiones. Para obtener más información acerca de los grupos de parámetros, consulte Working with parameter groups (Trabajar con grupos de parámetros).

Si rds.force_ssl no está configurado como 1 (activado), consulte la vista pg_stat_ssl para comprobar las conexiones que utilizan SSL. Por ejemplo, la siguiente consulta devuelve solo las conexiones SSL y la información acerca de los clientes que utilizan SSL.

select datname, usename, ssl, client_addr from pg_stat_ssl inner join pg_stat_activity on pg_stat_ssl.pid = pg_stat_activity.pid where ssl is true and usename<>'rdsadmin';

Solo las filas que utilizan conexiones SSL/TLS se muestran con información sobre la conexión. A continuación, se muestra un ejemplo del resultado.

datname | usename | ssl | client_addr ----------+---------+-----+------------- benchdb | pgadmin | t | 53.95.6.13 postgres | pgadmin | t | 53.95.6.13 (2 rows)

La anterior consulta solo muestra las conexiones actuales en el momento de la consulta. La ausencia de resultados no indica que no haya ninguna aplicación utilizando conexiones SSL. Se pueden establecer otras conexiones SSL en un momento diferente.

Determinación de si un cliente necesita una verificación de certificados para conectarse

Cuando un cliente, como psql o JDBC, está configurado con soporte de SSL, primero el cliente intenta conectarse a la base de datos con SSL de manera predeterminada. SI el cliente no puede conectarse con SSL, vuelve a la conexión sin SSL. El modo sslmode predeterminado utilizado es diferente entre los clientes basados en libpq (como psql) y JDBC. Los clientes basados en libpq utilizan de manera predeterminada prefer mientras que los clientes JDBC utilizan verify-full. El certificado del servidor se verifica solo cuando se proporciona sslrootcert con sslmode configurado como verify-ca o verify-full. Se lanza un error si el certificado no es válido.

Utilice PGSSLROOTCERT para verificar el certificado con la variable de entorno PGSSLMODE, con PGSSLMODE establecido como verify-ca o verify-full.

PGSSLMODE=verify-full PGSSLROOTCERT=/fullpath/ssl-cert.pem psql -h pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com -U primaryuser -d postgres

Utilice el argumento sslrootcert para verificar el certificado con sslmode en el formato de la cadena de conexión, con sslmode establecido como verify-ca o verify-full.

psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=primaryuser dbname=postgres"

Por ejemplo, en el caso anterior, si utiliza un certificado raíz no válido, observa un error similar a lo siguiente en su cliente.

psql: SSL error: certificate verify failed

Actualización del almacén de confianza de su aplicación

Para obtener información sobre la actualización del almacén de confianza para las aplicaciones de PostgreSQL, consulte Conexiones TCP/IP seguras con SSL en la documentación de PostgreSQL.

nota

Cuando actualice el almacén de confianza, puede retener certificados antiguos además de añadir los nuevos certificados.

Actualización del almacén de confianza de su aplicación para JDBC

Puede actualizar el almacén de confianza para las aplicaciones que utilizan JDBC para las conexiones SSL/TLS.

Para obtener información sobre la descarga del certificado raíz, consulte Uso de SSL/TLS para cifrar una conexión a un clúster de base de datos.

Para obtener secuencias de comandos de ejemplo que importan certificados, consulte Script de muestra para la importación de certificados en su almacén de confianza.

Uso de conexiones SSL/TLS para diferentes tipos de aplicaciones

Lo siguiente proporciona información acerca del uso de conexiones SSL/TLS para diferentes tipo de aplicaciones:

  • psql

    El cliente se ha invocado desde la línea de comandos especificando las opciones como una cadena de conexión o como variables del entorno. Para las conexiones SSL/TLS, las opciones relevantes son sslmode (variable de entorno PGSSLMODE), sslrootcert (variable de entorno PGSSLROOTCERT).

    Para obtener la lista completa de opciones, consulte Palabras de clave del parámetro en la documentación de PostgreSQL. Para obtener la lista completa de variables de entorno, consulte Variables de entorno en la documentación de PostgreSQL.

  • pgAdmin

    Este cliente basado en el navegador es una interfaz más intuitiva para conectarse a la base de datos de PostgreSQL.

    Para obtener información sobre la configuración de las conexiones, consulte la documentación de pgAdmin.

  • JDBC

    JDBC habilita las conexiones de base de datos con aplicaciones de Java.

    Para obtener información general sobre la conexión a la base de datos de PostgreSQL con JDBC, consulte Conexión a la base de datos en la documentación de PostgreSQL. Para obtener información sobre la conexión con SSL/TLS, consulte Configuración del cliente en la documentación de PostgreSQL.

  • Python

    Una biblioteca de Python popular para la conexión a las bases de datos de PostgreSQL es psycopg2.

    Para obtener información acerca del uso de psycopg2, consulte la documentación de psycopg2. Para obtener un breve tutorial sobre cómo conectarse a una base de datos de PostgreSQL, consulte Tutorial de psycopg2. Puede encontrar información acerca de las opciones que acepta del comando de conexión en El contenido del módulo psycopg2.

importante

Después de que haya determinado que sus conexiones de base de datos utilizan SSL/TLS y haya actualizado el almacén de confianza de su aplicación, puede actualizar su base de datos para que utilice los certificados de rds-ca-rsa2048-g1. Para obtener instrucciones, consulte el paso 3 en Actualización del certificado de entidad de certificación modificando la instancia de base de datos.