

# 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
<a name="ssl-certificate-rotation-aurora-postgresql"></a>

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](UsingWithRDS.SSL-certificate-rotation.md). 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](UsingWithRDS.SSL.md). 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](AuroraPostgreSQL.Security.md#AuroraPostgreSQL.Security.SSL).

**Topics**
+ [Determinación de si las aplicaciones se conectan a sus clústeres de base de datos de PostgreSQL de Aurora mediante SSL](#ssl-certificate-rotation-aurora-postgresql.determining-server)
+ [Determinación de si un cliente necesita una verificación de certificados para conectarse](#ssl-certificate-rotation-aurora-postgresql.determining-client)
+ [Actualización del almacén de confianza de su aplicación](#ssl-certificate-rotation-aurora-postgresql.updating-trust-store)
+ [Uso de conexiones SSL/TLS para diferentes tipos de aplicaciones](#ssl-certificate-rotation-aurora-postgresql.applications)

## Determinación de si las aplicaciones se conectan a sus clústeres de base de datos de PostgreSQL de Aurora mediante SSL
<a name="ssl-certificate-rotation-aurora-postgresql.determining-server"></a>

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 [Grupos de parámetros para Amazon Aurora](USER_WorkingWithParamGroups.md).

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
<a name="ssl-certificate-rotation-aurora-postgresql.determining-client"></a>

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 para clientes con libpq (como psql) y JDBC está establecido en `prefer`. 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
<a name="ssl-certificate-rotation-aurora-postgresql.updating-trust-store"></a>

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](https://www.postgresql.org/docs/current/ssl-tcp.html) 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
<a name="ssl-certificate-rotation-aurora-postgresql.updating-trust-store.jdbc"></a>

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](UsingWithRDS.SSL.md).

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](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script).

## Uso de conexiones SSL/TLS para diferentes tipos de aplicaciones
<a name="ssl-certificate-rotation-aurora-postgresql.applications"></a>

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](https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-PARAMKEYWORDS) en la documentación de PostgreSQL. Para obtener la lista completa de variables de entorno, consulte [ Variables de entorno](https://www.postgresql.org/docs/current/libpq-envars.html) 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](https://www.pgadmin.org/docs/pgadmin4/latest/server_dialog.html).
+ **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](https://jdbc.postgresql.org/documentation/use/) en la documentación de PostgreSQL. Para obtener información sobre la conexión con SSL/TLS, consulte [Configuración del cliente](https://jdbc.postgresql.org/documentation/ssl/) 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](https://pypi.org/project/psycopg2/). Para obtener un breve tutorial sobre cómo conectarse a una base de datos de PostgreSQL, consulte [Tutorial de psycopg2](https://wiki.postgresql.org/wiki/Psycopg2_Tutorial). Puede encontrar información acerca de las opciones que acepta del comando de conexión en [El contenido del módulo psycopg2](https://www.psycopg.org/docs/module.html).

**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](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating).