Konfigurera SSL-anslutning i ditt program för att säkert ansluta till Azure Database for MariaDB
Viktigt!
Azure Database for MariaDB är på väg att dras tillbaka. Vi rekommenderar starkt att du migrerar till Azure Database for MySQL. Mer information om hur du migrerar till Azure Database for MySQL finns i Vad händer med Azure Database for MariaDB?.
Azure Database for MariaDB stöder anslutning av Din Azure Database for MariaDB-server till klientprogram med hjälp av Secure Sockets Layer (SSL). Framtvingande av SSL-anslutningar mellan databasservern och klientprogrammen hjälper till att skydda mot ”man in the middle”-attacker genom att kryptera dataströmmen mellan servern och programmet.
Hämta SSL-certifikat
Ladda ned certifikatet som behövs för att kommunicera via SSL med din Azure Database for MariaDB-server från https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem och spara certifikatfilen på din lokala enhet (i den här självstudien används c:\ssl till exempel). För Microsoft Internet Explorer och Microsoft Edge: När nedladdningen har slutförts byter du namn på certifikatet till BaltimoreCyberTrustRoot.crt.pem.
Se följande länkar för certifikat för servrar i nationella moln: Azure Government, Microsoft Azure som drivs av 21Vianet och Azure Tyskland.
Binda SSL
Anslut till servern med MySQL Workbench via SSL
Konfigurera MySQL Workbench att ansluta säkert via SSL.
Gå till fliken SSL från dialogrutan Konfigurera ny Anslut ion.
Uppdatera fältet Använd SSL till "Kräv".
I fältet SSL CA File: anger du filplatsen för BaltimoreCyberTrustRoot.crt.pem.
För befintliga anslutningar kan du binda SSL genom att högerklicka på anslutningsikonen och välja redigera. Gå sedan till fliken SSL och binda certifikatfilen.
Anslut till servern med MySQL CLI via SSL
Ett annat sätt att binda SSL-certifikatet är att använda mySQL-kommandoradsgränssnittet genom att köra följande kommandon.
mysql.exe -h mydemoserver.mariadb.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\BaltimoreCyberTrustRoot.crt.pem
Kommentar
När du använder kommandoradsgränssnittet MySQL i Windows kan du få ett fel SSL connection error: Certificate signature check failed
. Om detta inträffar ersätter du parametrarna --ssl-mode=REQUIRED --ssl-ca={filepath}
med --ssl
.
Framtvinga SSL-anslutningar i Azure
Med hjälp av Azure-portalen
Gå till Azure Database for MariaDB-servern med hjälp av Azure-portalen och välj sedan Anslut ionssäkerhet. Använd växlingsknappen för att aktivera eller inaktivera inställningen Framtvinga SSL-anslutning och välj sedan Spara. Microsoft rekommenderar att du alltid aktiverar inställningen Framtvinga SSL-anslutning för förbättrad säkerhet.
Använda Azure CLI
Du kan aktivera eller inaktivera parametern ssl-enforcement med hjälp av aktiverade respektive inaktiverade värden i Azure CLI.
az mariadb server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
Verifiera SSL-anslutningen
Kör kommandot mysql-status för att kontrollera att du har anslutit till MariaDB-servern med hjälp av SSL:
status
Bekräfta att anslutningen är krypterad genom att granska utdata, vilket bör visa: SSL: Chiffer som används är AES256-SHA
Exempelkod
Om du vill upprätta en säker anslutning till Azure Database for MariaDB via SSL från ditt program läser du följande kodexempel:
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 Anslut 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 Anslut 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();
}
Nästa steg
Mer information om certifikatets förfallodatum och rotation finns i dokumentationen om certifikatrotation