Konfigurera SSL-anslutning i ditt program för att säkert ansluta till Azure Database for MySQLConfigure SSL connectivity in your application to securely connect to Azure Database for MySQL

Azure Database for MySQL stöder anslutning av Azure Database for MySQL-servern till klient program med hjälp av Secure Sockets Layer (SSL).Azure Database for MySQL supports connecting your Azure Database for MySQL server to client applications using Secure Sockets Layer (SSL). Framtvingande av SSL-anslutningar mellan databasservern och klientprogrammen hjälper till att skydda mot ”man in the middle”-attacker genom att kryptera dataströmmen mellan servern och programmet.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.

Steg 1: Hämta SSL-certifikatStep 1: Obtain SSL certificate

Hämta det certifikat som krävs för att kommunicera via SSL med din Azure Database for MySQL https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem -Server från och spara certifikat filen på den lokala enheten (i den här självstudien används c:\ssl till exempel).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). För Microsoft Internet Explorer och Microsoft Edge: När hämtningen är klar byter du namn på certifikatet till BaltimoreCyberTrustRoot. CRT. pem.For Microsoft Internet Explorer and Microsoft Edge: After the download has completed, rename the certificate to BaltimoreCyberTrustRoot.crt.pem.

Anteckning

Baserat på feedback från kunder har vi utökat rot certifikatets utfasning för vår befintliga Baltimore rot certifikat utfärdare till 15 februari 2021 (02/15/2021).Based on the feedback from customers we have extended the root certificate deprecation for our existing Baltimore Root CA till February 15, 2021 (02/15/2021).

Viktigt

SSL-rotcertifikat är inställt på att upphöra att gälla den 15 februari 2021 (02/15/2021).SSL root certificate is set to expire starting February 15, 2021 (02/15/2021). Uppdatera ditt program för att använda det nya certifikatet.Please update your application to use the new certificate. Mer information finns i avsnittet om planerade certifikat uppdateringarTo learn more , see planned certificate updates

Se följande länkar för certifikat för servrar i suveräna moln: Azure Government, Azure Kinaoch Azure Germany.See the following links for certificates for servers in sovereign clouds: Azure Government, Azure China, and Azure Germany.

Steg 2: bind SSLStep 2: Bind SSL

För specifika anslutnings strängar för programmeringsspråk, se exempel koden nedan.For specific programming language connection strings, please refer to the sample code below.

Ansluta till servern med MySQL Workbench över SSLConnecting to server using MySQL Workbench over SSL

Konfigurera MySQL Workbench för att ansluta säkert över SSL.Configure MySQL Workbench to connect securely over SSL.

  1. I dialog rutan skapa ny anslutning navigerar du till fliken SSL .From the Setup New Connection dialogue, navigate to the SSL tab.

  2. Uppdatera fältet Använd SSL till "kräver".Update the Use SSL field to "Require".

  3. I fältet SSL-ca-fil: anger du sökvägen till filen BaltimoreCyberTrustRoot. CRT. pem.In the SSL CA File: field, enter the file location of the BaltimoreCyberTrustRoot.crt.pem.

    Spara SSL-konfiguration

För befintliga anslutningar kan du binda SSL genom att högerklicka på anslutnings ikonen och välja Redigera.For existing connections, you can bind SSL by right-clicking on the connection icon and choose edit. Gå sedan till fliken SSL och bind certifikat filen.Then navigate to the SSL tab and bind the cert file.

Ansluta till servern med hjälp av MySQL CLI över SSLConnecting to server using the MySQL CLI over SSL

Ett annat sätt att binda SSL-certifikatet är att använda kommando rads gränssnittet MySQL genom att köra följande kommandon.Another way to bind the SSL certificate is to use the MySQL command-line interface by executing the following commands.

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

Anteckning

När du använder kommando rads gränssnittet MySQL i Windows kan du få ett fel meddelande SSL connection error: Certificate signature check failed .When using the MySQL command-line interface on Windows, you may receive an error SSL connection error: Certificate signature check failed. Om detta inträffar ersätter du --ssl-mode=REQUIRED --ssl-ca={filepath} parametrarna med --ssl .If this occurs, replace the --ssl-mode=REQUIRED --ssl-ca={filepath} parameters with --ssl.

