Konfigurace připojení SSL v aplikaci pro zabezpečené připojení ke službě Azure Database for MariaDB

Důležité

Azure Database for MariaDB je na cestě vyřazení. Důrazně doporučujeme migrovat do služby Azure Database for MySQL. Další informace o migraci na Azure Database for MySQL najdete v tématu Co se děje se službou Azure Database for MariaDB?.

Azure Database for MariaDB podporuje připojení serveru Azure Database for MariaDB k klientským aplikacím pomocí protokolu SSL (Secure Sockets Layer). Díky vynucování připojení SSL mezi databázovým serverem a klientskými aplikacemi se šifruje datový proud mezi serverem a vaší aplikací, což pomáhá chránit před napadením útočníky, kteří se vydávají za prostředníky.

Získání certifikátu SSL

Stáhněte si certifikát potřebný ke komunikaci přes PROTOKOL SSL se serverem Azure Database for MariaDB a https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem uložte soubor certifikátu na místní disk (v tomto kurzu se používá například c:\ssl). Microsoft Internet Explorer a Microsoft Edge: Po dokončení stahování přejmenujte certifikát na BaltimoreCyberTrustRoot.crt.pem.

Projděte si následující odkazy na certifikáty pro servery v suverénních cloudech: Azure Government, Microsoft Azure provozované společností 21Vianet a Azure Germany.

Vytvoření vazby SSL

Připojení pro server pomocí aplikace MySQL Workbench přes SSL

Nakonfigurujte aplikaci MySQL Workbench tak, aby se bezpečně připojila přes PROTOKOL SSL.

  1. V dialogovém okně Nastavit nový Připojení ion přejděte na kartu SSL.

  2. Aktualizujte pole Použít SSL na Vyžadovat.

  3. Do pole Soubor CERTIFIKAČNÍ autority SSL zadejte umístění souboru BaltimoreCyberTrustRoot.crt.pem.

    Save SSL configuration

U existujících připojení můžete vytvořit vazbu SSL tak, že kliknete pravým tlačítkem myši na ikonu připojení a zvolíte upravit. Pak přejděte na kartu SSL a vytvořte vazbu souboru certifikátu.

Připojení na server pomocí rozhraní příkazového řádku MySQL přes SSL

Dalším způsobem vytvoření vazby certifikátu SSL je použití rozhraní příkazového řádku MySQL spuštěním následujících příkazů.

mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem

Poznámka:

Při použití rozhraní příkazového řádku MySQL ve Windows se může zobrazit chyba SSL connection error: Certificate signature check failed. Pokud k tomu dojde, nahraďte --ssl-mode=REQUIRED --ssl-ca={filepath} parametry parametrem --ssl.

Vynucení připojení SSL v Azure

Pomocí webu Azure Portal

Na webu Azure Portal přejděte na server Azure Database for MariaDB a vyberte Připojení zabezpečení. Pomocí přepínače povolte nebo zakažte nastavení Vynutit připojení SSL a pak vyberte Uložit. Microsoft doporučuje vždy povolit nastavení vynucení připojení SSL pro lepší zabezpečení. enable-ssl for MariaDB server

Použití Azure CLI

Parametr vynucení ssl můžete povolit nebo zakázat pomocí hodnot Povoleno nebo Zakázáno v Azure CLI.

az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled

Ověření připojení SSL

Spuštěním příkazu mysql status ověřte, že jste se připojili k serveru MariaDB pomocí protokolu SSL:

status

Zkontrolujte výstup, který by se měl zobrazit: Šifra: Šifra, která se používá, je AES256-SHA a ověřte, že připojení je šifrované.

Ukázkový kód

Pokud chcete vytvořit zabezpečené připojení ke službě Azure Database for MariaDB přes PROTOKOL SSL z vaší aplikace, projděte si následující ukázky kódu:

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 Připojení 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 Připojení 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();
}

Další kroky

Další informace o vypršení platnosti a obměně certifikátů najdete v dokumentaci k obměně certifikátů.