

# Atualizar aplicações para conexão com instâncias de banco de dados PostgreSQL usando novos certificados SSL/TLS
<a name="ssl-certificate-rotation-postgresql"></a>

Os certificados usados para Secure Socket Layer ou TLS Transport Layer Security (SSL/TLS) geralmente têm uma vida útil definida. Quando os provedores de serviços atualizam seus certificados de Autoridade de Certificação (CA), os clientes devem atualizar suas aplicações para usar os novos certificados. A seguir, você pode encontrar informações sobre como determinar se suas aplicações cliente usam SSL/TLS para conectar-se à sua instância de banco de dados Amazon RDS for PostgreSQL. Você também pode encontrar informações sobre como conferir se essas aplicações verificam o certificado do servidor quando elas se conectam.

**nota**  
Uma aplicação cliente configurada para verificar o certificado do servidor antes da conexão SSL/TLS deve ter um certificado válido de uma CA no repositório de confiança do cliente. Atualize o repositório de confiança do cliente quando houver novos certificados.

Depois de atualizar seus certificados de CA nos armazenamentos confiáveis do aplicativo cliente, você pode fazer o rodízio dos certificados nas suas instâncias de banco de dados. É altamente recomendável testar esses procedimentos em um ambiente não voltado à produção antes de implementá-los em seus ambientes de produção.

Para ter mais informações sobre a mudança de certificados, consulte [Alternar o certificado SSL/TLS](UsingWithRDS.SSL-certificate-rotation.md). Para ter mais informações sobre como fazer download de certificados, consulte [Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados](UsingWithRDS.SSL.md). Para obter informações sobre o uso de SSL/TLS com instâncias de bancos de dados PostgreSQL, consulte [Usar o SSL com uma instância de banco de dados PostgreSQL](PostgreSQL.Concepts.General.SSL.md).

