Configure SSL connectivity in your application to securely connect to Azure Database for MariaDB (SSL-connectiviteit in uw toepassing configureren om veilig verbinding te maken met Azure Database for MariaDB)
Belangrijk
Azure Database for MariaDB bevindt zich op het buitengebruikstellingspad. We raden u ten zeerste aan om te migreren naar Azure Database for MySQL. Zie Wat gebeurt er met Azure Database for MariaDB voor meer informatie over migreren naar Azure Database for MySQL.
Azure Database for MariaDB ondersteunt het verbinden van uw Azure Database for MariaDB-server met clienttoepassingen met behulp van SSL (Secure Sockets Layer). 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 https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem en sla het certificaatbestand op uw lokale station op (in deze zelfstudie wordt 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, Microsoft Azure beheerd door 21Vianet en Azure Duitsland.
Bind SSL
Verbinding maken met de server met mySQL Workbench via SSL
Configureer MySQL Workbench om veilig verbinding te maken via SSL.
Navigeer vanuit 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 de 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 SSL-tabblad 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, wordt er mogelijk een fout weergegeven SSL connection error: Certificate signature check failed
. Als dit gebeurt, vervangt u de --ssl-mode=REQUIRED --ssl-ca={filepath}
parameters door --ssl
.
SSL-verbindingen afdwingen in Azure
Met gebruik van Azure Portal
Ga in Azure Portal naar uw Azure Database for MariaDB-server en selecteer vervolgens Verbindingsbeveiliging. Gebruik de wisselknop om de instelling SSL-verbinding afdwingen in of uit te schakelen en selecteer Opslaan. Microsoft raadt aan altijd de instelling SSL-verbinding afdwingen in te schakelen voor verbeterde beveiliging.
Azure CLI gebruiken
U kunt de parameter ssl-afdwinging in- of uitschakelen met respectievelijk ingeschakelde of uitgeschakelde waarden in Azure CLI.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
De SSL-verbinding controleren
Voer de mysql-statusopdracht uit om te controleren of u verbinding hebt gemaakt met uw MariaDB-server met behulp van SSL:
status
Controleer of de verbinding is versleuteld door de uitvoer te controleren. Dit moet worden weergegeven: SSL: Codering in gebruik is AES256-SHA
Voorbeeldcode
Raadpleeg de volgende codevoorbeelden om een beveiligde verbinding tot stand te brengen met Azure Database for MariaDB via SSL vanuit uw toepassing:
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();
}