As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Atualizar aplicações para conexão com instâncias de banco de dados MySQL 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.
Alguns aplicativos são configurados para se conectar a instâncias de banco de dados MySQL 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.
É possível especificar os seguintes modos SSL: disabled
, preferred
e required
. Quando você usa o modo SSL preferred
e o certificado CA não existe ou não está atualizado, o seguinte comportamento se
aplica:
-
Para versões secundárias do MySQL mais recentes, a conexão volta a não usar o SSL e ainda se conectará com êxito.
Como essas versões posteriores usam o protocolo OpenSSL, um certificado de servidor expirado não impede conexões bem-sucedidas, a menos que o modo SSL
required
seja especificado.As seguintes versões secundárias do MySQL usam o protocolo OpenSSL:
-
Todas as versões do MySQL 8.0
-
MySQL 5.7.21 e versões posteriores do MySQL 5.7
-
MySQL 5.6.39 e versões posteriores do MySQL 5.6
-
MySQL 5.5.59 e versões posteriores do MySQL 5.5
-
-
Para versões secundárias do MySQL mais antigas, é retornado um erro.
Como essas versões mais antigas usam o protocolo yaSSL, a verificação de certificado é estritamente aplicada e a conexão não tem êxito.
As seguintes versões secundárias do MySQL usam o protocolo yaSSL:
-
MySQL 5.7.19 e versões anteriores do MySQL 5.7
-
MySQL 5.6.37 e versões anteriores do MySQL 5.6
-
MySQL 5.5.57 e versões anteriores do MySQL 5.5
-
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 MySQL, consulte Uso do SSL com uma instância de banco de dados MySQL.
Tópicos
Determinar se alguma aplicação está se conectando à instância de banco de dados MySQL usando SSL
Se você estiver usando o Amazon RDS for MySQL versão 5.7 ou 8.0 e o Esquema de desempenho
estiver habilitado, execute a seguinte consulta para verificar se as conexões estão
usando SSL/TLS. Para obter informações sobre como habilitar o Esquema de performance,
consulte Performance Schema quick start
mysql> SELECT id, user, host, connection_type FROM performance_schema.threads pst INNER JOIN information_schema.processlist isp ON pst.processlist_id = isp.id;
Nesta saída de exemplo, é possível ver que a sua própria sessão (admin
) e um aplicativo conectado como webapp1
estão usando SSL.
+----+-----------------+------------------+-----------------+ | 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)
Se você estiver usando o Amazon RDS for MySQL versão 5.5 ou 5.6, não poderá determinar no lado do servidor se os aplicativos estão se conectando com ou sem SSL. Para essas versões, é possível examinar o método de conexão do aplicativo para determinar se o SSL é usado ou não. Na seção a seguir, você pode encontrar mais informações sobre como examinar a configuração da conexão do cliente.
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
Ao usar o MySQL Connector/J 8.0, uma conexão SSL 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);
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 seus aplicativos para usar SSL/TLS ao se conectar a seus bancos de dados, esses drivers cliente usam SSL/TLS como padrão. Além disso, ao usar SSL/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
Ao usar o Cliente MySQL 5.7 ou MySQL 8.0, uma conexão SSL requer 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
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
-
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 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.
-
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.derSubstitua o nome do arquivo pelo arquivo obtido por download.
-
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 -
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
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
");
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 SSL
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 = "
username
"; 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 = null; Statement stmt = null; ResultSet rs = null; try { connection = DriverManager.getConnection("jdbc:mysql://mydatabase.123456789012.us-east-1.rds.amazonaws.com:3306
",properties); stmt = connection.createStatement(); rs=stmt.executeQuery("SELECT 1 from dual"); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { } } if (stmt != null) { try { stmt.close(); } catch (SQLException e) { } } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return; } }
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.