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 naar server met behulp van MySQL Workbench via SSL

Configureer MySQL Workbench om veilig verbinding te maken via SSL.

  1. Navigeer vanuit het dialoogvenster Nieuwe Verbinding maken ion instellen naar het tabblad SSL.

  2. Werk het veld SSL gebruiken bij naar Vereisen.

  3. Voer in het veld SSL CA-bestand: de bestandslocatie van de BaltimoreCyberTrustRoot.crt.pem in.

    Save SSL configuration

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 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 behulp van Azure Portal

Ga in Azure Portal naar uw Azure Database for MariaDB-server en selecteer vervolgens Verbinding maken ionbeveiliging. 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. enable-ssl for MariaDB server

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 (MySQL Verbinding maken or 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 (MySql Verbinding maken or)

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 voor certificaatrotatie voor meer informatie over het verlopen en rouleren van certificaten