Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SI APPLICA A:
Database di Azure per MySQL - Server flessibile
Il server flessibile di Database di Azure per MySQL supporta la connessione delle applicazioni client all'istanza del server flessibile di Database di Azure per MySQL tramite SSL (Secure Sockets Layer) con la crittografia TLS (Transport Layer Security). TLS è un protocollo standard del settore che garantisce connessioni di rete crittografate tra il server di database e le applicazioni client, consentendo di rispettare i requisiti di conformità.
Il server flessibile di Database di Azure per MySQL supporta connessioni crittografate tramite Transport Layer Security (TLS 1.2) per impostazione predefinita mentre tutte le connessioni in ingresso con TLS 1.0 e TLS 1.1 vengono rifiutate per impostazione predefinita. L'imposizione della connessione crittografata o la configurazione della versione TLS nel server flessibile può essere modificata come descritto in questo articolo.
Di seguito sono riportate le diverse configurazioni delle impostazioni SSL e TLS disponibili per l'istanza del server flessibile di Database di Azure per MySQL:
Importante
In base alla rimozione del supporto per i protocolli TLS 1.0 e TLS 1.1, in precedenza era prevista la deprecazione completa di TLS 1.0 e 1.1 entro settembre 2024. Tuttavia, a causa delle dipendenze identificate da alcuni clienti, abbiamo deciso di estendere la sequenza temporale.
- A partire dal 31 agosto 2025, verrà avviato l'aggiornamento forzato per tutti i server che usano ancora TLS 1.0 o 1.1. Dopo questa data, le connessioni che si basano su TLS 1.0 o 1.1 potrebbero smettere di funzionare in qualsiasi momento. Per evitare potenziali interruzioni del servizio, è consigliabile che i clienti completino la migrazione a TLS 1.2 prima del 31 agosto 2025.
- A partire da settembre 2024, i nuovi server non potranno più usare TLS 1.0 o 1.1 e i server esistenti non potranno effettuare il downgrade a queste versioni.
È consigliabile che i clienti aggiornino le applicazioni per supportare TLS 1.2 il prima possibile per evitare interruzioni del servizio.
| Sceneggiatura | Impostazioni dei parametri del server | Descrizione |
|---|---|---|
| Disabilitare l'applicazione di SSL | require_secure_transport = OFF | Se l'applicazione legacy non supporta le connessioni crittografate al server flessibile di Database di Azure per MySQL, è possibile disabilitare l'applicazione delle connessioni crittografate all'istanza del server flessibile di Database di Azure per MySQL impostando require_secure_transport=OFF. |
| Applicare SSL con TLS versione < 1.2 (sarà deprecato a settembre 2024) | require_secure_transport = ON e tls_version = TLS 1.0 o TLS 1.1 | Se l'applicazione legacy supporta connessioni crittografate ma richiede TLS versione < 1.2, è possibile abilitare le connessioni crittografate, ma configurare l'istanza del server flessibile di Database di Azure per MySQL per consentire le connessioni con la versione TLS (1.0 o 1.1) supportata dall'applicazione. Supportata solo con il server flessibile di Database di Azure per MySQL versione 5.7 |
| Applicare SSL con TLS versione = 1.2 (configurazione predefinita) | require_secure_transport = ON e tls_version = TLS 1.2 | Si tratta della configurazione consigliata e predefinita per il server flessibile di Database di Azure per MySQL. |
| Applicare SSL con TLS versione = 1.3 | require_secure_transport = ON e tls_version = TLS 1.3 | Ciò è utile e consigliato per lo sviluppo di nuove applicazioni. Supportata solo con il server flessibile di Database di Azure per MySQL versione 8.0 |
Note
Le modifiche apportate alla crittografia SSL nel server flessibile di Database di Azure per MySQL non sono supportate. Le suite di crittografia FIPS vengono applicate per impostazione predefinita quando tls_version è impostato su TLS versione 1.2 . Per le versioni TLS diverse dalla versione 1.2, la crittografia SSL è impostata su impostazioni predefinite, incluse nell'installazione della community MySQL.
In questo articolo vengono illustrate le operazioni seguenti:
- Configurare l'istanza del server flessibile di Database di Azure per MySQL
- Con SSL disabilitato
- Con SSL applicato con la versione TLS
- Connettersi all'istanza del server flessibile di Database di Azure per MySQL usando la riga di comando mysql
- Con connessioni crittografate disabilitate
- Con connessioni crittografate abilitate
- Verificare lo stato della crittografia per la connessione
- Connettersi all'istanza del server flessibile di Database di Azure per MySQL con connessioni crittografate usando vari framework applicazione
Disabilitare l'applicazione di SSL nell'istanza del server flessibile di Database di Azure per MySQL
Se l'applicazione client non supporta le connessioni crittografate, è necessario disabilitare l'applicazione delle connessioni crittografate nell'istanza del server flessibile di Database di Azure per MySQL. Per disabilitare l'applicazione delle connessioni crittografate, è necessario impostare il parametro require_secure_transport su OFF, come illustrato nello screenshot, e salvare la configurazione dei parametri del server per renderla effettiva. require_secure_transport è un parametro del server dinamico che diventa effettivo immediatamente e che non richiede il riavvio del server.
Connettersi usando il client della riga di comando mysql con SSL disabilitato
L'esempio seguente illustra come connettersi al server usando l'interfaccia della riga di comando mysql. Usare l'impostazione della stringa --ssl-mode=DISABLED di connessione per disabilitare la connessione TLS/SSL dal client mysql. Sostituire i valori con il nome server e la password effettivi.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Importante
L'impostazione di require_secure_transport su OFF non significa che le connessioni crittografate non siano supportate sul lato server. Se si imposta require_secure_transport su OFF nell'istanza del server flessibile di Database di Azure per MySQL, ma il client si connette con la connessione crittografata, viene comunque accettato. Anche la connessione seguente tramite il client mysql a un'istanza del server flessibile di Database di Azure per MySQL, configurata con require_secure_transport=OFF, funziona come illustrato di seguito.
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) |
In sintesi, l'impostazione require_secure_transport=OFF riduce l'applicazione di connessioni crittografate nel server flessibile di Database di Azure per MySQL e consente connessioni non crittografate al server dal client oltre alle connessioni crittografate.
Applicare SSL con la versione TLS
Per impostare le versioni TLS nell'istanza del server flessibile di Database di Azure per MySQL, è necessario impostare il parametro *tls_version- server. L'impostazione predefinita per il protocollo TLS è TLS 1.2. Se l'applicazione supporta le connessioni al server MySQL con SSL, ma richiede qualsiasi protocollo diverso da TLS 1.2, è necessario impostare le versioni di TLS nel parametro server. *tls_version- è un parametro del server statico che richiede un riavvio del server per rendere effettivo il parametro. Di seguito sono riportati i protocolli supportati per le versioni disponibili del server flessibile di Database di Azure per MySQL.
| Versione del server flessibile di Database di Azure per MySQL | Valori supportati di tls_version | Impostazione predefinita |
|---|---|---|
| MySQL 5.7 | TLS 1.0, TLS 1.1 (sarà deprecato a settembre 2024) TLS 1.2 | TLS 1.2 |
| MySQL 8.0 | TLS 1.2, TLS 1.3 | TLS 1.2 |
Connettersi usando il client da riga di comando mysql con TLS/SSL
Scaricare il certificato SSL pubblico
Per stabilire connessioni crittografate con le applicazioni client, scaricare il certificato DigiCert Global Root G2 e il certificato Microsoft RSA Root Certificate Authority 2017. Combinare entrambi i certificati prima di avviare una connessione al server. Per i passaggi dettagliati, vedere Come aggiornare l'archivio dei certificati radice nel client
Note
È necessario scaricare il certificato DigiCert Global Root G2 per i server nel cloud di Azure per enti pubblici.
È necessario scaricare il certificato DigiCert Global Root per i server in Azure Mooncake.
Salvare il file di certificato nella posizione preferita. Ad esempio, questa esercitazione usa c:\ssl o \var\www\html\bin nell'ambiente locale o nell'ambiente client in cui è ospitata l'applicazione. Ciò consente alle applicazioni di connettersi in modo sicuro al database tramite SSL.
Se è stata creata l'istanza del server flessibile di Database di Azure per MySQL con accesso privato (integrazione della rete virtuale), è necessario connettersi al server da una risorsa all'interno della stessa rete virtuale del server. È possibile creare una macchina virtuale e aggiungerla alla rete virtuale creata con l'istanza del server flessibile Database di Azure per MySQL.
Se è stata creata l'istanza del server flessibile di Database di Azure per MySQL con accesso pubblico (indirizzi IP consentiti), è possibile aggiungere l'indirizzo IP locale all'elenco delle regole del firewall nel server.
È possibile scegliere mysql.exe o Usa MySQL Workbench con il server flessibile di Database di Azure per MySQL--> per connettersi al server dall'ambiente locale.
L'esempio seguente illustra come connettersi al server usando l'interfaccia della riga di comando mysql. Per applicare la verifica del certificato TLS/SSL usare l'impostazione della stringa di connessione --ssl-mode=REQUIRED. Passare il percorso del file del certificato locale al parametro --ssl-ca. Sostituire i valori con il nome server e la password effettivi.
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
Verificare che il valore passato a --ssl-ca corrisponda al percorso del file per il certificato salvato.
Se ci si connette al server flessibile di Database di Azure per MySQL con SSL e si usa un'opzione per eseguire la verifica completa (sslmode=VERTIFY_IDENTITY) con il nome oggetto del certificato, usare <servername.mysql.database.azure.com> nella stringa di connessione.
Se si tenta di connettersi al server con connessioni non crittografate, verrà visualizzato un errore che indica che le connessioni che usano il trasporto non sicuro sono vietate in modo simile a quella illustrata di seguito:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Verificare la connessione TLS/SSL
Eseguire il comando status di MYSQL per verificare di aver eseguito la connessione al server MySQL tramite TLS/SSL:
mysql> status
Verificare che la connessione sia crittografata esaminando l'output, che dovrebbe visualizzare: SSL: Crittografia in uso. Questa suite di crittografia mostra un esempio ed è basata sul client, ma è possibile visualizzare una suite di crittografia diversa.
In che modo si identificano i protocolli TLS configurati nel server?
È possibile eseguire il comando SHOW GLOBAL VARIABLES LIKE 'tls_version'; e controllare il valore per comprendere quali sono tutti i protocolli configurati.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
In che modo si trova il protocollo TLS usato dai client per connettersi al server?
È possibile eseguire il comando seguente ed esaminare tls_version per identificare la versione TLS usata per la connessione.
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;
Connettersi all'istanza del server flessibile di Database di Azure per MySQL con connessioni crittografate usando vari framework applicazione
Le stringhe di connessione predefinite nella pagina "Stringhe di connessione" disponibili per il server nel portale di Azure includono i parametri necessari per i linguaggi comuni per connettersi al server di database tramite TLS/SSL. Il parametro TLS/SSL varia in base al connettore. Ad esempio, "useSSL=true", "sslmode=required" o "ssl_verify_cert=true" e altre varianti.
Per stabilire una connessione crittografata all'istanza del server flessibile di Database di Azure per MySQL tramite TLS/SSL dall'applicazione, vedere gli esempi di codice seguenti:
WordPress
Scaricare il certificato pubblico SSL e aggiungere le righe seguenti in wp-config.php dopo la riga // **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 (tramite 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'}
}
}
}
rubino
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 (connettore MySQL per 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 (connettore MariaDB per 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;
});
Contenuti correlati
- Usare MySQL Workbench con Database di Azure per MySQL - Server flessibile
- Usare PHP con Database di Azure per MySQL - Server flessibile
- Creare e gestire reti virtuali per Database di Azure per MySQL - Server flessibile usando l'interfaccia della riga di comando di Azure
- Networking in Database di Azure per MySQL - Server flessibile
- Database di Azure per MySQL - Regole del firewall del server flessibile