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


Csatlakozás rugalmas Azure Database for MySQL-kiszolgálóhoz titkosított kapcsolatokkal

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

A rugalmas Azure Database for MySQL-kiszolgáló támogatja az ügyfélalkalmazások rugalmas Azure Database for MySQL-kiszolgálópéldányhoz való csatlakoztatását a Secure Sockets Layer (SSL) és a Transport Layer Security (TLS) titkosításával. A TLS egy iparági szabvány szerinti protokoll, amely biztosítja az adatbázis-kiszolgáló és az ügyfélalkalmazások közötti titkosított hálózati kapcsolatokat, így Ön megfelelhet a megfelelőségi követelményeknek.

A rugalmas Azure Database for MySQL-kiszolgáló alapértelmezés szerint a Transport Layer Security (TLS 1.2) használatával támogatja a titkosított kapcsolatokat, és alapértelmezés szerint minden TLS 1.0- és TLS 1.1-es bejövő kapcsolatot elutasít. A rugalmas kiszolgáló titkosított kapcsolat-kényszerítési vagy TLS-verziókonfigurációja a jelen cikkben ismertetett módon módosítható.

A rugalmas Azure Database for MySQL-kiszolgálópéldányhoz az alábbi ssl- és TLS-beállításokat használhatja:

Fontos

A TLS 1.0 és a TLS 1.1 protokoll támogatásának 2024. szeptember elejétől kezdődő eltávolítása szerint az új kiszolgálók már nem használhatják a TLS 1.0-s vagy 1.1-es verzióját, és a meglévő kiszolgálók nem léphetnek vissza ezekre a verziókra. 2024. szeptember közepétől kezdeményezzük az összes jelenleg TLS 1.0-t vagy 1.1-et használó kiszolgáló kötelező frissítését a TLS 1.2-re. A frissítési folyamat várhatóan 2024 szeptemberének végéig fejeződik be. Határozottan javasoljuk, hogy az ügyfelek szeptember vége előtt győződjenek meg arról, hogy alkalmazásaik teljes mértékben kompatibilisek a TLS 1.2-vel.

Eset Kiszolgálóparaméter-beállítások Leírás
SSL-kényszerítés letiltása require_secure_transport = KI Ha az örökölt alkalmazás nem támogatja a rugalmas Azure Database for MySQL-kiszolgáló titkosított kapcsolatait, letilthatja a rugalmas Azure Database for MySQL-kiszolgálópéldány titkosított kapcsolatainak érvényesítését a require_secure_transport=OFF beállítással.
SSL kényszerítése a TLS 1.2-es verziójával < (2024 szeptemberében megszűnik) require_secure_transport = BE és tls_version = TLS 1.0 vagy TLS 1.1 Ha az örökölt alkalmazás támogatja a titkosított kapcsolatokat, de a TLS 1.2-es verzióját < igényli, engedélyezheti a titkosított kapcsolatokat, de konfigurálhatja a rugalmas Azure Database for MySQL-kiszolgálópéldányt, hogy engedélyezze az alkalmazás által támogatott TLS-verzióval (1.0 vagy 1.1) való kapcsolatokat. Csak az Azure Database for MySQL rugalmas 5.7-es verziójával támogatott
SSL kényszerítése TLS-verzióval = 1.2 (Alapértelmezett konfiguráció) require_secure_transport = BE és tls_version = TLS 1.2 Ez a rugalmas Azure Database for MySQL-kiszolgáló ajánlott és alapértelmezett konfigurációja.
SSL kényszerítése TLS-verzióval = 1.3 require_secure_transport = BE és tls_version = TLS 1.3 Ez hasznos és ajánlott az új alkalmazások fejlesztéséhez. Csak a rugalmas Azure Database for MySQL-kiszolgáló 8.0-s verziójával támogatott

Feljegyzés

A rugalmas Azure Database for MySQL-kiszolgálón nem támogatott az SSL-titkosítás módosítása. A FIPS-titkosítási csomagok alapértelmezés szerint akkor lesznek kényszerítve, ha tls_version TLS 1.2-es verzióra van állítva. Az 1.2-es verziótól eltérő TLS-verziók esetén az SSL-titkosítás a MySQL-közösség telepítésével járó alapértelmezett beállításokra van beállítva.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • Rugalmas Azure Database for MySQL-kiszolgálópéldány konfigurálása
    • Le van tiltva az SSL
    • Ssl kényszerítése TLS-verzióval
  • Csatlakozás rugalmas Azure Database for MySQL-kiszolgálópéldányhoz a mysql parancssor használatával
    • Letiltott titkosított kapcsolatok esetén
    • A titkosított kapcsolatok engedélyezve
  • A kapcsolat titkosítási állapotának ellenőrzése
  • Csatlakozás rugalmas Azure Database for MySQL-kiszolgálópéldányhoz titkosított kapcsolatokkal különböző alkalmazás-keretrendszerek használatával

SSL-kényszerítés letiltása a rugalmas Azure Database for MySQL-kiszolgálópéldányon

