Megosztás a következőn keresztül:


SSL-összekapcsolhatóság konfigurálása az alkalmazásban az Azure Database for MySQL-hez való biztonságos kapcsolódás érdekében.

A következőkre vonatkozik: Azure Database for MySQL – Önálló kiszolgáló

Fontos

Az önálló Azure Database for MySQL-kiszolgáló a kivonási útvonalon van. Határozottan javasoljuk, hogy frissítsen rugalmas Azure Database for MySQL-kiszolgálóra. További információ a rugalmas Azure Database for MySQL-kiszolgálóra való migrálásról: Mi történik az önálló Azure Database for MySQL-kiszolgálóval?

Az Azure Database for MySQL támogatja az Azure Database for MySQL-kiszolgáló csatlakoztatását az ügyfélalkalmazásokhoz a Secure Sockets Layer (SSL) használatával. Az adatbázis-kiszolgáló és az ügyfélalkalmazások közötti SSL-kapcsolatok kikényszerítése elősegíti a „köztes” támadások elleni védelmet, mert titkosítja a kiszolgáló és az alkalmazás közötti streameket.

1. lépés: SSL-tanúsítvány beszerzése

Töltse le az SSL-en keresztüli kommunikációhoz szükséges tanúsítványt az Azure Database for MySQL-kiszolgálóval https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem , és mentse a tanúsítványfájlt a helyi meghajtóra (ez az oktatóanyag például a c:\ssl protokollt használja). Microsoft Internet Explorer és Microsoft Edge esetén: A letöltés befejezése után nevezze át a tanúsítványt BaltimoreCyberTrustRoot.crt.pem névre.

A szuverén felhők kiszolgálóihoz tartozó tanúsítványokra vonatkozó alábbi hivatkozások találhatók: Azure Government, a 21Vianet által üzemeltetett Microsoft Azure és az Azure Germany.

2. lépés: SSL kötése

Konkrét programozási nyelvi kapcsolati sztring az alábbi mintakódban talál.

Csatlakozás kiszolgálóhoz a MySQL Workbench használatával SSL-en keresztül

Konfigurálja a MySQL Workbench-et, hogy biztonságosan csatlakozzon SSL-en keresztül.

  1. Az Új kapcsolat beállítása párbeszédpanelen lépjen az SSL lapra.

  2. Frissítse az SSL használata mezőt a "Kötelező" értékre.

  3. Az SSL CA-fájl: mezőbe írja be a DigiCertGlobalRootG2.crt.pem fájlhelyét.

Meglévő kapcsolatok esetén az SSL kötéséhez kattintson a jobb gombbal a kapcsolat ikonra, és válassza a szerkesztés lehetőséget. Ezután lépjen az SSL lapra, és kösse össze a tanúsítványfájlt.

Csatlakozás kiszolgálóhoz a MySQL CLI használatával SSL-en keresztül

Az SSL-tanúsítvány kötésének másik módja a MySQL parancssori felületének használata az alábbi parancsok végrehajtásával.

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

Feljegyzés

A MySQL parancssori felület Windows rendszeren való használatakor hibaüzenet SSL connection error: Certificate signature check failedjelenhet meg. Ha ez történik, cserélje le a paramétereket a --ssl-mode=REQUIRED --ssl-ca={filepath} következőre --ssl: .

3. lépés: SSL-kapcsolatok kényszerítése az Azure-ban

Az Azure Portal használatával

Az Azure Portal használatával keresse fel az Azure Database for MySQL-kiszolgálót, majd kattintson a Kapcsolatbiztonság elemre. A váltógombbal engedélyezze vagy tiltsa le az SSL-kapcsolat kényszerítése beállítást, majd kattintson a Mentés gombra. A Microsoft azt javasolja, hogy a fokozott biztonság érdekében mindig engedélyezze az SSL-kapcsolat kényszerítése beállítást.

Az Azure parancssori felület használata

Az SSL-kényszerítési paraméter engedélyezéséhez vagy letiltásához használja az Engedélyezett vagy a Letiltott értékeket az Azure CLI-ben.

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

4. lépés: Az SSL-kapcsolat ellenőrzése

Futtassa a mysql állapotparancsot annak ellenőrzéséhez, hogy SSL használatával csatlakozott-e a MySQL-kiszolgálóhoz:

mysql> status

Ellenőrizze, hogy a kapcsolat titkosítva van-e a kimenet áttekintésével, amelynek a következőnek kell megjelennie: SSL: A használt titkosítás az AES256-SHA

Mintakód

Ha biztonságos kapcsolatot szeretne létesíteni az Azure Database for MySQL-hez SSL-en keresztül az alkalmazásból, tekintse meg az alábbi kódmintákat:

Tekintse meg az Azure Database for MySQL szolgáltatás által támogatott kompatibilis illesztőprogramok listáját.

PHP

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}

PHP (PDO használata)

$options = array(
    PDO::MYSQL_ATTR_SSL_CA => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'username@mydemoserver', 'yourpassword', $options);

Python (MySQLConnector Python)

try:
    conn = mysql.connector.connect(user='myadmin@mydemoserver',
                                   password='yourpassword',
                                   database='quickstartdb',
                                   host='mydemoserver.mysql.database.azure.com',
                                   ssl_ca='/var/www/html/DigiCertGlobalRootG2.crt.pem')
except mysql.connector.Error as err:
    print(err)

Python (PyMySQL)

conn = pymysql.connect(user='myadmin@mydemoserver',
                       password='yourpassword',
                       database='quickstartdb',
                       host='mydemoserver.mysql.database.azure.com',
                       ssl={'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'})

Django (PyMySQL)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'quickstartdb',
        'USER': 'myadmin@mydemoserver',
        'PASSWORD': 'yourpassword',
        'HOST': 'mydemoserver.mysql.database.azure.com',
        'PORT': '3306',
        'OPTIONS': {
            'ssl': {'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'}
        }
    }
}

Ruby

client = Mysql2::Client.new(
        :host     => 'mydemoserver.mysql.database.azure.com',
        :username => 'myadmin@mydemoserver',
        :password => 'yourpassword',
        :database => 'quickstartdb',
        :sslca => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
    )

Golang

rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootG2.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.mysql.database.azure.com", 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)

Java (Java MySQL-összekötő)

# 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.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

Java (MariaDB Connector for Java)

# 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.mysql.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,
    SslCa = "DigiCertGlobalRootG2.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
    connection.Open();
}

Node.js

var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("/var/www/html/DigiCertGlobalRootG2.crt.pem", "utf8")];
var conn=mysql.createConnection({
    host:"mydemoserver.mysql.database.azure.com",
    user:"myadmin@mydemoserver",
    password:"yourpassword",
    database:"quickstartdb",
    port:3306,
    ssl: {
        rejectUnauthorized: true,
        ca: serverCa
    }
});
conn.connect(function(err) {
  if (err) throw err;
});

Következő lépések