Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você aprenderá como:
- Configure sua instância do Banco de Dados do Azure para MySQL Servidor flexível
- Com SSL desabilitado
- Com o SSL aplicado com a versão do TLS
- Conecte-se à sua instância do servidor flexível Banco de Dados do Azure para MySQL usando a linha de comando mysql
- Com conexões criptografadas desabilitadas
- Com conexões criptografadas habilitadas
- Verificar o status de criptografia para sua conexão
- Conecte-se à instância do servidor flexível Banco de Dados do Azure para MySQL com conexões criptografadas usando várias estruturas de aplicativo
Visão geral do suporte de TLS/SSL no Servidor Flexível do Banco de Dados do Azure para MySQL
O Servidor Flexível do Banco de Dados do Azure para MySQL oferece suporte à conexão dos seus aplicativos cliente à instância do Servidor Flexível do Banco de Dados do Azure para MySQL por meio de SSL (Secure Sockets Layer) com criptografia TLS (Transport Layer Security). O TLS é um protocolo padrão do setor que garante conexões de rede criptografadas entre o servidor de banco de dados e os aplicativos cliente, para que você possa seguir os requisitos de conformidade.
O Banco de Dados do Azure para MySQL – Servidor Flexível oferece suporte a conexões criptografadas por meio do Transport Layer Security (TLS 1.2) por padrão e, por padrão, recusa todas as conexões de entrada que usam TLS 1.0 e TLS 1.1. Você pode alterar a imposição de conexão criptografada ou a configuração de versão do TLS em seu Servidor Flexível, conforme discutido neste artigo.
A tabela a seguir descreve as diferentes configurações de configurações de SSL e TLS que você pode ter para sua instância do servidor flexível Banco de Dados do Azure para MySQL:
Importante
De acordo com a remoção do suporte aos protocolos TLS 1.0 e TLS 1.1, a Microsoft havia planejado anteriormente descontinuar totalmente o TLS 1.0 e o TLS 1.1 até setembro de 2024. No entanto, devido às dependências identificadas por alguns clientes, Microsoft decidiu estender a linha do tempo.
A partir de 31 de agosto de 2025, Microsoft inicia a atualização forçada para todos os servidores que ainda usam o TLS 1.0 ou 1.1. Após essa data, todas as conexões que dependem do TLS 1.0 ou 1.1 podem parar de funcionar a qualquer momento. Para evitar possíveis interrupções de serviço, conclua sua migração para o TLS 1.2 antes de 31 de agosto de 2025.
| Scenario | Configurações de parâmetro do servidor | Description |
|---|---|---|
| Desabilitar a imposição do TLS | require_secure_transport = OFF |
Se o aplicativo herdado não der suporte a conexões criptografadas, desabilite a imposição de conexões criptografadas. |
| Impor o TLS com a versão do TLS < 1.2 (descontinuado em setembro de 2024) |
require_secure_transport = ON e tls_version = TLS 1.0 ou TLS 1.1 |
Não está mais disponível! |
| Imponha o TLS com a versão TLS = 1.2 (Configuração padrão) |
require_secure_transport = ON e tls_version = TLS 1.2 |
Configuração padrão. |
| Aplicar o TLS com a versão TLS = 1.3 |
require_secure_transport = ON e tls_version = TLS 1.3 |
Configuração recomendada; compatível somente com o Banco de Dados do Azure para MySQL Servidor Flexível, versão v8.0 e posterior. |
Note
Não há suporte para alterações na criptografia TLS. Os conjuntos de criptografia em conformidade com FIPS são impostos por padrão quando tls_version é definido como TLS 1.2 ou TLS 1.3.
Desabilitar a imposição do TLS na instância Flexível do Servidor de Banco de Dados do Azure para MySQL
Se o seu aplicativo cliente não oferecer suporte a conexões criptografadas, você precisará desabilitar a imposição de conexões criptografadas na sua instância do Servidor Flexível do Banco de Dados do Azure para MySQL. Para desabilitar a imposição de conexões criptografadas, defina o parâmetro do require_secure_transport servidor como OFF mostrado na captura de tela a seguir e salve a configuração de parâmetro do servidor para que ele entre em vigor.
require_secure_transport é um parâmetro de servidor dinâmico que entra em vigor imediatamente e não requer a reinicialização do servidor.
Conectar usando o cliente de linha de comando mysql com o TLS desabilitado
O exemplo a seguir mostra como se conectar ao servidor usando a interface de linha de comando mysql. Use a --ssl-mode=DISABLED configuração cadeia de conexão para desabilitar a conexão TLS/SSL do cliente MySQL. Substitua os valores por um nome do servidor e uma senha que sejam reais.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Importante
Se você definir require_secure_transport como OFF na instância do Banco de Dados do Azure para MySQL – Servidor Flexível, mas o cliente se conectar com uma conexão criptografada, o servidor ainda aceitará essa conexão.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=REQUIRED
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.29-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show global variables like '%require_secure_transport%';
+--------------------------+-------+
| Variable_name | Value |
| +--------------------------+-------+ |
| require_secure_transport | OFF |
| +--------------------------+-------+ |
| 1 row in set (0.02 sec) |
Em resumo, a require_secure_transport=OFF configuração relaxa a imposição de conexões criptografadas. Portanto, o servidor aceita conexões não criptografadas, além de conexões criptografadas.
Impor a versão do TLS
Para definir as versões de TLS na instância do Banco de Dados do Azure para MySQL – Servidor Flexível, defina o parâmetro do servidor tls_version. A configuração padrão do protocolo TLS é TLSv1.1.2. Se o aplicativo der suporte a conexões com o servidor MySQL com TLS, mas exigir qualquer protocolo diferente do TLS 1.2, defina as versões do TLS no parâmetro do servidor.
tls_version é um parâmetro de servidor estático que requer uma reinicialização do servidor para que o parâmetro entre em vigor.
Conectar usando o cliente de linha de comando mysql com TLS/SSL
Baixar o certificado SSL público
Para estabelecer conexões criptografadas com seus aplicativos cliente, baixe o certificado DigiCert Global Root G2 e o certificado Microsoft RSA Root Certificate Authority 2017. Combine ambos os certificados antes de iniciar uma conexão com o servidor. Para obter etapas detalhadas, consulte Como atualizar o repositório de certificados raiz em seu cliente.
Note
Você deve baixar o certificado DigiCert Global Root G2 para seus servidores nas nuvens Azure Governamental, Pública e Mooncake.
Salve o arquivo do certificado em seu local de preferência. Por exemplo, este tutorial usa c:\ssl ou \var\www\html\bin em seu ambiente local ou o ambiente do cliente onde seu aplicativo está hospedado.
Se você criou sua instância do Banco de Dados do Azure para MySQL Servidor flexível com Acesso privado (integração com VNet), será necessário se conectar ao seu servidor a partir de um recurso na mesma VNet que seu servidor. Você pode criar uma máquina virtual e adicioná-la à VNet criada com sua instância do Banco de Dados do Azure para MySQL Servidor flexível.
Se você criou sua instância do Banco de Dados do Azure para MySQL Servidor flexível com Acesso público (endereços IP permitidos), poderá adicionar seu endereço IP local à lista de regras de firewall no seu servidor.
Você pode escolher mysql.exe ou usar o MySQL Workbench com Banco de Dados do Azure para MySQL – Servidor Flexível para se conectar ao servidor em seu ambiente local.
O exemplo a seguir mostra como se conectar ao servidor usando a interface de linha de comando mysql. Use a configuração de cadeia de conexão --ssl-mode=REQUIRED para impor a verificação de certificado TLS/SSL. Passe o caminho do arquivo de certificado local para o parâmetro --ssl-ca. Substitua os valores por um nome do servidor e uma senha que sejam reais.
sudo apt-get install mysql-client
wget --no-check-certificate https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootG2.crt.pem
Note
Confirme se o valor que você passa para --ssl-ca corresponde ao caminho do arquivo do certificado que você salvou.
Se você estiver se conectando com a verificação completa (sslmode=VERIFY_IDENTITY), use \<servername\>.mysql.database.azure.com na cadeia de conexão.
Se você tentar se conectar ao servidor com conexões não criptografadas, verá um erro informando que conexões usando transporte não seguro são proibidas:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Verificar a conexão TLS
Execute o comando MySQL status para verificar se você está conectado usando o TLS:
mysql> status
Confirme que a conexão é criptografada revisando a saída, que deve mostrar a seguinte mensagem: SSL: a criptografia em uso é. Esse conjunto de criptografias mostra um exemplo e, com base no cliente, você pode ver um conjunto de criptografias diferente.
Como identificar os protocolos TLS configurados em meu servidor?
Execute o comando SHOW GLOBAL VARIABLES LIKE 'tls_version'; e verifique o valor para entender quais protocolos estão configurados.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Como encontrar quais protocolos TLS meus clientes usam para se conectar ao servidor?
Para verificar a versão do TLS usada nesta conexão, execute a consulta SQL:
SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher,
processlist_user AS user, processlist_host AS host
FROM performance_schema.status_by_thread AS sbt
JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;
Conecte-se à instância do servidor flexível Banco de Dados do Azure para MySQL com conexões criptografadas usando várias estruturas de aplicativo
As cadeias de conexão predefinidas na página Cadeias de Conexão disponíveis para o servidor no portal Azure incluem os parâmetros necessários para linguagens comuns se conectarem ao servidor de banco de dados usando TLS/SSL. O parâmetro TLS/SSL varia de acordo com o conector. Por exemplo, use useSSL=true, sslmode=required ou ssl_verify_cert=true e outras variações.
Para estabelecer uma conexão criptografada com sua instância do Banco de Dados do Azure para MySQL Servidor flexível via TLS/SSL a partir do seu aplicativo, consulte os seguintes exemplos de código:
WordPress
Baixe o certificado público SSL e adicione as seguintes linhas wp-config.php após a linha // **MySQL settings - You can get this info from your web host** //.
//** Connect with SSL ** //
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
//** SSL CERT **//
define('MYSQL_SSL_CERT','/FULLPATH/on-client/to/DigiCertGlobalRootG2.crt.pem');
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (usando PDO)
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'myadmin', 'yourpassword', $options);
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl_ca='/var/www/html/DigiCertGlobalRootG2.crt.pem')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl={'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'})
Django (PyMySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'quickstartdb',
'USER': 'myadmin',
'PASSWORD': 'yourpassword',
'HOST': 'mydemoserver.mysql.database.azure.com',
'PORT': '3306',
'OPTIONS': {
'ssl': {'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'}
}
}
}
Ruby
client = Mysql2::Client.new(
:host => 'mydemoserver.mysql.database.azure.com',
:username => 'myadmin',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
)
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootG2.crt.pem")
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=custom",'myadmin' , 'yourpassword', 'mydemoserver.mysql.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (conector do MySQL para Java)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", 'mydemoserver.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (conector do MariaDB para Java)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mariadb://%s/%s?useSSL=true&trustServerCertificate=true", 'mydemoserver.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin",
Password = "yourpassword",
Database = "quickstartdb",
SslMode = MySqlSslMode.VerifyCA,
SslCa = "DigiCertGlobalRootG2.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Node.js
var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("/var/www/html/DigiCertGlobalRootG2.crt.pem", "utf8")];
var conn=mysql.createConnection({
host:"mydemoserver.mysql.database.azure.com",
user:"myadmin",
password:"yourpassword",
database:"quickstartdb",
port:3306,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Conteúdo relacionado
- Usar o MySQL Workbench com Banco de Dados do Azure para MySQL - Servidor Flexível
- Usar PHP com o banco de dados do Azure para MySQL - Servidor flexível
- Criar e gerenciar redes virtuais para o Banco de Dados do Azure para MySQL - Servidor Flexível usando a CLI do Azure
- rede no Banco de Dados do Azure para MySQL - Servidor Flexível
- Banco de Dados do Azure para MySQL - Regras de firewall de servidor flexível