Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY:
Azure Database for MySQL — serwer elastyczny
Usługa Azure Database for MySQL — elastyczny serwer obsługuje łączenie aplikacji klienckich z wystąpieniem serwera elastycznego usługi Azure Database for MySQL przy użyciu protokołu SSL (Secure Sockets Layer) z szyfrowaniem tls(Transport Layer). TLS to protokół standardu branżowego, który zapewnia szyfrowane połączenia sieciowe między serwerem bazy danych i aplikacjami klienckimi, co pozwala spełnić wymagania dotyczące zgodności.
Usługa Azure Database for MySQL — elastyczny serwer obsługuje połączenia szyfrowane przy użyciu protokołu Transport Layer Security (TLS 1.2) domyślnie, a wszystkie połączenia przychodzące z protokołami TLS 1.0 i TLS 1.1 są domyślnie odrzucane. Konfigurację wymuszania połączenia szyfrowanego lub konfiguracji wersji protokołu TLS na serwerze elastycznym można zmienić zgodnie z opisem w tym artykule.
Poniżej przedstawiono różne konfiguracje ustawień protokołu SSL i TLS, które można mieć dla wystąpienia serwera elastycznego usługi Azure Database for MySQL:
Ważne
Zgodnie z usunięciem obsługi protokołów TLS 1.0 i TLS 1.1 wcześniej planowaliśmy całkowite wycofanie protokołów TLS 1.0 i 1.1 do września 2024 r. Jednak ze względu na zależności zidentyfikowane przez niektórych klientów postanowiliśmy rozszerzyć oś czasu.
- Począwszy od 31 sierpnia 2025 r., rozpoczniemy wymuszone uaktualnienie dla wszystkich serwerów nadal używających protokołu TLS 1.0 lub 1.1. Po tej dacie wszystkie połączenia korzystające z protokołu TLS 1.0 lub 1.1 mogą przestać działać w dowolnym momencie. Aby uniknąć potencjalnych zakłóceń usług, zdecydowanie zalecamy, aby klienci ukończyli migrację do protokołu TLS 1.2 przed 31 sierpnia 2025 r.
- Począwszy od września 2024 r., nowe serwery nie będą już mogły korzystać z protokołu TLS 1.0 lub 1.1, a istniejące serwery nie będą mogły obniżyć wersji do tych wersji.
Zdecydowanie zalecamy, aby klienci aktualizowali swoje aplikacje tak szybko, aby jak najszybciej obsługiwali protokół TLS 1.2, aby uniknąć przerw w działaniu usługi.
| Scenariusz | Ustawienia parametrów serwera | opis |
|---|---|---|
| Wyłączanie wymuszania protokołu SSL | require_secure_transport = WYŁĄCZONE | Jeśli starsza aplikacja nie obsługuje szyfrowanych połączeń z serwerem elastycznym usługi Azure Database for MySQL, możesz wyłączyć wymuszanie zaszyfrowanych połączeń z wystąpieniem serwera elastycznego usługi Azure Database for MySQL, ustawiając wartość require_secure_transport=OFF. |
| Wymuszanie protokołu SSL przy użyciu protokołu TLS w wersji < 1.2 (zostanie wycofane we wrześniu 2024 r.) | require_secure_transport = ON and tls_version = TLS 1.0 lub TLS 1.1 | Jeśli starsza aplikacja obsługuje połączenia szyfrowane, ale wymaga protokołu TLS w wersji < 1.2, możesz włączyć połączenia szyfrowane, ale skonfiguruj wystąpienie serwera elastycznego usługi Azure Database for MySQL, aby zezwolić na połączenia z wersją protokołu TLS (1.0 lub 1.1) obsługiwaną przez aplikację. Obsługiwane tylko w przypadku usługi Azure Database for MySQL — serwer elastyczny w wersji 5.7 |
| Wymuszanie protokołu SSL przy użyciu protokołu TLS w wersji 1.2 (konfiguracja domyślna) | wymagaj_bezpiecznego_transportu = WŁĄCZONE i wersja_tls = TLS 1.2 | Jest to zalecana i domyślna konfiguracja serwera elastycznego usługi Azure Database for MySQL. |
| Wymuszanie protokołu SSL przy użyciu protokołu TLS w wersji = 1.3 | require_secure_transport = WŁĄCZONY i tls_version = TLS 1.3 | Jest to przydatne i zalecane w przypadku tworzenia nowych aplikacji. Obsługiwane tylko w przypadku usługi Azure Database for MySQL — serwer elastyczny w wersji 8.0 |
Uwaga
Zmiany szyfrowania SSL na serwerze elastycznym usługi Azure Database for MySQL nie są obsługiwane. Zestawy szyfrowania FIPS są domyślnie wymuszane, gdy tls_version jest ustawiona na protokół TLS w wersji 1.2. W przypadku wersji protokołu TLS innych niż wersja 1.2 szyfrowanie SSL jest ustawione na ustawienia domyślne, które są dostarczane z instalacją społeczności mySQL.
W tym artykule omówiono sposób wykonywania następujących zadań:
- Konfigurowanie wystąpienia serwera elastycznego usługi Azure Database for MySQL
- Z wyłączonym protokołem SSL
- W przypadku wymuszania protokołu SSL z wersją protokołu TLS
- Nawiązywanie połączenia z wystąpieniem serwera elastycznego usługi Azure Database for MySQL przy użyciu wiersza polecenia mysql
- Z wyłączonymi szyfrowanymi połączeniami
- Z włączonymi szyfrowanymi połączeniami
- Weryfikowanie stanu szyfrowania połączenia
- Nawiązywanie połączenia z wystąpieniem serwera elastycznego usługi Azure Database for MySQL z zaszyfrowanymi połączeniami przy użyciu różnych struktur aplikacji
Wyłączanie wymuszania protokołu SSL w wystąpieniu serwera elastycznego usługi Azure Database for MySQL
Jeśli aplikacja kliencka nie obsługuje szyfrowanych połączeń, należy wyłączyć wymuszanie szyfrowanych połączeń w wystąpieniu serwera elastycznego usługi Azure Database for MySQL. Aby wyłączyć wymuszanie zaszyfrowanych połączeń, należy ustawić parametr serwera require_secure_transport na wartość OFF, jak pokazano na zrzucie ekranu, i zapisać konfigurację parametrów serwera, aby zaczęły obowiązywać. require_secure_transport jest dynamicznym parametrem serwera, który natychmiast wchodzi w życie i nie wymaga ponownego uruchomienia serwera.
Nawiązywanie połączenia przy użyciu klienta wiersza polecenia mysql z wyłączonym protokołem SSL
W poniższym przykładzie pokazano, jak nawiązać połączenie z serwerem przy użyciu interfejsu wiersza polecenia mysql.
--ssl-mode=DISABLED Użyj ustawienia parametry połączenia, aby wyłączyć połączenie TLS/SSL z klienta mysql. Zastąp wartości rzeczywistą nazwą serwera i hasłem.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Ważne
Ustawienie require_secure_transport na WYŁĄCZONE nie oznacza, że szyfrowane połączenia nie są obsługiwane po stronie serwera. Jeśli ustawisz require_secure_transport na wartość OFF w wystąpieniu serwera elastycznego usługi Azure Database for MySQL, ale jeśli klient łączy się z zaszyfrowanym połączeniem, nadal jest akceptowany. Poniższe połączenie przy użyciu klienta mysql z wystąpieniem serwera elastycznego usługi Azure Database for MySQL skonfigurowanym za pomocą require_secure_transport=OFF działa również tak, jak pokazano poniżej.
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) |
Podsumowując, ustawienie require_secure_transport=OFF powoduje złagodzenie wymuszania zaszyfrowanych połączeń na serwerze elastycznym usługi Azure Database for MySQL i umożliwia niezaszyfrowane połączenia z serwerem z klienta oprócz zaszyfrowanych połączeń.
Wymuszanie protokołu SSL przy użyciu wersji protokołu TLS
Aby ustawić wersje protokołu TLS w wystąpieniu serwera elastycznego usługi Azure Database for MySQL, należy ustawić parametr *tls_version- server. Ustawieniem domyślnym protokołu TLS jest TLS 1.2. Jeśli aplikacja obsługuje połączenia z serwerem MySQL z protokołem SSL, ale wymaga protokołu innego niż TLS 1.2, należy ustawić wersje protokołu TLS w parametrze serwera. *tls_version - jest parametrem serwera statycznego, który wymaga ponownego uruchomienia serwera, aby parametr został zastosowany. Poniżej przedstawiono obsługiwane protokoły dla dostępnych wersji serwera elastycznego usługi Azure Database for MySQL.
| Wersja serwera elastycznego usługi Azure Database for MySQL | Obsługiwane wartości tls_version | Ustawienie domyślne |
|---|---|---|
| MySQL 5.7 | TLS 1.0, TLS 1.1 (zostanie wycofany we wrześniu 2024 r.) TLS 1.2 | TLS 1.2 |
| MySQL 8.0 | TLS 1.2, TLS 1.3 | TLS 1.2 |
Nawiązywanie połączenia przy użyciu klienta wiersza polecenia mysql za pomocą protokołu TLS/SSL
Pobieranie publicznego certyfikatu SSL
Aby nawiązać zaszyfrowane połączenia z aplikacjami klienckimi, pobierz certyfikat Globalny główny G2 firmy DigiCert i certyfikat głównego urzędu certyfikacji 2017 firmy Microsoft RSA. Połącz oba certyfikaty przed zainicjowaniem połączenia z serwerem. Aby uzyskać szczegółowe instrukcje, zobacz Jak zaktualizować magazyn certyfikatów głównych na kliencie
Uwaga
Musisz pobrać certyfikat Global Root G2 firmy DigiCert dla serwerów w chmurze Azure Government.
Musisz pobrać globalny certyfikat główny firmy DigiCert dla serwerów w usłudze Azure Mooncake.
Zapisz plik certyfikatu w preferowanej lokalizacji. Na przykład w tym samouczku jest używane c:\ssl środowisko lokalne lub \var\www\html\bin środowisko klienta, w którym jest hostowana aplikacja. Dzięki temu aplikacje mogą bezpiecznie łączyć się z bazą danych za pośrednictwem protokołu SSL.
Jeśli utworzono wystąpienie serwera elastycznego usługi Azure Database for MySQL z dostępem prywatnym (integracja z siecią wirtualną), musisz nawiązać połączenie z serwerem z zasobu w tej samej sieci wirtualnej co serwer. Możesz utworzyć maszynę wirtualną i dodać ją do sieci wirtualnej utworzonej za pomocą wystąpienia serwera elastycznego usługi Azure Database for MySQL.
Jeśli utworzono wystąpienie serwera elastycznego usługi Azure Database for MySQL z dostępem publicznym (dozwolonymi adresami IP), możesz dodać lokalny adres IP do listy reguł zapory na serwerze.
Możesz wybrać mysql.exe lub użyć programu MySQL Workbench z usługą Azure Database for MySQL — serwer elastyczny.
W poniższym przykładzie pokazano, jak nawiązać połączenie z serwerem przy użyciu interfejsu wiersza polecenia mysql.
--ssl-mode=REQUIRED Użyj ustawienia parametry połączenia, aby wymusić weryfikację certyfikatu TLS/SSL. Przekaż ścieżkę pliku certyfikatu lokalnego do parametru --ssl-ca . Zastąp wartości rzeczywistą nazwą serwera i hasłem.
sudo apt-get install mysql-client
wget --no-check-certificate https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootG2.crt.pem
Uwaga
Upewnij się, że wartość przekazana do elementu --ssl-ca jest zgodna ze ścieżką pliku zapisanego certyfikatu.
Jeśli łączysz się z usługą Azure Database for MySQL — elastyczną przy użyciu protokołu SSL i używasz opcji przeprowadzenia pełnej weryfikacji (sslmode=VERTIFY_IDENTITY) z nazwą podmiotu certyfikatu, użyj nazwy <serwera.mysql.database.azure.com> w parametry połączenia.
Jeśli spróbujesz nawiązać połączenie z serwerem przy użyciu nieszyfrowanych połączeń, zostanie wyświetlony błąd informujący o błędzie informujący, że połączenia korzystające z niezabezpieczonego transportu są zabronione podobnie do jednego z poniższych:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Weryfikowanie połączenia TLS/SSL
Wykonaj polecenie stanu mysql, aby sprawdzić, czy nawiązano połączenie z serwerem MySQL przy użyciu protokołu TLS/SSL:
mysql> status
Upewnij się, że połączenie jest szyfrowane, przeglądając dane wyjściowe, które powinny zawierać: SSL: szyfrowanie używane. W tym zestawie szyfrowania przedstawiono przykład i na podstawie klienta można zobaczyć inny zestaw szyfrowania.
Jak zidentyfikować protokoły TLS skonfigurowane na serwerze?
Możesz uruchomić polecenie SHOW GLOBAL VARIABLES LIKE 'tls_version'; i sprawdź wartość, aby zrozumieć, jakie są skonfigurowane wszystkie protokoły.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Jak znaleźć protokół TLS używany przez moich klientów do nawiązywania połączenia z serwerem?
Możesz uruchomić poniższe polecenie i przyjrzeć się tls_version sesji, aby określić, która wersja protokołu TLS jest używana do nawiązywania połączenia.
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;
Nawiązywanie połączenia z wystąpieniem serwera elastycznego usługi Azure Database for MySQL z zaszyfrowanymi połączeniami przy użyciu różnych struktur aplikacji
Parametry połączenia, które są wstępnie zdefiniowane na stronie "Parametry połączenia" dostępne dla serwera w witrynie Azure Portal, zawierają wymagane parametry dla języków wspólnych do nawiązania połączenia z serwerem bazy danych przy użyciu protokołu TLS/SSL. Parametr TLS/SSL różni się w zależności od łącznika. Na przykład "useSSL=true", "sslmode=required" lub "ssl_verify_cert=true" i inne odmiany.
Aby ustanowić zaszyfrowane połączenie z wystąpieniem serwera elastycznego usługi Azure Database for MySQL za pośrednictwem protokołu TLS/SSL z aplikacji, zapoznaj się z następującymi przykładami kodu:
WordPress
Pobierz certyfikat publiczny SSL i dodaj następujące wiersze w wp-config.php po wierszu // **MySQL settings - You can get this info from your web host** //.
//** Connect with SSL ** //
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
//** SSL CERT **//
define('MYSQL_SSL_CERT','/FULLPATH/on-client/to/DigiCertGlobalRootG2.crt.pem');
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', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (korzystanie z pdo)
$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', 'myadmin', 'yourpassword', $options);
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin',
password='<password>',
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',
password='<password>',
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',
'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',
: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' , 'yourpassword', 'mydemoserver.mysql.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (Łącznik MySQL dla języka 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: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 (Łącznik MariaDB dla języka 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 = "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",
password:"yourpassword",
database:"quickstartdb",
port:3306,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Powiązana zawartość
- Używanie aplikacji MySQL Workbench z usługą Azure Database for MySQL — serwer elastyczny
- Używanie języka PHP z usługą Azure Database for MySQL — serwer elastyczny
- Tworzenie sieci wirtualnych dla usługi Azure Database for MySQL — serwer elastyczny i zarządzanie nimi przy użyciu interfejsu wiersza polecenia platformy Azure
- sieć w usłudze Azure Database for MySQL — serwer elastyczny
- Azure Database for MySQL — reguły zapory serwera elastycznego