A criptografia SSL protege dados em trânsito entre instâncias do ApsaraDB RDS for MySQL e clientes, evitando monitoramento, interceptação e adulteração. Por padrão, o SSL está desativado nas instâncias RDS MySQL.
Os certificados cloud permitem:
Ativar a criptografia SSL (e, opcionalmente, forçar todas as conexões a usar SSL)
Baixar o certificado CA
Configurar clientes — CLI, MySQL Workbench, DMS, Java e Python — para conexão via SSL
Pré-requisitos
Antes de começar, verifique se:
-
Sua instância RDS executa uma das seguintes versões e edições do MySQL para usar a SSL encryption:
Versão do MySQL
RDS High-availability Edition
RDS Cluster Edition
RDS Basic Edition
8,0
Suportado
Suportado
Suportado
5,7
Suportado
Suportado
Suportado
5.6
Suportado
—
—
-
Sua instância RDS atende aos dois requisitos a seguir para usar a forceful SSL encryption:
Executa MySQL 5,7 ou 8,0 na Basic Edition, High-availability Edition ou Cluster Edition
Executa uma versão secundária do mecanismo 20241130 ou posterior
Verifique esses detalhes na página Basic Information da sua instância RDS. Se a instância atender aos requisitos, mas a aba SSL não estiver visível, atualize a versão secundária do mecanismo. Para mais detalhes, consulte Atualizar a versão secundária do mecanismo . Caso você altere o método de faturamento de uma instância RDS não serverless da Basic Edition para serverless, será necessário reativar a criptografia SSL.
Impactos potenciais
Comportamento de reinicialização e failover:
|
Operação |
MySQL 5.6 ou 5.7 |
MySQL 8.0 |
|
Ativar SSL |
Reinicia; aciona failover primário/secundário |
Reinicia; aciona failover primário/secundário |
|
Desativar SSL |
Reinicia; aciona failover primário/secundário |
Reinicia; aciona failover primário/secundário |
|
Atualizar certificado |
Reinicia |
Não reinicia |
Execute essas operações fora do horário de pico e configure sua aplicação para reconectar automaticamente após a reinicialização.
Sobrecarga de CPU: Conexões com criptografia SSL aumentam significativamente a utilização da CPU. Ative o SSL apenas para endpoints que exigem criptografia — geralmente o endpoint público.
SSL forçado: Após ativar a criptografia SSL forçada, conexões sem SSL provenientes de clientes e proxies de banco de dados serão recusadas.
Como funciona
Ao ativar a criptografia SSL, a instância RDS gera um certificado de servidor, uma chave pública e uma chave privada.
Durante o handshake SSL:
A instância RDS envia o certificado do servidor (incluindo a chave pública) ao cliente.
O cliente criptografa uma chave simétrica usando a chave pública recebida.
A instância RDS descriptografa a chave simétrica usando sua chave privada.
Ambas as partes usam a chave simétrica para criptografar e descriptografar dados.
O cliente também pode validar o certificado do servidor com base em um certificado CA para confirmar a identidade do servidor e evitar ataques man-in-the-middle.
Suporte a versões TLS
|
Versão do MySQL |
TLSv1.0 |
TLSv1.1 |
TLSv1.2 |
TLSv1.3 |
|
8,0 |
Suportado |
Suportado |
Suportado |
Suportado (versão secundária 20221231 ou posterior) |
|
5,7 |
Suportado |
Suportado |
Suportado |
Não suportado |
|
5.6 |
Suportado |
Suportado |
Suportado |
Não suportado |
O TLS 1.0 e o TLS 1.1 foram descontinuados pela Internet Engineering Task Force (IETF) em 2021. Utilize TLSv1.2 ou superior. Para mais detalhes, consulte RFC 8996 .
Configuração ssl_cipher
O ApsaraDB RDS for MySQL utiliza OpenSSL para TLS. O OpenSSL foi atualizado para a versão 3,0 nas seguintes instâncias:
Instâncias MySQL 5,7 com versão secundária do mecanismo 20230831
Instâncias MySQL 8,0 com versão secundária do mecanismo 20230930
O OpenSSL 3,0 não suporta mais TLSv1.0 e TLSv1.1 por padrão. Para manter a compatibilidade, o parâmetro ssl_cipher tem como valor padrão "ALL:@SECLEVEL=0", que reativa o suporte a TLSv1.0 e TLSv1.1.
Se suas cargas de trabalho utilizarem exclusivamente TLSv1.2 ou superior, defina ssl_cipher como uma string vazia ("") no console do ApsaraDB RDS para garantir maior segurança.
Tipos de certificado
Ambos os tipos de certificado protegem um único endpoint e têm a mesma finalidade: ativar a criptografia SSL e permitir que o cliente autentique o servidor.
|
Certificado cloud |
Certificado personalizado |
|
|
Emitido por |
Alibaba Cloud |
Uma CA ou autoassinado |
|
Período de validade |
365 dias |
Personalizado |
|
Endpoints protegidos |
1 |
1 |
Para certificados personalizados, consulte Configurar um certificado personalizado.
Etapa 1: Ativar a criptografia SSL
Acesse a página Instances. Na barra de navegação superior, selecione a região onde reside sua instância RDS. Localize a instância e clique em seu ID.
No painel de navegação à esquerda, clique em Data Security.
-
Na aba SSL, ative o interruptor ao lado de Disabled.
Se a aba SSL não aparecer, verifique se sua instância atende a todos os requisitos listados nos Pré-requisitos .
Na caixa de diálogo exibida, selecione o endpoint a ser protegido — interno ou público — e clique em OK. Apenas um endpoint pode ser protegido por vez.
-
(Opcional) Ative a Forceful Encryption.
ImportanteA criptografia SSL forçada requer MySQL 5,7 ou 8,0 e uma versão secundária do mecanismo 20241130 ou posterior. - Após ativar a criptografia SSL forçada, apenas conexões criptografadas via SSL serão aceitas. Conexões sem SSL de clientes e proxies de banco de dados serão recusadas.
Aguarde aproximadamente 1 minuto para a conclusão do processo. Atualize a página para confirmar que o recurso está ativado.
Etapa 2: Baixar o certificado CA
Acesse a página Instances, localize sua instância e clique em seu ID.
No painel de navegação à esquerda, clique em Data Security. Na aba SSL, clique em Download CA Certificate.
O pacote baixado contém três arquivos:
|
Arquivo |
Formato |
Quando usar |
|
|
PEM |
Maioria dos cenários |
|
|
JKS (Java KeyStore) |
Aplicações Java; a senha é |
|
|
P7B (PKCS#7) |
Aplicações Windows que exigem formato PKCS#7 |
Etapa 3: Conectar usando SSL
Configure seu cliente para conexão via SSL. Os modos disponíveis são:
|
Modo |
Comportamento |
|
|
As conexões não são criptografadas |
|
|
Tenta uma conexão criptografada; reverte para não criptografada se o SSL estiver indisponível |
|
|
Exige conexão criptografada; falha se a criptografia estiver indisponível |
|
|
Exige criptografia e valida o certificado do servidor com base no certificado CA |
|
|
Exige criptografia, valida o certificado do servidor e verifica se o hostname do certificado corresponde à conexão real |
Se a criptografia SSL forçada estiver ativada, apenas os modos REQUIRED, VERIFY_CA ou VERIFY_IDENTITY permitem conexões.
CLI
Para clientes MySQL 5.7.11 ou posteriores, utilize a opção --ssl-mode.
Conectar sem validar o certificado do servidor:
mysql -h <endpoint> -u <username> -p --ssl-mode=PREFERRED
Conectar e validar o certificado do servidor:
mysql -h <endpoint> -u <username> -p \
--ssl-mode=VERIFY_CA \
--ssl-ca=<path-to-certificate>/ApsaraDB-CA-Chain.pem
Substitua <endpoint>, <username> e <path-to-certificate> pelos seus valores reais.
Para clientes MySQL anteriores à versão 5.7.11 e clientes MariaDB, utilize--ssle--ssl-verify-server-cert. Consulte a documentação oficial do MySQL e do MariaDB para mais detalhes.
MySQL Workbench
Abra o MySQL Workbench e escolha Database > Manage Connections.
Insira o endpoint de conexão, nome de usuário e senha.
Na aba SSL, defina Use SSL para o modo desejado. Defina SSL CA File com o caminho do arquivo PEM baixado e clique em Test Connection ou OK.
DMS
Ao registrar sua instância RDS no Data Management (DMS), configure o parâmetro Enable SSL. Para mais detalhes, consulte Registrar uma instância de banco de dados Alibaba Cloud.
Para atualizar a configuração de um registro existente, clique com o botão direito na instância, selecione Edit e configure Enable SSL em Advanced Information.
Código da aplicação
Java
O MySQL Connector/J (mysql-connector-java) é o driver JDBC oficial para MySQL. Este exemplo utiliza a versão 8.0.19.
Adicione a seguinte dependência:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
A propriedade sslMode é suportada a partir do mysql-connector-java 8.0.13. Para versões anteriores, utilize as propriedades useSSL, requireSSL e verifyServerCertificate. Consulte a documentação do MySQL Connector/J.
package com.aliyun.sample;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class Sample {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS = null;
try {
mysqlDS = new MysqlDataSource();
// Set the SSL mode. Options: DISABLED, PREFERRED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore holds the CA certificate. This example uses JKS format.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace with the actual path to ApsaraDB-CA-Chain.jks on your system.
mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
// The JKS file password is always apsaradb.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Replace the following values with your actual RDS instance details.
mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com"); // RDS endpoint
mysqlDS.setPort(3306);
mysqlDS.setUser("xxxxxx"); // Database account username
mysqlDS.setPassword("xxxxxx"); // Database account password
mysqlDS.setDatabaseName("xxxxxx"); // Database name
conn = mysqlDS.getConnection();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Python
# Install PyMySQL: pip install pymysql
import pymysql
try:
ssl_config = {
"ca": "/path/to/ApsaraDB-CA-Chain.pem", # Path to the CA certificate
"mode": "VERIFY_CA" # SSL mode
}
conn = pymysql.connect(
host="******.mysql.rds.aliyuncs.com",
user="*****",
passwd="******",
db="*****",
ssl=ssl_config
)
cursor = conn.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print("Database version:", data[0])
cursor.close()
except pymysql.Error as e:
print(e)
Operações adicionais
Atualizar um certificado cloud
Os certificados cloud têm validade de um ano. Se um certificado expirar antes da renovação, clientes que utilizam conexões criptografadas não conseguirão se conectar. O Alibaba Cloud envia notificações de expiração por e-mail ou mensagem interna.
Para agendar a renovação automática, utilize a caixa de diálogo Schedule Event. Para mais detalhes, consulte Gerenciar eventos agendados.
Após a renovação automática, os clientes não precisam baixar ou reconfigurar o certificado CA.
Para renovar o certificado manualmente:
A atualização do certificado reinicia instâncias executando MySQL 5.6 ou 5,7. Instâncias executando MySQL 8,0 não são reiniciadas.
Acesse a página Instances, localize sua instância e clique em seu ID.
No painel de navegação à esquerda, clique em Data Security.
Na aba SSL, clique em Update Expiration Time.
Verificar a conexão criptografada
Inspecione a conexão atual com estas instruções SQL:
-- Check the cipher suite used by the current session.
-- A non-empty result confirms the connection is encrypted.
SHOW STATUS LIKE 'Ssl_cipher';
-- Check the TLS version used by the current session.
SHOW STATUS LIKE 'Ssl_version';
Na CLI do MySQL, execute \s para visualizar os detalhes da conexão. Se a conexão estiver criptografada, o campo SSL exibirá o conjunto de cifras em uso.
Exigir SSL para um usuário específico
ALTER USER 'testuser'@'%' REQUIRE SSL;
Visualizar o conteúdo do certificado CA
openssl x509 -in <path-to-certificate>/ApsaraDB-CA-Chain.pem -text
Desativar a criptografia SSL
Desativar o SSL reinicia a instância RDS e aciona um failover primário/secundário. Execute esta operação fora do horário de pico.
Acesse a página Instances, localize sua instância e clique em seu ID.
No painel de navegação à esquerda, clique em Data Security.
Na aba SSL, desative a SSL Encryption. Na caixa de diálogo de confirmação, clique em OK.
Perguntas frequentes
Posso configurar autenticação mútua que valide tanto a identidade do servidor quanto a do cliente?
O ApsaraDB RDS for MySQL não suporta verificação de identidade do cliente durante o handshake SSL. Utilize listas de permissões e gerenciamento de contas para controlar o acesso.
Como configuro a criptografia SSL para um endpoint de divisão de leitura/escrita?
Consulte Configurar criptografia SSL para um endpoint de proxy de banco de dados.
Aplicação Java: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Este erro ocorre com as configurações de segurança padrão do JDK 7 ou JDK 8. No arquivo jre/lib/security/java.security do host da sua aplicação, defina:
jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024
Aplicação Java: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
O MySQL Connector/J 8.0.18 e versões anteriores desativam o TLSv1.2 ao conectar-se a instâncias MySQL 5.6 ou 5,7. Resolva isso usando uma das opções abaixo:
Atualize o MySQL Connector/J para a versão 8.0.19 ou posterior
Atualize a instância RDS para MySQL 8,0
Especifique explicitamente a versão TLS definindo
enabledTLSProtocolsoutlsVersionscomoTLSv1.2na configuração de conexão