Configureer SSL-connectiviteit in uw toepassing om veilig verbinding te maken met Azure Database for MariaDB
Azure Database for MariaDB ondersteunt het verbinden van uw Azure Database for MariaDB-server met clienttoepassingen met behulp van Secure Sockets Layer (SSL). Het afdwingen van SSL-verbindingen tussen uw databaseserver en clienttoepassingen zorgt dat u bent beschermt tegen 'man in the middle'-aanvallen omdat de gegevensstroom tussen de server en uw toepassing wordt versleuteld.
SSL-certificaat verkrijgen
Download het certificaat dat nodig is om via SSL te communiceren met uw Azure Database for MariaDB-server van en sla het certificaatbestand op uw lokale station op (in deze zelfstudie wordt https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem bijvoorbeeld c:\ssl gebruikt). Voor Microsoft Internet Explorer en Microsoft Edge: Nadat het downloaden is voltooid, wijzigt u de naam van het certificaat in BaltimoreCyberTrustRoot.crt.pem.
Zie de volgende koppelingen voor certificaten voor servers in onafhankelijke clouds: Azure Government, Azure Chinaen Azure Duitsland.
SSL binden
Verbinding maken met de server met behulp van MySQL Workbench via SSL
Configureer MySQL Workbench om veilig verbinding te maken via SSL.
Ga in het dialoogvenster Nieuwe verbinding instellen naar het tabblad SSL.
Werk het veld SSL gebruiken bij naar Vereisen.
Voer in het veld SSL CA-bestand: de bestandslocatie van BaltimoreCyberTrustRoot.crt.pem in.

Voor bestaande verbindingen kunt u SSL binden door met de rechtermuisknop op het verbindingspictogram te klikken en Bewerken te kiezen. Navigeer vervolgens naar het tabblad SSL en bind het certificaatbestand.
Verbinding maken met de server met behulp van de MySQL CLI via SSL
Een andere manier om het SSL-certificaat te binden, is door de MySQL-opdrachtregelinterface te gebruiken door de volgende opdrachten uit te voeren.
mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem
Notitie
Wanneer u de MySQL-opdrachtregelinterface in Windows gebruikt, ontvangt u mogelijk de fout SSL connection error: Certificate signature check failed . Als dit het geval is, vervangt u --ssl-mode=REQUIRED --ssl-ca={filepath} de parameters door --ssl .
SSL-verbindingen afdwingen in Azure
Azure Portal gebruiken
Ga met Azure Portal naar uw Azure Database for MariaDB server en klik vervolgens op Verbindingsbeveiliging. Gebruik de schakelknop om de instelling SSL-verbinding afdwingen in of uit te schakelen en klik vervolgens op Opslaan. Microsoft raadt aan altijd de instelling SSL-verbinding afdwingen in te stellen voor verbeterde beveiliging.

Azure CLI gebruiken
U kunt de parameter ssl-enforcement in- of uitschakelen met behulp van respectievelijk de waarden Ingeschakeld of Uitgeschakeld in Azure CLI.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
De SSL-verbinding controleren
Voer de opdracht mysql status uit om te controleren of u met behulp van SSL verbinding hebt gemaakt met uw MariaDB-server:
status
Controleer of de verbinding is versleuteld door de uitvoer te bekijken. Deze moet het volgende laten zien: SSL: Cipher in use is AES256-SHA
Voorbeeldcode
Raadpleeg de volgende codevoorbeelden om een beveiligde verbinding Azure Database for MariaDB via SSL vanuit uw toepassing tot stand te brengen:
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();
}
Volgende stappen
Raadpleeg de documentatie over certificaatrotatie voor meer informatie over het verlopen en rouleren van certificaten