Atualizar aplicações para conexão com clusters de banco de dados do Aurora MySQL usando novos certificados TLS - Amazon Aurora

Atualizar aplicações para conexão com clusters de banco de dados do Aurora MySQL usando novos certificados TLS

Em 13 de janeiro de 2023, o Amazon RDS publicou novos certificados de autoridade de certificação (CA) para conexão com clusters de banco de dados do Aurora via Transport Layer Security (TLS). A seguir, você pode encontrar informações sobre como atualizar seus aplicativos para usar os novos certificados.

Este tópico pode ajudar você a determinar se alguma aplicação cliente usa TLS para se conectar a clusters 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 clusters de banco de dados MySQL do Aurora 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 nos seus clusters 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 ter mais informações sobre como fazer download de certificados, consulte Usar SSL/TLS para criptografar uma conexão com um cluster de banco de dados. Para obter informações sobre como usar o TLS com clusters de banco de dados do Aurora MySQL, consulte Usar TLS com clusters de banco de dados do Aurora MySQL.

Determinar se alguma aplicação está se conectando ao cluster de banco de dados do Aurora MySQL usando TLS

Se você estiver usando o Aurora MySQL versão 2 (compatível com MySQL 5.7) e o Esquema de Performance estiver habilitado, execute a seguinte consulta para verificar se as conexões estão usando TLS. Para obter informações sobre como habilitar o Esquema de performance, consulte Performance Schema quick start na documentação do MySQL.

mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;

Neste exemplo de saída, é possível ver que a sua própria sessão (admin) e uma aplicação conectada como webapp1 estão usando TLS.

+----+-----------------+------------------+-----------------+ | id | user | host | connection_type | +----+-----------------+------------------+-----------------+ | 8 | admin | 10.0.4.249:42590 | SSL/TLS | | 4 | event_scheduler | localhost | NULL | | 10 | webapp1 | 159.28.1.1:42189 | SSL/TLS | +----+-----------------+------------------+-----------------+ 3 rows in set (0.00 sec)

Determinar se um cliente requer verificação de certificado para se conectar

É possível verificar se os clientes JDBC e MySQL exigem verificação de certificado para se conectarem.

JDBC

O exemplo a seguir com o MySQL Connector/J 8.0 mostra uma maneira de verificar as propriedades da conexão JDBC de um aplicativo para determinar se conexões bem-sucedidas exigem um certificado válido. Para obter mais informações sobre todas as opções de conexão JDBC para MySQL, consulte Propriedades da configuração na documentação do MySQL.

Ao usar o MySQL Connector/J 8.0, uma conexão TLS exigirá verificação com base no certificado de CA de servidor se as propriedades da sua conexão tiverem sslMode definido como VERIFY_CA ou VERIFY_IDENTITY, como no exemplo a seguir.

Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD);
nota

Se você usar o MySQL Java Connector v5.1.38 ou posterior, ou o MySQL Java Connector v8.0.9 ou posterior para se conectar a seus bancos de dados, mesmo que você não tenha configurado explicitamente suas aplicações para usar TLS ao se conectar a seus bancos de dados, esses drivers cliente usam TLS como padrão. Além disso, ao usar TLS, eles executam a verificação parcial do certificado e haverá falha na conexão se o certificado do servidor de banco de dados tiver expirado.

MySQL

Os exemplos a seguir com o cliente MySQL mostram duas maneiras de verificar a conexão MySQL de um script para determinar se conexões bem-sucedidas exigem um certificado válido. Para obter mais informações sobre todas as opções de conexão com o cliente MySQL, consulte Configuração no lado do cliente para conexões criptografadas na documentação do MySQL.

Ao usar o cliente MySQL 5.7 ou MySQL 8.0, uma conexão TLS vai exigir verificação com base no certificado de CA de servidor se, para a opção --ssl-mode, você especificar VERIFY_CA ou VERIFY_IDENTITY, como no exemplo a seguir.

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-mode=VERIFY_CA

Ao usar o Cliente MySQL 5.6, uma conexão SSL exigirá verificação com base no certificado de CA de servidor se você especificar a opção --ssl-verify-server-cert, como no exemplo a seguir.

mysql -h mysql-database.rds.amazonaws.com -uadmin -ppassword --ssl-ca=/tmp/ssl-cert.pem --ssl-verify-server-cert

Atualizar o armazenamento confiável de aplicações

Para obter informações sobre como atualizar o armazenamento confiável para aplicações MySQL, consulte Installing SSL certificates na documentação do MySQL.

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 aplicações que usam JDBC para conexões TLS.

Para obter informações sobre como baixar o certificado raiz, consulte Usar SSL/TLS para criptografar uma conexão com 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.

Se você estiver usando o driver JDBC mysql em um aplicativo, defina as seguintes propriedades nesse aplicativo.

System.setProperty("javax.net.ssl.trustStore", certs); System.setProperty("javax.net.ssl.trustStorePassword", "password");
nota

Especifique uma senha diferente do prompt mostrado aqui como prática recomendada de segurança.

Ao iniciar o aplicativo, defina as seguintes propriedades.

java -Djavax.net.ssl.trustStore=/path_to_truststore/MyTruststore.jks -Djavax.net.ssl.trustStorePassword=my_truststore_password com.companyName.MyApplication

Exemplo de código Java para estabelecer conexões TLS

O exemplo de código a seguir mostra como configurar a conexão SSL que valida o certificado de servidor usando JDBC.

public class MySQLSSLTest { private static final String DB_USER = "user name"; private static final String DB_PASSWORD = "password"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore"; private static final String KEY_STORE_PASS = "keystore-password"; public static void test(String[] args) throws Exception { Class.forName("com.mysql.jdbc.Driver"); System.setProperty("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); System.setProperty("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); Properties properties = new Properties(); properties.setProperty("sslMode", "VERIFY_IDENTITY"); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); Connection connection = DriverManager.getConnection("jdbc:mysql://jagdeeps-ssl-test.cni62e2e7kwh.us-east-1.rds.amazonaws.com:3306",properties); Statement stmt=connection.createStatement(); ResultSet rs=stmt.executeQuery("SELECT 1 from dual"); return; } }
Importante

Depois de determinar que suas conexões com o banco de dados usam TLS e atualizar 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 de banco de dados.