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

Em 19 de setembro de 2019, o Amazon RDS publicou novos certificados de autoridade de certificação (CA) para conectar-se às suas instâncias de banco de dados do RDS via SSL (Secure Socket Layer) ou TLS (Transport Layer Security). A seguir, você pode encontrar informações sobre como atualizar seus aplicativos para usar os novos certificados.

Este tópico pode ajudá-lo a determinar se algum aplicativo cliente usa SSL/TLS para conectar-se às suas instâncias de banco de dados. Em caso positivo, examine mais a fundo se esse aplicativo exige verificação de certificado para se conectar.

nota

Alguns aplicativos são configurados para se conectar a instâncias de banco de dados PostgreSQL apenas quando podem verificar com sucesso o certificado no servidor.

Para esses aplicativos, você deve atualizar os repositórios confiáveis de aplicativos cliente para incluir os novos certificados de CA.

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 de desenvolvimento ou teste antes de implementá-los em seus ambientes de produção.

Para obter mais informações sobre a mudança de certificados, consulte Alternar o certificado SSL/TLS. Para obter mais informações sobre como fazer download de certificados, consulte Usar o SSL/TLS para criptografar uma conexão com uma instância 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). 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 obter mais informações sobre parameter groups, consulte Como trabalhar com grupos de parâmetros de banco de dados.

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 exibiçã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 require, 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 require, verify-ca ou verify-full.

PGSSLMODE=require PGSSLROOTCERT=/fullpath/rds-ca-2019-root.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 require, verify-ca ou verify-full para verificar o certificado.

psql "host=pgdbidentifier.cxxxxxxxx.us-east-2.rds.amazonaws.com sslmode=require sslrootcert=/full/path/rds-ca-2019-root.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.

nota

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

Atualizar o armazenamento confiável de aplicações para JDBC

Você pode atualizar o armazenamento confiável para aplicativos que usam conexões JDBC para SSL/TLS.

Como atualizar o armazenamento confiável para aplicativos JDBC

  1. Faça download do certificado raiz de 2019 que funcione para todas as regiões da AWS e coloque o arquivo no diretório do seu armazenamento confiável.

    Para obter informações sobre como fazer download do certificado raiz, consulte Usar o SSL/TLS para criptografar uma conexão com uma instância de banco de dados.

  2. Converta o certificado para o formato .der usando o seguinte comando.

    openssl x509 -outform der -in rds-ca-2019-root.pem -out rds-ca-2019-root.der

    Substitua o nome do arquivo pelo arquivo obtido por download.

  3. Importe o certificado para o repositório de chaves usando o seguinte comando.

    keytool -import -alias rds-root -keystore clientkeystore -file rds-ca-2019-root.der
  4. Confirme se o armazenamento de chaves foi atualizado com êxito.

    keytool -list -v -keystore clientkeystore.jks

    Insira a senha do repositório de chaves quando solicitado.

    Sua saída deve conter o seguinte:

    rds-root,date, trustedCertEntry, Certificate fingerprint (SHA1): D4:0D:DB:29:E3:75:0D:FF:A6:71:C3:14:0B:BF:5F:47:8D:1C:80:96 # This fingerprint should match the output from the below command openssl x509 -fingerprint -in rds-ca-2019-root.pem -noout

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 Conectar ao banco de dados na documentação do PostgreSQL. Para obter informações sobre como conectar-se com SSL/TLS, consulte 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 as suas conexões com o banco de dados usam SSL/TLS e ter atualizado o armazenamento confiável de aplicativos, você poderá atualizar seu banco de dados para usar os certificados rds-ca-2019. Para obter instruções, consulte a etapa 3 em Atualizar o certificado CA modificando sua instância de banco de dados.