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.

  1. Ga in het dialoogvenster Nieuwe verbinding 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 BaltimoreCyberTrustRoot.crt.pem in.

    SSL-configuratie opslaan

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. enable-ssl voor MariaDB-server

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