Ha az ügyfélalkalmazás nem támogatja a titkosított kapcsolatokat, le kell tiltania a titkosított kapcsolatok kikényszerítését a rugalmas Azure Database for MySQL-kiszolgálópéldányon. A titkosított kapcsolatok kikényszerítésének letiltásához be kell állítania require_secure_transport kiszolgálóparamétert KI értékre a képernyőképen látható módon, és mentenie kell a kiszolgáló paraméterkonfigurációját ahhoz, hogy érvénybe lépjen. require_secure_transport egy dinamikus kiszolgálóparaméter , amely azonnal érvénybe lép, és nem igényli a kiszolgáló újraindítását.

Képernyőkép arról, hogyan tilthatja le az SSL-t rugalmas Azure Database for MySQL-kiszolgálóval.

Csatlakozás mysql parancssori ügyféllel letiltott SSL használatával

Az alábbi példa bemutatja, hogyan csatlakozhat a kiszolgálóhoz a mysql parancssori felülettel. A kapcsolati sztring beállítással tiltsa le a --ssl-mode=DISABLED TLS/SSL-kapcsolatot a mysql-ügyfélről. Cserélje le az értékeket a kiszolgáló tényleges nevére és jelszavára.

 mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED

Fontos

A require_secure_transport kikapcsolása nem jelenti azt, hogy a titkosított kapcsolatok nem támogatottak a kiszolgáló oldalán. Ha a rugalmas Azure Database for MySQL-kiszolgálón beállította a require_secure_transport KI értékre, de ha az ügyfél csatlakozik a titkosított kapcsolathoz, az továbbra is elfogadásra kerül. Az alábbi, mysql-ügyfelet használó kapcsolat egy rugalmas Azure Database for MySQL-kiszolgálópéldányhoz require_secure_transport=KI beállítással is működik az alábbiak szerint.

 mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=REQUIRED
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.29-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show global variables like '%require_secure_transport%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
+--------------------------+-------+
1 row in set (0.02 sec)

Összefoglalva, a require_secure_transport=OFF beállítás ellazítja a titkosított kapcsolatok kikényszerítését a rugalmas Azure Database for MySQL-kiszolgálón, és a titkosított kapcsolatok mellett engedélyezi a kiszolgálóval való titkosítatlan kapcsolatokat az ügyfélről.

SSL kényszerítése TLS-verzióval

A rugalmas Azure Database for MySQL-kiszolgálópéldány TLS-verzióinak beállításához *tls_version- kiszolgálóparamétert kell beállítania. A TLS protokoll alapértelmezett beállítása a TLS 1.2. Ha az alkalmazás SSL-kapcsolattal támogatja a MySQL-kiszolgálóval való kapcsolatokat, de a TLS 1.2 protokolltól eltérő protokollt igényel, a kiszolgálóparaméterben be kell állítania a TLS-verziókat. *tls_version- egy statikus kiszolgálóparaméter , amely a paraméter érvénybe lépéséhez a kiszolgáló újraindítását igényli. Az alábbiakban a rugalmas Azure Database for MySQL-kiszolgáló elérhető verzióihoz tartozó támogatott protokollokat követjük.

Rugalmas Azure Database for MySQL-kiszolgálóverzió A tls_version támogatott értékei Alapértelmezett beállítás
MySQL 5.7 TLS 1.0, TLS 1.1 (2024 szeptemberében megszűnik) TLS 1.2 TLS 1.2
MySQL 8.0 TLS 1.2, TLS 1.3 TLS 1.2

Csatlakozás mysql parancssori ügyféllel TLS/SSL használatával

A nyilvános SSL-tanúsítvány letöltése

A titkosított kapcsolatok ügyfélalkalmazásokkal való használatához le kell töltenie a nyilvános SSL-tanúsítványt, amely az Azure Portal Hálózatkezelés paneljén is elérhető az alábbi képernyőképen látható módon.

Képernyőkép arról, hogyan tölthet le nyilvános SSL-tanúsítványt az Azure Portalról.

Feljegyzés

Ezt az SSL-tanúsítványt le kell töltenie a kiszolgálókhoz az Azure Government-felhőben.

Mentse a tanúsítványfájlt a kívánt helyre. Ez az oktatóanyag például a helyi környezetet vagy \var\www\html\bin az alkalmazást futtató ügyfélkörnyezetet használja vagy használjac:\ssl. Ez lehetővé teszi, hogy az alkalmazások biztonságosan csatlakozzanak az adatbázishoz SSL-en keresztül.

Ha rugalmas Azure Database for MySQL-kiszolgálópéldányt hozott létre privát hozzáféréssel (VNet-integráció), a kiszolgálóval azonos virtuális hálózaton belüli erőforrásból kell csatlakoznia a kiszolgálóhoz. Létrehozhat egy virtuális gépet, és hozzáadhatja a rugalmas Azure Database for MySQL-kiszolgálópéldányával létrehozott virtuális hálózathoz.