**Topics**
+ [Determinar se as aplicações estão se conectando a instâncias de banco de dados PostgreSQL usando SSL](#ssl-certificate-rotation-postgresql.determining-server)
+ [Determinar se um cliente requer verificação de certificado para se conectar](#ssl-certificate-rotation-postgresql.determining-client)
+ [Atualizar o armazenamento confiável de aplicações](#ssl-certificate-rotation-postgresql.updating-trust-store)
+ [Usar conexões SSL/TLS para diferentes tipos de aplicações](#ssl-certificate-rotation-postgresql.applications)

## Determinar se as aplicações estão se conectando a instâncias de banco de dados PostgreSQL usando SSL
<a name="ssl-certificate-rotation-postgresql.determining-server"></a>

Verifique a configuração da instância de banco de dados para obter o valor do parâmetro `rds.force_ssl`. Por padrão, o parâmetro `rds.force_ssl` é definido como `0` (desativado) para instâncias de banco de dados usando versões do PostgreSQL anteriores à 15. Por padrão, `rds.force_ssl` é definido como `1` (ativo) para instâncias de banco de dados usando o PostgreSQL versão 15 e versões principais posteriores. Se o parâmetro `rds.force_ssl` estiver definido como `1` (ativado), os clientes serão obrigados a usar SSL/TLS para conexões. Para ter mais informações sobre parameter groups, consulte [Grupos de parâmetros para Amazon RDS](USER_WorkingWithParamGroups.md).

Se você estiver usando o RDS PostgreSQL versão 9.5 ou versão posterior principal e `rds.force_ssl` não estiver definido como `1` (ativado), consulte a visualização `pg_stat_ssl` para verificar conexões usando SSL. Por exemplo, a consulta a seguir retorna apenas conexões SSL e informações sobre os clientes que usam 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';
```

Somente as linhas que usarem conexões SSL/TLS serão exibidas com informações sobre a conexão. Esta é uma saída de exemplo.

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

Esta consulta exibe apenas as conexões atuais no momento da consulta. A ausência de resultados não indica que nenhum aplicativo esteja usando conexões SSL. Outras conexões SSL podem ser estabelecidas em um momento diferente.

## Determinar se um cliente requer verificação de certificado para se conectar
<a name="ssl-certificate-rotation-postgresql.determining-client"></a>

Quando um cliente, como psql ou JDBC, é configurado com suporte para SSL, primeiro ele tenta se conectar ao banco de dados via SSL por padrão. Se esse cliente não puder se conectar via SSL, ele voltará a se conectar sem SSL. O modo padrão `sslmode` utilizado para clientes baseados em libpq (como o psql) e o JDBC é definido como `prefer`. O certificado no servidor é verificado apenas quando `sslrootcert` é fornecido com `sslmode` definido como `verify-ca` ou `verify-full`. Um erro será lançado se o certificado for inválido.

Use `PGSSLROOTCERT` para verificar o certificado com a variável de ambiente `PGSSLMODE`, com `PGSSLMODE` definido como `verify-ca` ou `verify-full`.

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

Use o argumento `sslrootcert` para verificar o certificado com `sslmode` no formato de string de conexão, com `sslmode` definido como `verify-ca` ou `verify-full` para verificar o 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 exemplo, no caso anterior, se você estiver usando um certificado raiz inválido, verá um erro semelhante ao seguinte no seu cliente.

```
psql: SSL error: certificate verify failed
```

## Atualizar o armazenamento confiável de aplicações
<a name="ssl-certificate-rotation-postgresql.updating-trust-store"></a>

Para obter informações sobre como atualizar o armazenamento de confiança para aplicações PostgreSQL, consulte [Secure TCP/IP connections with SSL](https://www.postgresql.org/docs/current/ssl-tcp.html) na documentação do PostgreSQL.

Para obter informações sobre como baixar o certificado raiz, consulte [Usar SSL/TLS para criptografar uma conexão com uma instância ou um cluster de banco de dados](UsingWithRDS.SSL.md).

Para obter exemplos de scripts que importam certificados, consulte [Script de exemplo para importar certificados para o seu armazenamento confiável](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-sample-script).

**nota**  
Ao atualizar o armazenamento confiável, é possível reter certificados mais antigos, além de adicionar os novos certificados.

## Usar conexões SSL/TLS para diferentes tipos de aplicações
<a name="ssl-certificate-rotation-postgresql.applications"></a>

Veja a seguir informações sobre o uso de conexões SSL/TLS para diferentes tipos de aplicativos:
+ **psql**

  O cliente é chamado da linha de comandos especificando opções como uma string de conexão ou como variáveis de ambiente. Para conexões SSL/TLS, as opções relevantes são `sslmode` (variável de ambiente `PGSSLMODE`), `sslrootcert` (variável de ambiente `PGSSLROOTCERT`).

  Para conhecer a lista completa de opções, consulte [Palavras-chave de parâmetros](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-PARAMKEYWORDS) na documentação do PostgreSQL. Para conhecer a lista completa de variáveis de ambiente, consulte [Variáveis de ambiente](https://www.postgresql.org/docs/current/libpq-envars.html) na documentação do PostgreSQL.
+ **pgAdmin**

  Esse cliente baseado em navegador é uma interface mais amigável para conectar-se a um banco de dados PostgreSQL.

  Para obter informações sobre como configurar conexões, consulte a [Documentação de pgAdmin](https://www.pgadmin.org/docs/pgadmin4/latest/server_dialog.html).
+ **JDBC**

  O JDBC permite conexões de banco de dados com aplicativos Java.

  Para obter informações gerais sobre como conectar-se a um banco de dados PostgreSQL com JDBC, consulte [Connecting to the database](https://jdbc.postgresql.org/documentation/use/#connecting-to-the-database) (Conectar-se ao banco de dados) na documentação do driver do PostgreSQL. Para obter informações sobre como conectar-se com SSL/TLS, consulte [Configuring the client](https://jdbc.postgresql.org/documentation/ssl/#configuring-the-client) (Configurar o cliente) na documentação do PostgreSQL. 
+ **Python**

  Uma biblioteca Python popular para conectar-se a bancos de dados PostgreSQL é `psycopg2`.

  Para obter informações sobre como usar o `psycopg2`, consulte a [documentação de psycopg2](https://pypi.org/project/psycopg2/). Para um breve tutorial sobre como conectar-se a um banco de dados PostgreSQL, consulte [Tutorial sobre psycopg2](https://wiki.postgresql.org/wiki/Psycopg2_Tutorial). Você pode encontrar informações sobre as opções aceitas pelo comando de conexão em [O conteúdo do módulo psycopg2](http://initd.org/psycopg/docs/module.html#module-psycopg2).

**Importante**  
Depois de determinar que suas conexões com o banco de dados usam SSL/TLS e ter atualizado o armazenamento confiável de aplicações, você poderá atualizar o banco de dados para usar os certificados rds-ca-rsa2048-g1. Para obter instruções, consulte a etapa 3 em [Atualizar o certificado CA modificando a instância ou o cluster de banco de dados](UsingWithRDS.SSL-certificate-rotation.md#UsingWithRDS.SSL-certificate-rotation-updating).