Atualizar aplicações para conexão com instâncias de banco de dados PostgreSQL usando novos certificados SSL/TLS
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. 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. 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.
Tópicos
Determinar se as aplicações estão se conectando a instâncias de banco de dados PostgreSQL usando SSL
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.
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
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
Para obter informações sobre como atualizar o armazenamento de confiança para aplicações PostgreSQL, consulte Secure TCP/IP connections with SSL
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.
Para obter exemplos de scripts que importam certificados, consulte Script de exemplo para importar certificados para o seu armazenamento confiável.
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
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 ambientePGSSLMODE
),sslrootcert
(variável de ambientePGSSLROOTCERT
).Para conhecer a lista completa de opções, consulte Palavras-chave de parâmetros
na documentação do PostgreSQL. Para conhecer a lista completa de variáveis de ambiente, consulte Variáveis de ambiente 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
. -
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
(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 (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. Para um breve tutorial sobre como conectar-se a um banco de dados PostgreSQL, consulte Tutorial sobre psycopg2 . Você pode encontrar informações sobre as opções aceitas pelo comando de conexão em O conteúdo do módulo 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.