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.
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.
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
- Adatok csatlakoztatása és lekérdezése rugalmas Azure Database for MySQL-kiszolgálón a MySQL Workbench használatával
- Adatok csatlakoztatása és lekérdezése a PHP használatával rugalmas Azure Database for MySQL-kiszolgálón
- Rugalmas Azure Database for MySQL-kiszolgálói virtuális hálózat létrehozása és kezelése az Azure CLI használatával.
- További információ a rugalmas Azure Database for MySQL-kiszolgáló hálózatkezeléséről
- További információ az Azure Database for MySQL rugalmas kiszolgálói tűzfalszabályairól