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.
V dialogovém okně Nastavit nový Připojení ion přejděte na kartu SSL.
Aktualizujte pole Použít SSL na Vyžadovat.
Do pole Soubor CERTIFIKAČNÍ autority SSL zadejte umístění souboru BaltimoreCyberTrustRoot.crt.pem.
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í.
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ů.