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, a criptografia SSL está desativada.
Este tópico explica como:
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 8.4, 8,0 ou 5,7 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 Upgrade the minor engine version . Caso você altere o método de faturamento de uma instância RDS não serverless que execute a Basic Edition para serverless, reative 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, o sistema recusa conexões sem SSL provenientes de clientes e proxies de banco de dados.
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.
Opcionalmente, o cliente pode verificar o certificado do servidor em relação a um certificado de autoridade certificadora (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 |
A Internet Engineering Task Force (IETF) descontinuou o TLS 1.0 e o TLS 1.1 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 TLSv1.0 e o TLSv1.1.
Se suas cargas de trabalho utilizarem apenas TLSv1.2 ou superior, defina ssl_cipher como uma string vazia ("") no console do ApsaraDB RDS para obter maior segurança.
Tipos de certificado
Ambos os tipos de certificado protegem um 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 |
Este tópico aborda certificados cloud. Para usar um certificado personalizado, consulte Configure a custom certificate.
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 a chave 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 8.4, 8,0 ou 5,7 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 são aceitas. O sistema recusa conexões sem SSL de clientes e proxies de banco de dados.
-
Aguarde aproximadamente 1 minuto para a conclusão do processo. Atualize a página para confirmar se o recurso está ativado.
NotaA criptografia SSL de uma instância somente leitura é independente da instância primária. Ativar a criptografia SSL na instância primária não a ativa automaticamente nas instâncias somente leitura associadas. Para ativar a criptografia SSL em uma instância somente leitura, acesse a página de detalhes dessa instância, clique em Data Security > SSL e ative a criptografia SSL manualmente.
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
Após ativar a criptografia SSL, configure seu cliente para estabelecer uma conexão criptografada. Os modos SSL 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 uma conexão criptografada; falha se a criptografia estiver indisponível |
|
|
Exige criptografia e verifica o certificado do servidor em relação ao certificado CA |
|
|
Exige criptografia, verifica o certificado do servidor e confirma 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 verificar o certificado do servidor:
mysql -h <endpoint> -u <username> -p --ssl-mode=PREFERRED
Conectar e verificar 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, use--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 como 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 Register an Alibaba Cloud database instance.
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 o certificado expirar antes da renovação, clientes que utilizam conexões criptografadas não conseguirão se conectar. A 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 Manage scheduled events.
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 que executam MySQL 5,6 ou 5,7. Instâncias com 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
Execute as seguintes instruções SQL para inspecionar a conexão atual:
-- 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 verifique as identidades do servidor e 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 Configure SSL encryption for a database proxy endpoint.
Aplicação Java: javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Esse 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 a seguir:
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