Atualizar aplicações para conexão com instâncias de banco de dados PostgreSQL usando novos certificados SSL/TLS - Amazon Relational Database Service

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.

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 Trabalhar com grupos de parâmetros.

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 sslmode padrão utilizado é diferente entre os clientes baseados em libpq (como o psql) e o JDBC. Os clientes baseados em libpq usam prefer por padrão, enquanto os clientes JDBC usam verify-full por padrão. 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 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.

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 ambiente PGSSLMODE), sslrootcert (variável de ambiente PGSSLROOTCERT).

    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.