Ha rugalmas Azure Database for MySQL-kiszolgálópéldányt hozott létre nyilvános hozzáféréssel (engedélyezett IP-címekkel), hozzáadhatja a helyi IP-címet a kiszolgáló tűzfalszabályainak listájához.

Választhatja a mysql.exe vagy a MySQL Workbench-t>, hogy a helyi környezetből csatlakozzon a kiszolgálóhoz.

Az alábbi példa bemutatja, hogyan csatlakozhat a kiszolgálóhoz a mysql parancssori felülettel. A TLS/SSL-tanúsítvány ellenőrzésének kényszerítéséhez használja a --ssl-mode=REQUIRED kapcsolati sztring beállítást. Adja át a helyi tanúsítványfájl elérési útját a --ssl-ca paraméternek. Cserélje le az értékeket a kiszolgáló tényleges nevére és jelszavára.

sudo apt-get install mysql-client
wget --no-check-certificate https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootCA.crt.pem

Feljegyzés

Győződjön meg arról, hogy az --ssl-ca paraméternek átadott érték megegyezik a mentett tanúsítvány fájlútvonalával. Ha ssl használatával csatlakozik a rugalmas Azure Database for MySQL-hez, és a tanúsítvány tulajdonosának nevével teljes ellenőrzést (sslmode=VERTIFY_IDENTITY) használ, használja <a servername.mysql.database.azure.com> a kapcsolati sztring.

Ha titkosítatlan kapcsolatokkal próbál csatlakozni a kiszolgálóhoz, hibaüzenet jelenik meg, amely szerint a nem biztonságos átvitelt használó kapcsolatok az alábbihoz hasonlóan tiltottak:

ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.

A TLS/SSL-kapcsolat ellenőrzése

Futtassa a mysql állapotparancsot annak ellenőrzéséhez, hogy TLS/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álatban lévő titkosítás. Ez a titkosítási csomag egy példát mutat be, és az ügyfél alapján egy másik titkosítási csomagot láthat.

Hogyan azonosíthatók a kiszolgálón konfigurált TLS-protokollok?

Futtathatja a SHOW GLOBAL VARIABLES LIKE "tls_version" parancsot; és ellenőrizze az értéket, hogy megismerje az összes protokoll konfigurálását.

mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';

Hogyan állapítható meg, hogy az ügyfelek melyik TLS protokollt használják a kiszolgálóhoz való csatlakozáshoz?

Futtassa az alábbi parancsot, és tekintse meg a munkamenet tls_version annak megállapításához, hogy melyik TLS-verziót használja a csatlakozáshoz.

SELECT sbt.variable_value AS tls_version,  t2.variable_value AS cipher,
processlist_user AS user, processlist_host AS host
FROM performance_schema.status_by_thread  AS sbt
JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;

Csatlakozás rugalmas Azure Database for MySQL-kiszolgálópéldányhoz titkosított kapcsolatokkal különböző alkalmazás-keretrendszerek használatával

Az Azure Portalon a kiszolgáló számára elérhető "Kapcsolati sztringek" lapon előre definiált kapcsolati sztringek tartalmazzák az adatbázis-kiszolgálóhoz TLS/SSL használatával való csatlakozáshoz szükséges paramétereket. A TLS/SSL paraméter az összekötőtől függően változik. Például: "useSSL=true", "sslmode=required", vagy "ssl_verify_cert=true" és egyéb változatok.

Ha egy rugalmas Azure Database for MySQL-kiszolgálópéldányhoz szeretne titkosított kapcsolatot létesíteni TLS/SSL protokollon keresztül az alkalmazásból, tekintse meg az alábbi kódmintákat:

WordPress

Töltse le az SSL nyilvános tanúsítványt , és adja hozzá a következő sorokat wp-config.php a sor // **MySQL settings - You can get this info from your web host** //után.

//** Connect with SSL ** //
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
//** SSL CERT **//
define('MYSQL_SSL_CERT','/FULLPATH/on-client/to/DigiCertGlobalRootCA.crt.pem');

PHP

$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootCA.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin', '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/DigiCertGlobalRootCA.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'myadmin', 'yourpassword', $options);

Python (MySQLConnector Python)

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

Python (PyMySQL)

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

Django (PyMySQL)

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

Ruby

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

Golang

rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootCA.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' , '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');
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');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);

.NET (MySqlConnector)

var builder = new MySqlConnectionStringBuilder
{
    Server = "mydemoserver.mysql.database.azure.com",
    UserID = "myadmin",
    Password = "yourpassword",
    Database = "quickstartdb",
    SslMode = MySqlSslMode.VerifyCA,
    SslCa = "DigiCertGlobalRootCA.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/DigiCertGlobalRootCA.crt.pem", "utf8")];
var conn=mysql.createConnection({
    host:"mydemoserver.mysql.database.azure.com",
    user:"myadmin",
    password:"yourpassword",
    database:"quickstartdb",
    port:3306,
    ssl: {
        rejectUnauthorized: true,
        ca: serverCa
    }
});
conn.connect(function(err) {
  if (err) throw err;
});

Következő lépések