Configurare la connettività SSL nell'applicazione per la connessione sicura a Database di Azure per MySQLConfigure SSL connectivity in your application to securely connect to Azure Database for MySQL

Database di Azure per il server MySQL supporta la connessione alle applicazioni client tramite Secure Sockets Layer (SSL).Azure Database for MySQL supports connecting your Azure Database for MySQL server to client applications using 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.Enforcing SSL connections between your database server and your client applications helps protect against "man in the middle" attacks by encrypting the data stream between the server and your application.

Passaggio 1: ottenere un certificato SSLStep 1: Obtain SSL certificate

Scaricare il certificato necessario per comunicare tramite SSL con Database di Azure per MySQL da https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem e salvare il file del certificato nell'unità locale. In questa esercitazione è stato usato il percorso c:\ssl.Download the certificate needed to communicate over SSL with your Azure Database for MySQL server from https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem and save the certificate file to your local drive (this tutorial uses c:\ssl for example). Per Microsoft Internet Explorer e Microsoft Edge: una volta completato il download, rinominare il certificato in BaltimoreCyberTrustRoot.crt.pem.For Microsoft Internet Explorer and Microsoft Edge: After the download has completed, rename the certificate to BaltimoreCyberTrustRoot.crt.pem.

Passaggio 2: eseguire il binding SSLStep 2: Bind SSL

Connessione al server con MySQL Workbench tramite SSLConnecting to server using the MySQL Workbench over SSL

Configurare MySQL Workbench per connettersi in modo sicuro tramite SSL.Configure the MySQL Workbench to connect securely over SSL. Passare alla scheda SSL dalla finestra di dialogo Setup New Connection (Configura nuova connessione). Immettere il percorso del file BaltimoreCyberTrustRoot.crt.pem nel campo SSL CA File: (File CA SSL:).From the Setup New Connection dialogue, navigate to the SSL tab. In the SSL CA File: field, enter the file location of the BaltimoreCyberTrustRoot.crt.pem. Salvare un riquadro personalizzato Per le connessioni esistenti, è possibile associare SSL facendo clic con il pulsante destro del mouse sull'icona di connessione e scegliendo Modifica.save customized tile For existing connections, you can bind SSL by right-clicking on the connection icon and choose edit. In seguito passare alla scheda SSL e associare il file del certificato.Then navigate to the SSL tab and bind the cert file.

Connessione al server con l'interfaccia della riga di comando di MySQL tramite SSLConnecting to server using the MySQL CLI over SSL

Un altro modo per associare il certificato SSL è quello di usare l'interfaccia della riga di comando di MySQL per eseguire il comando seguente:Another way to bind the SSL certificate is to use the MySQL command-line interface by executing the following command:

mysql.exe -h mysqlserver4demo.mysql.database.azure.com -u Username@mysqlserver4demo -p --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem

Passaggio 3: applicazione delle connessioni SSL in AzureStep 3: Enforcing SSL connections in Azure

Uso del portale di AzureUsing the Azure portal

Tramite il portale di Azure passare all'istanza di Database di Azure per il server MySQL e fare clic su Sicurezza delle connessioni.Using the Azure portal, visit your Azure Database for MySQL server, and then click Connection security. Usare l'interruttore per abilitare o disabilitare l'impostazione Imponi connessione SSL, quindi fare clic su Salva.Use the toggle button to enable or disable the Enforce SSL connection setting, and then click Save. È consigliabile abilitare sempre l'impostazione Imponi connessione SSL per ottenere un livello di sicurezza avanzato.Microsoft recommends to always enable the Enforce SSL connection setting for enhanced security. enable-sslenable-ssl

Utilizzare l'interfaccia della riga di comando di AzureUsing Azure CLI

È possibile abilitare o disabilitare il parametro ssl-enforcement usando rispettivamente i valori Enabled o Disabled nell'interfaccia della riga di comando di Azure.You can enable or disable the ssl-enforcement parameter by using Enabled or Disabled values respectively in Azure CLI.

az mysql server update --resource-group myresource --name mysqlserver4demo --ssl-enforcement Enabled

Passaggio 4: verificare la connessione SSLStep 4: Verify the SSL connection

Eseguire il comando mysql status per verificare di essere connessi al server MySQL tramite SSL:Execute the mysql status command to verify that you have connected to your MySQL server using SSL:

mysql> 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)Confirm the connection is encrypted by reviewing the output, which should show: SSL: Cipher in use is AES256-SHA

Codice di esempioSample code

Per stabilire una connessione sicura a Database di Azure per MySQL tramite SSL dall'applicazione, fare riferimento agli esempi di codice seguenti:To establish a secure connection to Azure Database for MySQL over SSL from your application, refer to the following code samples:

PHPPHP

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL) ; 
mysqli_real_connect($conn, 'myserver4demo.mysql.database.azure.com', 'myadmin@myserver4demo', '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)Python (MySQLConnector Python)

try:
    conn=mysql.connector.connect(user='myadmin@myserver4demo', 
        password='yourpassword', 
        database='quickstartdb', 
        host='myserver4demo.mysql.database.azure.com', 
        ssl_ca='/var/www/html/BaltimoreCyberTrustRoot.crt.pem')
except mysql.connector.Error as err:
    print(err)

Python (PyMySQL)Python (PyMySQL)

conn = pymysql.connect(user = 'myadmin@myserver4demo', 
        password = 'yourpassword', 
        database = 'quickstartdb', 
        host = 'myserver4demo.mysql.database.azure.com', 
        ssl = {'ssl': {'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'}})

RubyRuby

client = Mysql2::Client.new(
        :host     => 'myserver4demo.mysql.database.azure.com', 
        :username => 'myadmin@myserver4demo',      
        :password => 'yourpassword',    
        :database => 'quickstartdb',
        :ssl_ca => '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'
    )

GolangGolang

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, InsecureSkipVerify: true})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=custom",'myadmin@myserver4demo' , 'yourpassword', 'myserver4demo.mysql.database.azure.com', 'quickstartdb') 
db, _ := sql.Open("mysql", connectionString)

JAVA(JDBC)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", 'myserver4demo.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@myserver4demo');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

JAVA(MariaDB)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", 'myserver4demo.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@myserver4demo');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

Passaggi successiviNext steps

Esaminare varie opzioni di connettività dell'applicazione in Raccolte di connessioni per Database di Azure per MySQLReview various application connectivity options following Connection libraries for Azure Database for MySQL