Konfigurera SSL-anslutning i ditt program för att ansluta säkert till 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 och spara certifikatfilen på den lokala enheten (i den här självstudien används till exempel https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem c:\ssl). För Microsoft Internet Explorer och Microsoft Edge: När nedladdningen är klar 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, Azure Kinaoch Azure Tyskland.

Binda SSL

Ansluta till servern med MySQL Workbench via SSL

Konfigurera MySQL Workbench så att det ansluter säkert via SSL.

  1. I dialogdialogen Konfigurera ny anslutning går du till fliken SSL.

  2. Uppdatera fältet Använd SSL till "Kräv".

  3. I fältet SSL CA-fil: anger du filplatsen för BaltimoreCyberTrustRoot.crt.pem.

    Spara SSL-konfiguration

För befintliga anslutningar kan du binda SSL genom att högerklicka på anslutningsikonen och välja Redigera. Gå sedan till fliken SSL och bind certifikatfilen.

Ansluta 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

Anteckning

När du använder MySQL-kommandoradsgränssnittet i Windows kan du få felet SSL connection error: Certificate signature check failed . Om detta inträffar ersätter du --ssl-mode=REQUIRED --ssl-ca={filepath} parametrarna med --ssl .

Framtvinga SSL-anslutningar i Azure

Använda Azure Portal

Med hjälp Azure Portal går du till Azure Database for MariaDB server och klickar sedan på Anslutningssäkerhet. Använd växlingsknappen för att aktivera eller inaktivera inställningen Framtvinga SSL-anslutning och klicka sedan på Spara. Microsoft rekommenderar att du alltid aktiverar inställningen Framtvinga SSL-anslutning för ökad säkerhet. enable-ssl för MariaDB-server

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 mysql-statuskommandot för att kontrollera att du har anslutit till MariaDB-servern med 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 Azure Database for MariaDB anslutning via SSL från ditt program kan du se 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 (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();
}

Nästa steg

Mer information om förfallodatum för certifikat och rotation finns i dokumentationen om certifikatrotation