Para aumentar a segurança dos dados em trânsito, ative a criptografia Secure Sockets Layer (SSL) e instale um certificado CA SSL nos clientes. O SSL criptografa conexões de rede na camada de transporte, o que melhora a segurança e a integridade dos dados, mas também pode aumentar o tempo de resposta da conexão.
Contexto
A Internet Engineering Task Force (IETF) padronizou o SSL 3.0 e o renomeou para Transport Layer Security (TLS). Embora o TLS seja o padrão moderno, este tópico usa o termo mais comum "SSL" para se referir à criptografia TLS.
Casos de uso
Acesso público ao banco de dados: Quando um cliente se conecta a um cluster PolarDB pela internet pública, o link de dados fica exposto a uma rede não confiável. É necessário criptografá-lo para evitar ataques do tipo man-in-the-middle.
Atendimento a requisitos de segurança e conformidade: Regulamentações setoriais ou de proteção de dados, como PCI-DSS e GDPR, exigem criptografia para dados sensíveis em trânsito.
Comunicação entre redes: Em arquiteturas de nuvem híbrida ou multi-VPC, os fluxos de dados que cruzam limites de rede devem usar criptografia SSL para garantir confidencialidade e integridade.
Limitações
Limite de criptografia por endpoint: Cada cluster suporta criptografia SSL para apenas um endpoint por vez. Se o cluster tiver endpoints público e interno, escolha um para criptografar conforme o caso de uso. Não é possível criptografar ambos simultaneamente.
-
Recomendações para escolher o endpoint a ser criptografado:
Se o acesso ao banco de dados ocorre pela internet pública, ative a criptografia SSL no endpoint público para mitigar riscos de segurança durante a transmissão de dados.
Caso o acesso ao banco de dados ocorra exclusivamente dentro de uma VPC e haja necessidade de cumprir requisitos de segurança e conformidade, ative a criptografia SSL no endpoint interno.
Limite de tamanho do endpoint: O endpoint de um cluster PolarDB com criptografia SSL ativada deve ter menos de 64 caracteres. Para saber como modificar o endpoint, consulte Configurar um proxy de banco de dados.
Precauções
Período de validade do certificado: Um certificado SSL tem validade de um ano. Para evitar falhas de conexão, atualize o período de validade do certificado e reconfigure os clientes com o novo certificado CA antes que o atual expire.
Interrupções de serviço: Operações como ativar ou desativar a criptografia SSL, atualizar o período de validade do certificado, alterar o endpoint protegido e ativar a rotação automática de certificados reiniciam o cluster. Execute essas operações fora do horário de pico e garanta que a aplicação possa se reconectar automaticamente.
Procedimento
Etapa 1: Ativar criptografia SSL
A ativação da criptografia SSL reinicia o cluster. Execute esta operação fora do horário de pico.
Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Selecione a região do cluster e clique no ID do cluster.
No painel de navegação à esquerda, escolha .
-
Na aba SSL Settings, clique no controle deslizante ao lado de SSL Status para ativar a criptografia SSL.
NotaÉ possível configurar SSL para o endpoint primário, endpoint do cluster e endpoint personalizado.
Na caixa de diálogo Configure SSL, selecione o endpoint a ser criptografado e clique em OK.
Etapa 2: Baixar certificado
Após ativar a criptografia SSL, baixe o certificado do cluster PolarDB para verificar a autenticidade do banco de dados quando um cliente se conectar remotamente ao cluster PolarDB.
Na aba SSL Settings, clique em Download referente ao endpoint correspondente.
-
O arquivo baixado é um pacote compactado que contém os três arquivos seguintes:
Arquivo .p7b: Usado para importar o certificado CA no Windows.
Arquivo .pem: Utilizado para importar o certificado CA em outros sistemas operacionais ou aplicações.
-
Arquivo .jks: Arquivo de truststore Java usado para importar a cadeia de certificados CA em aplicações Java. A senha é fixa:
apsaradb.NotaAo usar o arquivo de certificado JKS em Java, modifique as configurações de segurança padrão do JDK 7 e JDK 8. No servidor que se conecta ao banco de dados PolarDB, atualize as duas configurações a seguir no arquivo
jre/lib/security/java.security:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024Sem essa modificação, ocorre um erro semelhante ao exemplo abaixo. Outros erros parecidos também costumam ser causados por problemas na configuração de segurança do Java.
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Etapa 3: Conectar-se ao PolarDB
Depois de ativar a criptografia SSL, a efetividade da criptografia entre um cliente e um cluster PolarDB depende do tipo e das configurações do cliente. Alguns clientes, por exemplo, podem usar conexões criptografadas por padrão. Modifique as configurações ou o código do cliente para garantir o estabelecimento de uma conexão criptografada e verificar a identidade do cluster PolarDB.
Se você usa o DMS (Data Management) para fazer login e gerenciar seu cluster PolarDB, não é necessário criptografar a conexão.
CLI
Para versões do cliente MySQL 5.7.11 e posteriores, adicione a opção --ssl-mode ao comando de conexão para configurar a criptografia SSL.
--ssl-mode=DISABLED: A conexão não é criptografada.--ssl-mode=PREFERREDou omissão da opção--ssl-mode: Tenta uma conexão criptografada, mas reverte para uma não criptografada se a tentativa falhar.--ssl-mode=REQUIRED: Exige uma conexão criptografada; a conexão falha se não for possível estabelecê-la.--ssl-mode=VERIFY_CA: Requer conexão criptografada e verifica o certificado do servidor em relação ao certificado CA local.--ssl-mode=VERIFY_IDENTITY: Exige conexão criptografada, valida o certificado do servidor contra o CA local e confirma se o hostname ou endereço IP do servidor corresponde ao especificado na conexão.
Exemplo 1: Tentar estabelecer uma conexão criptografada, revertendo para uma conexão não criptografada em caso de falha.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED
Exemplo 2: Exigir uma conexão criptografada e verificar o certificado do servidor em relação a uma CA confiável.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={path_to_ca_certificate}/ApsaraDB-CA-Chain.pem
Nos exemplos anteriores, substitua
{endpoint},{username}e{path_to_ca_certificate}pelos valores reais.Para mais informações sobre a opção
--ssl-mode, consulte a documentação oficial do MySQL.
MySQL Workbench
Abra o MySQL Workbench e escolha Database > Manage Connections.
Insira o endpoint, nome de usuário e senha do cluster PolarDB.
-
Na aba SSL, selecione uma opção para Use SSL, forneça o caminho do certificado PEM baixado em SSL CA File e clique em Test Connection ou OK.
NotaPara as opções de Use SSL, veja a descrição de --ssl-mode para conexões via linha de comando.
Código da aplicação
Java
O Connector/J (mysql-connector-java) é o driver JDBC oficial fornecido pelo MySQL. Este exemplo usa mysql-connector-java 8.0.19 como dependência.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
O código de exemplo abaixo usa a propriedade sslMode para especificar o modo SSL. Essa propriedade está disponível no mysql-connector-java versão 8.0.13 e posteriores. Se utilizar uma versão anterior, use as propriedades useSSL, requireSSL e verifyServerCertificate. Para detalhes, consulte a documentação do MySQL.
Código de exemplo:
package com.example.ssltest;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
// Set SslMode as needed. For available options, see the command-line connection instructions.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore stores the CA certificate. Here, the truststore type is set to JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace the path after file:// with the path to your ApsaraDB-CA-Chain.jks file.
mysqlDS.setTrustCertificateKeyStoreUrl("file://{path_to_ca_certificate}/ApsaraDB-CA-Chain.jks");
// The password for the downloaded JKS file is apsaradb and cannot be changed.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Your cluster endpoint
mysqlDS.setServerName("your_polardb_endpoint");
// Your database port
mysqlDS.setPort(3306);
// Your database username
mysqlDS.setUser("your_username");
// Your database password
mysqlDS.setPassword("your_password");
// Your database name
mysqlDS.setDatabaseName("your_database");
System.out.println("Attempting to connect to the database...");
conn = mysqlDS.getConnection();
System.out.println("Database connection successful!");
// Use try-with-resources to ensure that Statement and ResultSet are automatically closed.
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// Check if the query returned a result.
if (rs.next()) {
// Get the result from the first column and print it.
String dbVersion = rs.getString(1);
System.out.println("Database version: " + dbVersion);
} else {
System.out.println("Failed to retrieve database version information.");
}
}
}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
# --- Configure your database information ---
db_config = {
'host': 'your_polardb_endpoint', # Your cluster endpoint
'user': 'your_username', # Your username
'password': 'your_password', # Your password
'database': 'your_database', # The database that you want to connect to
'port': 3306
}
# --- Configure SSL information ---
ssl_args = {
'ca': '{path_to_ca_certificate}/ApsaraDB-CA-Chain.pem',
# Verifies the server's certificate against the specified CA.
'ssl_verify_cert': True
}
try:
# Establish the connection, passing the ssl arguments.
print("Attempting to connect to MySQL using SSL...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("SSL connection successful!")
with connection.cursor() as cursor:
# Execute a simple query to verify the connection.
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"Database version: {version[0]}")
except pymysql.MySQLError as e:
# Printing SSL-related errors can be helpful.
print(f"Connection failed: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("Database connection closed.")
Sysbench
Baixe o certificado e descompacte o pacote.
-
Configure o Sysbench:
Adicione a flag
--mysql-ssl=onà linha de comando dosysbench.Se usar o Sysbench 1.0.x, renomeie o arquivo .pem para cacert.pem no diretório onde executa o comando
sysbench. Isso é necessário porque o Sysbench define internamente o nome do certificado SSL como cacert.pem.Para o Sysbench 1.1.x, siga a configuração do 1.0.x ou especifique o caminho do arquivo PEM usando o parâmetro
--mysql-ssl-ca.
-
Para informações sobre métodos de benchmark, consulte Métodos de teste de desempenho (OLTP).
NotaAo executar o benchmark, garanta que a versão do MySQL Client seja compatível com a versão do MySQL do cluster PolarDB.
Etapa 4: Verificar conexão criptografada
O protocolo SSL possui diversas versões. Atualmente, o PolarDB suporta TLSv1.2 e posteriores. Durante o handshake SSL, o cliente e o servidor PolarDB trocam informações de negociação, incluindo versão TLS, suítes de criptografia e chaves de sessão. Para uma lista detalhada das suítes de criptografia, consulte o site do OpenSSL.
Conecte-se ao cluster PolarDB usando um cliente com SSL configurado.
-
Execute a seguinte consulta SQL:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+ -
Se a coluna
Valueretornar um valor não vazio (comoDHE-RSA-AES256-GCM-SHA384), a conexão atual está criptografada.Caso a coluna
Valueesteja vazia, a conexão atual não está criptografada. Verifique se a configuração do cliente está correta.
Manutenção e gerenciamento
Alterar o endpoint protegido
Para alterar o endpoint protegido, clique em Configure SSL no endpoint desejado.
A alteração do endpoint protegido atualiza automaticamente o certificado SSL e reinicia o cluster. Execute esta operação fora do horário de pico.
Atualizar validade do certificado
Atualize manualmente o período de validade do certificado caso tenha alterado o endpoint SSL ou se o certificado estiver prestes a expirar. Os passos a seguir descrevem como realizar essa atualização.
A atualização do período de validade do certificado reinicia o cluster. Programe esta operação fora do horário de pico.
Ativar rotação automática de certificados
Ao ativar a rotação automática de certificados, o PolarDB atualiza automaticamente o certificado dentro da janela de manutenção do cluster nos 10 dias anteriores ao vencimento.
A renovação automática de certificados reinicia o cluster. Execute esta operação fora do horário de pico.
Na aba SSL Settings, clique em Advanced Settings.
Na caixa de diálogo Advanced Settings, ative a rotação automática de certificados e clique em Confirm.

Desativar criptografia SSL
A desativação da criptografia SSL reinicia o cluster. Execute esta operação fora do horário de pico.
Na aba SSL Settings, clique no controle deslizante ao lado de SSL Status para desativar a criptografia SSL.
Na caixa de diálogo exibida, clique em OK.
APIs relacionadas
|
API |
Descrição |
|
Consulta as configurações SSL de um cluster PolarDB. |
|
|
Ativa ou desativa a criptografia SSL, ou atualiza o certificado CA de um cluster PolarDB. |