Steg 3: tvinga SSL-anslutningar i AzureStep 3: Enforcing SSL connections in Azure

Använda Azure PortalUsing the Azure portal

Använd Azure Portalen, gå till Azure Database for MySQL-servern och klicka sedan på anslutnings säkerhet.Using the Azure portal, visit your Azure Database for MySQL server, and then click Connection security. Använd växlings knappen för att aktivera eller inaktivera inställningen tvinga SSL-anslutning och klicka sedan på Spara.Use the toggle button to enable or disable the Enforce SSL connection setting, and then click Save. Microsoft rekommenderar att alltid aktivera inställningen tvinga SSL-anslutning för förbättrad säkerhet.Microsoft recommends to always enable the Enforce SSL connection setting for enhanced security.

Skärm bild av Azure Portal att använda SSL-anslutningar i Azure Database for MySQL

Använda Azure CLIUsing Azure CLI

Du kan aktivera eller inaktivera SSL-tvångs parametern genom att använda aktiverade eller inaktiverade värden i Azure CLI.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 mydemoserver --ssl-enforcement Enabled

Steg 4: kontrol lera SSL-anslutningenStep 4: Verify the SSL connection

Kör kommandot MySQL status för att kontrol lera att du har anslutit till MySQL-servern med hjälp av SSL:Execute the mysql status command to verify that you have connected to your MySQL server using SSL:

mysql> status

Bekräfta att anslutningen är krypterad genom att granska utdata som ska visas: SSL: chiffrering som används är AES256-SHAConfirm the connection is encrypted by reviewing the output, which should show: SSL: Cipher in use is AES256-SHA

ExempelkodSample code

Om du vill upprätta en säker anslutning till Azure Database for MySQL via SSL från ditt program, se följande kod exempel:To establish a secure connection to Azure Database for MySQL over SSL from your application, refer to the following code samples:

Se listan över kompatibla driv rutiner som stöds av tjänsten Azure Database for MySQL.Refer to the list of compatible drivers supported by the Azure Database for MySQL service.

PHPPHP

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/BaltimoreCyberTrustRoot.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}

PHP (med sub)PHP (Using PDO)

$options = array(
    PDO::MYSQL_ATTR_SSL_CA => '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'username@mydemoserver', 'yourpassword', $options);

Python (MySQLConnector python)Python (MySQLConnector Python)

try:
    conn = mysql.connector.connect(user='myadmin@mydemoserver',
                                   password='yourpassword',
                                   database='quickstartdb',
                                   host='mydemoserver.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@mydemoserver',
                       password='yourpassword',
                       database='quickstartdb',
                       host='mydemoserver.mysql.database.azure.com',
                       ssl={'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'})

Django (PyMySQL)Django (PyMySQL)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'quickstartdb',
        'USER': 'myadmin@mydemoserver',
        'PASSWORD': 'yourpassword',
        'HOST': 'mydemoserver.mysql.database.azure.com',
        'PORT': '3306',
        'OPTIONS': {
            'ssl': {'ca': '/var/www/html/BaltimoreCyberTrustRoot.crt.pem'}
        }
    }
}

RubyRuby

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

Java (MySQL Connector för Java)Java (MySQL Connector for 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@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

Java (MariaDB Connector för Java)Java (MariaDB Connector for 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@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

.NET (MySqlConnector).NET (MySqlConnector)

var builder = new MySqlConnectionStringBuilder
{
    Server = "mydemoserver.mysql.database.azure.com",
    UserID = "myadmin@mydemoserver",
    Password = "yourpassword",
    Database = "quickstartdb",
    SslMode = MySqlSslMode.VerifyCA,
    SslCa = "BaltimoreCyberTrustRoot.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
    connection.Open();
}

Nästa stegNext steps

Granska olika alternativ för kopplings anslutning efter Azure Database for MySQL anslutnings bibliotek förReview various application connectivity options following Connection libraries for Azure Database for MySQL