Conecte-se ao Banco de Dados do Azure para MySQL – Servidor Flexível com conexões criptografadas
APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor flexível
O servidor flexível do Banco de Dados do Azure para MySQL dá suporte à conexão de seus aplicativos cliente à instância de servidor flexível do Banco de Dados do Azure para MySQL usando o protocolo SSL com criptografia TLS. 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, permitindo que você atenda aos requisitos de conformidade.
O servidor flexível do Banco de Dados do Azure para MySQL dá suporte a conexões criptografadas usando o protocolo TLS 1.2 por padrão e todas as conexões de entrada com TLS 1.0 e TLS 1.1 são negadas por padrão. A configuração de imposição de conexão criptografada ou de TLS em seu servidor flexível pode ser alterada conforme discutido neste artigo.
A seguir estão as diferentes configurações de configurações de SSL e TLS que você pode ter para sua instância de servidor flexível do Banco de Dados do Azure para MySQL:
Importante
De acordo com a Remoção do Suporte para os Protocolos TLS 1.0 e TLS 1.1, a partir do início de setembro de 2024, novos servidores não poderão mais usar o TLS 1.0 ou 1.1 e os servidores existentes não poderão fazer downgrade para essas versões. A partir de meados de setembro de 2024, iniciaremos uma atualização obrigatória de todos os servidores que atualmente usam o TLS 1.0 ou 1.1 para o TLS 1.2. Espera-se que esse processo de atualização seja concluído até o final de setembro de 2024. É altamente recomendável que os clientes garantam que seus aplicativos sejam totalmente compatíveis com o TLS 1.2 antes do final de setembro.
Cenário | Configurações de parâmetro do servidor | Descrição |
---|---|---|
Desabilitar a imposição de SSL | require_secure_transport = OFF | Se o aplicativo herdado não der suporte a conexões criptografadas ao servidor flexível do Banco de Dados do Azure para MySQL, você poderá desabilitar a imposição de conexões criptografadas à instância do servidor flexível do Banco de Dados do Azure para MySQL definindo require_secure_transport=OFF. |
Impor o SSL com a versão do TLS < 1.2 (será preterido em setembro de 2024) | require_secure_transport = ON e tls_version = TLS 1.0 or TLS 1.1 | Se o seu aplicativo herdado der suporte a conexões criptografadas, mas exigir o TLS versão < 1.2, você poderá habilitar conexões criptografadas, mas configurar a sua instância de servidor flexível do Banco de Dados do Azure para MySQL para permitir conexões com a versão TLS (1.0 ou 1.1) compatível com o seu aplicativo. Compatível somente com a versão v5.7 do servidor flexível do Banco de Dados do Azure para MySQL. |
Impor SSL com a versão do TLS = 1.2 (configuração padrão) | require_secure_transport = ON e tls_version = TLS 1.2 | Essa é a configuração recomendada e padrão para o servidor flexível do Banco de Dados do Azure para MySQL. |
Impor SSL com a versão do TLS = 1.3 | require_secure_transport = ON e tls_version = TLS 1.3 | Essa configuração é útil e recomendada para desenvolvimento de novos aplicativos. Compatível somente com a versão v8.0 do servidor flexível do Banco de Dados do Azure para MySQL. |
Observação
Não há suporte para alterações na criptografia do SSL Cipher no servidor flexível do Banco de Dados do Azure para MySQL. Os conjuntos de criptografia FIPS são impostos por padrão quando tls_version é definido como TLS versão 1.2. Para versões de TLS diferentes da versão 1.2, a codificação SSL é definida com as configurações padrão que vêm com a instalação da comunidade do MySQL.
Neste artigo, você aprenderá como:
- Configurar sua instância do servidor flexível do Banco de Dados do Azure para MySQL
- Com SSL desabilitado
- Com o SSL aplicado com a versão do TLS
- Conectar-se à instância de servidor flexível do Banco de Dados do Azure para MySQL usando a linha de comando do MySQL
- Com conexões criptografadas desabilitadas
- Com conexões criptografadas habilitadas
- Verificar o status de criptografia para sua conexão
- Conecte-se à instância de servidor flexível do Banco de Dados do Azure para MySQL com conexões criptografadas usando várias estruturas de aplicativo
Desabilitar a imposição de SSL na instância do servidor flexível do Banco de Dados do Azure para MySQL
Se o aplicativo cliente não der suporte a conexões criptografadas, você precisará desabilitar a imposição de conexões criptografadas em sua instância de servidor flexível do Banco de Dados do Azure para MySQL. Para desabilitar a imposição de conexões criptografadas, você precisará definir o parâmetro de servidor require_secure_transport como OFF, conforme mostrado na captura de tela, e salvar 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 que a reinicialização do servidor entre em vigor.
Conectar-se usando o cliente de linha de comando do MySQL com SSL desabilitado
O exemplo a seguir mostra como se conectar ao servidor usando a interface de linha de comando do 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
A definição de require_secure_transport como OFF não significa que não há suporte para conexões criptografadas no lado do servidor. Se você definir require_secure_transport como OFF na instância do servidor flexível do Banco de Dados do Azure para MySQL, mas o cliente se conectar com a conexão criptografada, ele ainda será aceito. A conexão a seguir usando o cliente MySQL para uma instância de servidor flexível do Banco de Dados do Azure para MySQL configurada com require_secure_transport=OFF também funciona conforme mostrado abaixo.
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 configuração require_secure_transport=OFF relaxa a imposição de conexões criptografadas no servidor flexível do Banco de Dados do Azure para MySQL e permite conexões não criptografadas com o servidor do cliente, além das conexões criptografadas.
Impor SSL com a versão do TLS
Para definir versões do TLS em sua instância de servidor flexível do Banco de Dados do Azure para MySQL, você precisa definir 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 o SSL, mas exigir qualquer protocolo diferente do TLS 1.2, você precisará definir as versões do TLS no parâmetro do servidor. *tls_version- é um parâmetro de servidor estático que exige uma reinicialização do servidor para que o parâmetro entre em vigor. A seguir estão os protocolos com suporte para as versões disponíveis do servidor flexível do Banco de Dados do Azure para MySQL.
Versão do servidor flexível do Banco de Dados do Azure para MySQL | Valores com suporte de tls_version | Configuração padrão |
---|---|---|
MySQL 5.7 | TLS 1.0, TLS 1.1 (será preterido em setembro de 2024) TLS 1.2 | TLS 1.2 |
MySQL 8.0 | TLS 1.2, TLS 1.3 | TLS 1.2 |
Conectar-se usando um cliente de linha de comando cm TLS/SSL
Baixar o certificado SSL público
Para usar conexões criptografadas com seus aplicativos cliente, baixe o certificado SSL público que também está disponível no painel Rede do portal do Azure, conforme mostrado na captura de tela abaixo.
Observação
É necessário baixar este certificado SSL para os servidores na nuvem do Azure Governamental.
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. Isso permite que os aplicativos se conectem com segurança ao banco de dados por meio do SSL.
Se você criou sua instância de servidor flexível do Banco de Dados do Azure para MySQL com Acesso privado (Integração da VNet), será necessário se conectar ao servidor a partir de um recurso dentro da mesma VNet que o seu servidor. Você pode criar uma máquina virtual e adicioná-la à VNet criada com sua instância de servidor flexível do Banco de Dados do Azure para MySQL.
Se você criou sua instância de servidor flexível do Banco de Dados do Azure para MySQL com Acesso público (endereços IP permitidos), é possível adicionar o seu endereço IP local à lista de regras de firewall em seu servidor.
Você pode escolher mysql.exe ou Workbench do MySQL--> para se conectar ao servidor do ambiente local.
O exemplo a seguir mostra como se conectar ao servidor usando a interface de linha de comando do MySQL. Use the --ssl-mode=REQUIRED
configuração de cadeia de conexão 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://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootCA.crt.pem
Observação
Confirme se o valor passado para --ssl-ca
corresponde ao caminho do arquivo para o certificado que você salvou.
Se você estiver se conectando ao Banco de Dados do Azure para MySQL – flexível com SSL e estiver usando uma opção para executar a verificação completa (sslmode=VERTIFY_IDENTITY) com o nome da entidade do certificado, use <servername>.mysql.database.azure.com na sua cadeia de conexão.
Se você tentar se conectar ao seu servidor com conexões não criptografadas, verá um erro ao indicar que as conexões que usam o transporte inseguro são proibidas de forma semelhante à seguinte:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Verifique a conexão TSL/SSL
Execute o comando de mysql status para verificar se você se conectou ao servidor MySQL usando o TLS/SSL:
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 codificação mostra um exemplo e, com base no cliente, você pode ver um conjunto de codificação diferente.
Como identificar os protocolos TLS configurados em seu servidor?
Você pode executar o comando SHOW GLOBAL VARIABLES LIKE 'tls_version'; e verifique o valor para entender o que todos os protocolos estão configurados.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Como localizar o protocolo TLS que está sendo usado pelos meus clientes para se conectar ao servidor?
Você pode executar o comando abaixo e observar tls_version para ver a sessão a fim de identificar a versão do TLS que é usada para se conectar.
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 de servidor flexível do Banco de Dados do Azure para MySQL com conexões criptografadas usando várias estruturas de aplicativo
Cadeias de conexão previamente definidas na página "Cadeias de Conexão" disponível em seu servidor no portal do Azure incluem os parâmetros necessários para linguagens comuns a fim de se conectar ao seu servidor de banco de dados usando TSL/SSL. O parâmetro TLS/SSL varia de acordo com o conector. Por exemplo, "useSSL=true", "sslmode=required" ou "ssl_verify_cert=true" e outras variações.
Para estabelecer uma conexão criptografada com sua instância de servidor flexível do Banco de Dados do Azure para MySQL por meio do TLS/SSL do seu aplicativo, confira os seguintes exemplos de código:
WordPress
Baixe o certificado público SSL e adicione as linhas a seguir em 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/DigiCertGlobalRootCA.crt.pem');
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.crt.pem'}
}
}
}
Ruby
client = Mysql2::Client.new(
:host => 'mydemoserver.mysql.database.azure.com',
:username => 'myadmin',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/DigiCertGlobalRootCA.crt.pem'
)
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootCA.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 = "DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.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;
});
Próximas etapas
- Usar o MySQL Workbench para conectar e consultar dados no servidor flexível do Banco de Dados do Azure para MySQL
- Usar PHP para conectar e consultar dados no servidor flexível do Banco de Dados do Azure para MySQL
- Crie e gerencie a rede virtual de servidor flexível do Banco de Dados do Azure para MySQL usando a CLI do Azure.
- Saiba mais sobre Rede no servidor flexível do Banco de Dados do Azure para MySQL
- Saiba mais sobre Regras de firewall do servidor flexível do Banco de Dados do Azure para MySQL