

# Actualización de aplicaciones para la conexión a las instancias de base de datos de PostgreSQL con los nuevos certificados SSL/TLS
<a name="ssl-certificate-rotation-postgresql"></a>

Los certificados utilizados para capas de sockets seguros o seguridad de la capa de transporte (SSL/TLS) suelen tener una vida útil establecida. Cuando los proveedores de servicios actualizan sus certificados de la autoridad de certificación (CA), los clientes deben actualizar sus aplicaciones para utilizar los certificados nuevos. A continuación, puede encontrar información sobre cómo determinar si sus aplicaciones cliente utilizan SSL/TLS para conectarse a su instancia de base de datos de Amazon RDS for PostgreSQL. También encontrará información sobre cómo comprobar si esas aplicaciones verifican el certificado del servidor cuando se conectan.

**nota**  
Una aplicación cliente configurada para verificar el certificado del servidor antes de la conexión SSL/TLS debe tener un certificado de CA válido en el almacén de confianza del cliente. Actualice el almacén de confianza del cliente cuando sea necesario para acceder a certificados nuevos.

Después actualizar sus certificados de CA en los almacenes de confianza de la aplicación de su cliente, puede rotar los certificados en sus instancias de base de datos. Se recomienda probar estos procedimientos en un entorno que no sea de producción antes de implementarlos en 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 una instancia o un clúster de base de datos](UsingWithRDS.SSL.md). Para obtener información sobre el uso de SSL/TLS con las instancias de base de datos de PostgreSQL, consulte [Uso de SSL con una instancia de base de datos PostgreSQL](PostgreSQL.Concepts.General.SSL.md).

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

## Determinación de si las aplicaciones se conectan a sus instancias de base de datos de PostfreSQL mediante SSL
<a name="ssl-certificate-rotation-postgresql.determining-server"></a>

Compruebe la configuración de la instancia 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á configurado en `0` (desactivado) para las instancias de base de datos que utilizan versiones de PostgreSQL anteriores a la versión 15. De forma predeterminada, `rds.force_ssl` está configurado en `1` (activado) para las instancias de base de datos que utilizan PostgreSQL versión 15 y versiones principales posteriores. 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 RDS](USER_WorkingWithParamGroups.md).

Si utiliza la versión 9.5 o una versión importante anterior de RDS PostgreSQL y `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)
```

Esta 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-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 masteruser -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` para verificar el certificado.

```
psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=verify-full sslrootcert=/full/path/ssl-cert.pem user=masteruser 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-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.

Para obtener información sobre la descarga del certificado raíz, consulte [Uso de SSL/TLS para cifrar una conexión a una instancia o 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).

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

## Uso de conexiones SSL/TLS para diferentes tipos de aplicaciones
<a name="ssl-certificate-rotation-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/current/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 [Connecting to the database](https://jdbc.postgresql.org/documentation/use/#connecting-to-the-database) (Conexión con la base de datos) en la documentación del controlador JDBC de PostgreSQL. Para obtener información sobre la conexión con SSL/TLS, consulte [Configuring the client](https://jdbc.postgresql.org/documentation/ssl/#configuring-the-client) (Configuración del cliente) en la documentación del controlador JDBC 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](http://initd.org/psycopg/docs/module.html#module-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 o el clúster de base de datos](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating).