Para aumentar a segurança dos dados em trânsito, ative a criptografia Secure Sockets Layer (SSL) e instale um certificado de autoridade certificadora (CA) nos seus service de aplicação. O SSL criptografa as conexões de rede na camada de transporte para melhorar a segurança e a integridade dos dados, mas isso pode aumentar a latência da conexão.
Informações básicas
O SSL é um protocolo de segurança desenvolvido originalmente pela Netscape para criar um canal seguro de transmissão de dados entre um navegador web e um servidor web. Ele utiliza algoritmos de criptografia como RC4, MD5 e RSA para proteger as comunicações. A Internet Engineering Task Force (IETF) padronizou o SSL 3.0 e o renomeou para Transport Layer Security (TLS). Embora SSL seja o termo mais comum, este documento refere-se à criptografia TLS ao discutir a criptografia SSL.
Cenários
Acesso ao banco de dados pela internet pública: 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. A criptografia é necessária para evitar ataques man-in-the-middle.
Atendimento a requisitos de segurança e conformidade: Certas regulamentações do setor ou de proteção de dados, como PCI-DSS e GDPR, exigem criptografia para dados confidenciais em trânsito.
Comunicação entre ambientes de rede: Em uma arquitetura de cloud híbrida ou multi-VPC, os fluxos de dados que cruzam limites de rede requerem criptografia SSL para garantir sua confidencialidade e integridade.
Limitações
Criptografia de endpoint único: Cada cluster suporta criptografia SSL para apenas um endpoint por vez. Se o seu cluster estiver configurado com um endpoint público e um interno, você deve escolher qual deles criptografar com base no seu cenário de negócios.
-
Recomendações para escolha do endpoint a ser criptografado:
Se você acessa o banco de dados pela internet pública, recomendamos ativar a criptografia SSL para o endpoint público a fim de proteger os dados em trânsito.
Caso o acesso ao banco de dados ocorra exclusivamente dentro de uma VPC e haja necessidade de cumprir requisitos de segurança e conformidade, recomenda-se ativar a criptografia SSL para o endpoint interno.
Limite de comprimento do endpoint: Um endpoint do PolarDB com criptografia SSL ativada deve ter menos de 64 caracteres. Para obter informações sobre como modificar um endpoint, consulte Configure PolarProxy.
Importante
Período de validade do certificado: Os certificados SSL têm validade de um ano, sem possibilidade de prorrogação. Você deve update the validity period e, em seguida, baixar novamente e configurar o certificado CA antes que ele expire. Caso contrário, as conexões criptografadas do cliente falharão. Recomendamos que você ative automatic certificate rotation para evitar a atualização manual do certificado.
Interrupções de service: As seguintes ações reiniciam seu cluster: enabling ou disabling criptografia SSL, updating the certificate validity period, modifying the protected endpoint e ativação de automatic certificate rotation. Recomendamos realizar essas operações fora dos horários de pico e garantir que sua aplicação possa se reconectar automaticamente.
Procedimento
Etapa 1: Ativar criptografia SSL
A ativação da criptografia SSL reinicia o cluster. Recomendamos realizar esta operação fora dos horários de pico.
Faça login no console do PolarDB. No painel de navegação à esquerda, clique em Clusters. Selecione a região onde seu cluster está localizado e clique no ID do cluster.
No painel de navegação à esquerda, escolha .
-
Na aba SSL Settings, ative a chave SSL Status para habilitar a criptografia SSL.
NotaÉ possível configurar SSL para endpoints primários, de cluster e personalizados.
Na caixa de diálogo Configure SSL, selecione o endpoint a ser criptografado e clique em OK.
Etapa 2: Baixar o 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 na seção correspondente ao endpoint desejado.
-
O arquivo baixado é um pacote compactado que contém os três arquivos a seguir:
Arquivo .p7b: Destinado à importação do certificado CA no Windows.
Arquivo .pem: Utilizado para importar o certificado CA em outros sistemas ou aplicações.
-
Arquivo .jks: Arquivo de certificado truststore Java, com a senha
apsaradb, usado para importar a cadeia de certificados CA em aplicações Java.NotaAo usar o arquivo de certificado JKS em Java, modifique a configuração de segurança padrão para JDK 7 e JDK 8. No servidor que se conecta ao banco de dados PolarDB, edite o arquivo
jre/lib/security/java.securitye altere as duas configurações a seguir:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024Se você não modificar as configurações de segurança do JDK, poderá ocorrer um erro semelhante ao seguinte. Este e outros erros relacionados são geralmente causados por configurações de segurança Java incorretas.
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
Etapa 3: Conectar-se ao PolarDB a partir de um cliente
Depois de ativar a criptografia SSL, a existência de criptografia na conexão entre um cliente e o cluster PolarDB depende do tipo e das configurações do cliente. Por exemplo, alguns clientes podem usar conexões criptografadas por padrão. Modifique as configurações ou o código do cliente para estabelecer uma conexão criptografada e verificar a identidade do cluster PolarDB.
Se você usa o Data Management (DMS) para fazer login e gerenciar clusters PolarDB, não é necessário criptografar a conexão.
CLI
Para clientes MySQL versão 5.7.11 e posteriores, utilize a opção --ssl-mode no 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 estabelecer uma conexão criptografada. Se falhar, estabelece uma conexão não criptografada.--ssl-mode=REQUIRED: Exige uma conexão criptografada. A conexão falha se não for possível estabelecer uma conexão criptografada.--ssl-mode=VERIFY_CA: Exige uma conexão criptografada e verifica o certificado do servidor em relação ao certificado CA local.--ssl-mode=VERIFY_IDENTITY: Exige uma conexão criptografada, verifica o certificado do servidor em relação ao certificado CA local e confirma se o nome do host ou endereço IP do servidor corresponde ao usado para a conexão.
Exemplo 1: Tentativa de estabelecer uma conexão criptografada, com fallback para 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.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={CA certificate path}/ApsaraDB-CA-Chain.pem
Substitua
{endpoint},{username}e{CA certificate path}pelos seus valores reais.Para mais informações sobre a opção
--ssl-mode, consulte a documentação do MySQL.
MySQL Workbench
Abra o MySQL Workbench e selecione Database > Manage Connections.
Insira o endpoint, o nome de usuário e a senha do PolarDB.
-
Na aba SSL, defina o parâmetro Use SSL, configure SSL CA File com o caminho do certificado CA baixado no formato PEM e clique em Test Connection ou OK.
NotaPara obter uma explicação sobre as opções de Use SSL, consulte a descrição da opção --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 para MySQL. Este exemplo usa mysql-connector-java versão 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 a seguir usa a propriedade sslMode para especificar o modo SSL. Essa propriedade é suportada nas versões 8.0.13 e posteriores do mysql-connector-java. Se você estiver usando uma versão anterior, deverá usar 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 options, see the command-line connection instructions.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore contains the CA certificate. Set the truststore type to JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace the path after file:/ with the path to your ApsaraDB-CA-Chain.jks file.
mysqlDS.setTrustCertificateKeyStoreUrl("file://{CA certificate path}/ApsaraDB-CA-Chain.jks");
// The password for the downloaded JKS file is apsaradb and cannot be changed.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Your database endpoint
mysqlDS.setServerName("your_polardb_host");
// 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 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_host', # Your cluster endpoint
'user': 'your_username', # Your username
'password': 'your_password', # Your password
'database': 'your_database', # The database you want to connect to
'port': 3306
}
# --- Configure SSL information ---
ssl_args = {
'ca': '{CA certificate path}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# Establish a connection, passing ssl parameters
print("Attempting to connect to MySQL with 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 for troubleshooting
print(f"Connection failed: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("Database connection closed.")
Benchmarking com Sysbench
Download the certificate e descompacte o pacote.
-
Configure o Sysbench:
Adicione
--mysql-ssl=onao comandosysbench.Se estiver usando o Sysbench 1.0.x, renomeie o arquivo .pem para cacert.pem e coloque-o no diretório onde você executa o comando
sysbench. Esta versão do Sysbench define rigidamente o nome do certificado SSL como cacert.pem.Para usuários do Sysbench 1.1.x, a configuração do certificado SSL pode seguir o mesmo procedimento do Sysbench 1.0.x. Alternativamente, especifique o caminho para o arquivo PEM usando o parâmetro
--mysql-ssl-ca.
-
Para métodos de benchmarking, consulte Performance testing method (OLTP).
NotaDurante o benchmarking, certifique-se de que a versão do seu MySQL Client corresponda à versão do MySQL do seu cluster PolarDB.
Etapa 4: Verificar conexão criptografada
O protocolo SSL possui múltiplas versões. O PolarDB atualmente suporta TLSv1.2 e posteriores. Durante o handshake SSL, o cliente e o servidor PolarDB negociam parâmetros de conexão, incluindo a versão TLS, conjunto de cifras e chave de sessão. Para obter uma lista detalhada de conjuntos de cifras, visite o site oficial do OpenSSL.
Conecte-se ao cluster PolarDB usando um cliente configurado para SSL.
-
Execute a seguinte consulta SQL:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+ -
Analise o resultado:
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 a configuração do seu cliente.
Manutenção e gerenciamento
Modificar o endpoint protegido
Para alterar o endpoint protegido por SSL, clique em Configure SSL na seção desse endpoint.
A modificação do endpoint protegido atualiza automaticamente o certificado SSL e reinicia o cluster. Realize esta operação fora dos horários de pico.
Atualizar o período de validade do certificado
Se você alterar o endpoint SSL ou se o certificado estiver prestes a expirar, será necessário atualizar manualmente o período de validade do certificado.
A atualização do período de validade do certificado reinicia o cluster. Planeje esse tempo de inatividade adequadamente.
Na aba SSL Settings, clique em Update Validity Period.
Na caixa de diálogo exibida, clique em OK.
Após a atualização do período de validade, download e configure o novo certificado.
Não é possível prorrogar o período de validade de um certificado SSL. Você só pode atualizar o período de validade e, em seguida, baixar e configurar novamente o certificado. Para evitar a atualização manual do certificado sempre que ele se aproximar do vencimento, recomendamos ativar a rotação automática de certificados. Para mais informações, consulte Enable automatic certificate rotation.
Ativar rotação automática de certificados
Ao ativar a rotação automática de certificados, o PolarDB renova automaticamente o certificado durante a janela de manutenção do cluster, dentro de 10 dias antes do vencimento.
A renovação automática de certificados reinicia o cluster. Recomendamos realizar esta operação fora dos horários 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. Recomendamos realizar esta operação fora dos horários de pico.
Na aba SSL Settings, desative a chave SSL Status para desabilitar 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. |