Configurare la connettività SSL nell'applicazione per la connessione sicura a Database di Azure per MariaDB
Importante
Database di Azure per MariaDB è in fase di ritiro. È consigliabile eseguire la migrazione a Database di Azure per MySQL. Per altre informazioni sulla migrazione a Database di Azure per MySQL, vedere Che cosa sta succedendo a Database di Azure per MariaDB?.
Database di Azure per MariaDB supporta la connessione alle applicazioni client tramite Secure Sockets Layer (SSL). L'applicazione delle connessioni SSL tra il server di database e le applicazioni client aiuta a proteggersi dagli attacchi "man in the middle" crittografando il flusso di dati tra il server e l'applicazione.
Ottenere un certificato SSL
Scaricare il certificato necessario per comunicare tramite SSL con il server di Database di Azure per MariaDB da https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem e salvare il file del certificato nell'unità locale (questa esercitazione per esempio usa il percorso c:\ssl). Per Microsoft Internet Explorer e Microsoft Edge: una volta completato il download, rinominare il certificato in BaltimoreCyberTrustRoot.crt.pem.
Vedere i collegamenti seguenti per certificati per server in cloud sovrani: Azure per enti pubblici, Microsoft Azure gestito da 21Vianet e Azure Germania.
Associare SSL
Connessione al server con MySQL Workbench tramite SSL
Configurare MySQL Workbench per connettersi in modo sicuro tramite SSL.
Passare alla scheda SSL dalla finestra di dialogo Setup New Connection (Configura nuova connessione).
Aggiornare il campo Usa SSL impostandolo su "Richiedi".
Immettere il percorso del file BaltimoreCyberTrustRoot.crt.pem nel campo SSL CA File: (File CA SSL:).
Per le connessioni esistenti, è possibile associare SSL facendo clic con il pulsante destro del mouse sull'icona di connessione e scegliendo Modifica. In seguito passare alla scheda SSL e associare il file del certificato.
Connessione al server con l'interfaccia della riga di comando di MySQL tramite SSL
Un altro modo per associare il certificato SSL è quello di usare l'interfaccia della riga di comando di MySQL eseguendo i comandi seguenti.
mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem
Nota
Quado si usa l'interfaccia della riga di comando di MySQL in Windows, potrebbe verificarsi un errore SSL connection error: Certificate signature check failed
. In questo caso, sostituire i parametri --ssl-mode=REQUIRED --ssl-ca={filepath}
con --ssl
.
Applicazione delle connessioni SSL in Azure
Usare il portale di Azure
Usando il portale di Azure, visitare il server Database di Azure per MariaDB e quindi selezionare Sicurezza connessione. Usare l'interruttore per abilitare o disabilitare l'impostazione Imponi connessione SSL e quindi selezionare Salva. È consigliabile abilitare sempre l'impostazione Imponi connessione SSL per ottenere un livello di sicurezza avanzato.
Utilizzare l'interfaccia della riga di comando di Azure
È possibile abilitare o disabilitare il parametro ssl-enforcement usando rispettivamente i valori Enabled o Disabled nell'interfaccia della riga di comando di Azure.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
Verificare la connessione SSL
Eseguire il comando stato mysql per verificare di essere connessi al server MariaDB tramite SSL:
status
Verificare che la connessione sia crittografata analizzando l'output, che dovrebbe essere il seguente: SSL: Cipher in use is AES256-SHA (SSL: la crittografia in uso è AES256-SHA)
Codice di esempio
Per stabilire una connessione sicura a Database di Azure per MariaDB tramite SSL dall'applicazione, fare riferimento agli esempi di codice seguenti:
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL) ;
mysqli_real_connect($conn, 'mydemoserver.mariadb.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL, MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin@mydemoserver',
password='yourpassword',
database='quickstartdb',
host='mydemoserver.mariadb.database.azure.com',
ssl_ca='/var/www/html/BaltimoreCyberTrustRoot.crt.pem')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='myadmin@mydemoserver',
password='yourpassword',
database='quickstartdb',
host='mydemoserver.mariadb.database.azure.com',
ssl={'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'})
Ruby
client = Mysql2::Client.new(
:host => 'mydemoserver.mariadb.database.azure.com',
:username => 'myadmin@mydemoserver',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'
:ssl_mode => 'required'
)
Ruby on Rails
default: &default
adapter: mysql2
username: username@mydemoserver
password: yourpassword
host: mydemoserver.mariadb.database.azure.com
sslca: BaltimoreCyberTrustRoot.crt.pem
sslverify: true
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/BaltimoreCyberTrustRoot.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@mydemoserver' , 'yourpassword', 'mydemoserver.mariadb.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (JDBC)
# 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.mariadb.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (MariaDB)
# 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.mariadb.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin@mydemoserver",
Password = "yourpassword",
Database = "quickstartdb",
SslMode = MySqlSslMode.VerifyCA,
CACertificateFile = "BaltimoreCyberTrustRoot.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Passaggi successivi
Per informazioni sulla scadenza e sulla rotazione del certificato, vedere la documentazione sulla rotazione del certificato