Konfigurieren von SSL-Verbindungen in der Anwendung für eine sichere Verbindung mit Azure Database for MariaDB
Wichtig
Azure Database for MariaDB wird demnächst eingestellt. Wir empfehlen Ihnen dringend, zu Azure Database for MySQL zu migrieren. Weitere Informationen zum Migrieren nach Azure Database for MySQL finden Sie unter Was geschieht mit Azure Database for MariaDB?.
Azure Database for MariaDB unterstützt die Verbindung Ihres Servers mit Azure Database for MariaDB mit Clientanwendungen, die Secure Sockets Layer (SSL) verwenden. Das Erzwingen von SSL-Verbindungen zwischen dem Datenbankserver und Clientanwendungen trägt zum Schutz vor Man-in-the-Middle-Angriffen bei, indem der Datenstrom zwischen dem Server und der Anwendung verschlüsselt wird.
Abrufen eines SSL-Zertifikats
Laden Sie das Zertifikat, das für die SSL-Kommunikation mit Ihrem Azure Database for MariaDB-Server erforderlich ist, von https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem herunter, und speichern Sie die Zertifikatsdatei auf dem lokalen Laufwerk. (In diesem Tutorial wird als Beispiel „c:\ssl“ verwendet.) Für Microsoft Internet Explorer und Microsoft Edge: Benennen Sie nach dem Download das Zertifikat in „BaltimoreCyberTrustRoot.crt.pem“ um.
Zertifikate für Server in Sovereign Clouds finden Sie unter den folgenden Links: Azure Government, Microsoft Azure, betrieben von 21Vianet und Azure Deutschland.
Binden von SSL
Herstellen einer Verbindung mit dem Server mithilfe von MySQL Workbench über SSL
Konfigurieren Sie MySQL Workbench, um eine sichere Verbindung über SSL herzustellen.
Navigieren Sie im Dialogfeld „Setup New Connection“ (Neue Verbindung einrichten) zur Registerkarte SSL.
Aktualisieren Sie das Feld Use SSL (SSL verwenden) auf „Require“ (Anfordern).
Geben Sie in das Feld für die SSL-CA-Datei den Speicherort der Datei BaltimoreCyberTrustRoot.crt.pem ein.
Für vorhandene Verbindungen können Sie SSL binden, indem Sie mit der rechten Maustaste auf das Verbindungssymbol klicken und dann „Bearbeiten“ auswählen. Navigieren Sie dann zur Registerkarte SSL und binden die Zertifikatsdatei.
Herstellen einer Verbindung mit dem Server mithilfe der MySQL-CLI über SSL
Sie können das SSL-Zertifikat auch mithilfe der MySQL-Befehlszeilenschnittstelle und der folgenden Befehle binden:
mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem
Hinweis
Wenn Sie die MySQL-Befehlszeilenschnittstelle unter Windows verwenden, erhalten Sie möglicherweise eine Fehlermeldung: SSL connection error: Certificate signature check failed
. Ersetzen Sie in diesem Fall den Parameter --ssl-mode=REQUIRED --ssl-ca={filepath}
durch --ssl
.
Erzwingen von SSL-Verbindungen in Azure
Verwenden des Azure-Portals
Rufen Sie über das Azure-Portal Ihren Server mit Azure Database für MariaDB auf, und wählen Sie Verbindungssicherheit. Verwenden Sie die Umschaltfläche, um die Einstellung SSL-Verbindung erzwingen zu aktivieren/deaktivieren, und wählen Sie dann Speichern. Microsoft empfiehlt, die Einstellung SSL-Verbindung erzwingen immer zu aktivieren, um die Sicherheit zu erhöhen.
Verwenden der Azure-Befehlszeilenschnittstelle
Sie können den ssl-enforcement-Parameter in der Azure-Befehlszeilenschnittstelle mit den entsprechenden Werten aktivieren oder deaktivieren.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
Überprüfen der SSL-Verbindung
Führen Sie den MySQL-Befehl status aus, um sicherzustellen, dass die Verbindung mit dem MariaDB-Server über SSL hergestellt wurde:
status
Vergewissern Sie sich, dass die Verbindung verschlüsselt ist, indem Sie die Ausgabe überprüfen. Diese sollte wie folgt angezeigt werden: SSL: verwendete Verschlüsselung AES256-SHA.
Beispielcode
Um in Ihrer Anwendung über SSL eine sichere Verbindung mit Azure Database for MariaDB einzurichten, können Sie die folgenden Codebeispiele verwenden:
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();
}
Nächste Schritte
Weitere Informationen zu Ablauf und Rotation von Zertifikaten finden Sie in der Dokumentation zur Zertifikatrotation.