Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, как:
- Настройка экземпляра гибкого сервера База данных Azure для MySQL
- Без использования SSL
- С принудительным применением SSL для версий TLS
- Подключение к экземпляру гибкого сервера База данных Azure для MySQL с помощью командной строки mysql
- С отключенным шифрованием подключений
- С включенным шифрованием подключений
- Проверка состояния шифрования для подключения
- Подключитесь к экземпляру гибкого сервера База данных Azure для MySQL с зашифрованными подключениями с помощью различных платформ приложений
Общие сведения о поддержке TLS/SSL в гибком сервере Базы данных Azure для MySQL
База данных Azure для MySQL Гибкий сервер поддерживает подключение клиентских приложений к экземпляру гибкого сервера База данных Azure для MySQL с помощью протокола SSL с шифрованием TLS. TLS — это стандартный отраслевый протокол, обеспечивающий зашифрованные сетевые подключения между сервером базы данных и клиентскими приложениями, что позволяет соответствовать требованиям соответствия требованиям.
База данных Azure для MySQL гибкий сервер поддерживает зашифрованные подключения с помощью протокола TLS 1.2 по умолчанию, а все входящие подключения с TLS 1.0 и TLS 1.1 по умолчанию запрещены. Конфигурацию зашифрованного подключения или конфигурацию версии TLS на гибком сервере можно изменить, как описано в этой статье.
Ниже приведены различные конфигурации параметров SSL и TLS, которые можно использовать для экземпляра гибкого сервера База данных Azure для MySQL:
Это важно
Согласно удалению поддержки протоколов TLS 1.0 и TLS 1.1, мы ранее планировали полностью удалить TLS 1.0 и 1.1 к сентября 2024 года. Однако из-за зависимостей, определенных некоторыми клиентами, мы решили расширить временную шкалу.
Начиная с 31 августа 2025 г. мы начали принудительное обновление для всех серверов, которые по-прежнему используют TLS 1.0 или 1.1. После этой даты все подключения, использующие TLS 1.0 или 1.1, могут перестать работать в любое время. Чтобы избежать потенциальных сбоев служб, настоятельно рекомендуется клиентам завершить миграцию в TLS 1.2 до 31 августа 2025 г.
| Scenario | Параметры сервера | Description |
|---|---|---|
| Отключение принудительного применения TLS | require_secure_transport = OFF |
Если устаревшее приложение не поддерживает зашифрованные подключения, можно отключить принудительное применение зашифрованных подключений. |
| Принудительное применение TLS с использованием версии TLS < 1.2 (будет устаревшей в сентябре 2024 г.) |
require_secure_transport = ON или tls_version = TLS 1.0 или TLS 1.1 |
Больше недоступен! |
| Принудительное применение TLS с версией TLS = 1.2(конфигурация по умолчанию) |
require_secure_transport = ON и tls_version = TLS 1.2. |
Конфигурация по умолчанию. |
| Принудительное применение TLS с версией TLS = 1.3 |
require_secure_transport = ON и tls_version = TLS 1.3. |
Рекомендуемая конфигурация; поддерживается только с гибкой версией сервера Базы данных Azure для MySQL версии 8.0 и более поздней. |
Замечание
Изменения шифра TLS не поддерживаются. Наборы шифров, соответствующие стандартам FIPS, применяются по умолчанию, если tls_version установлено в TLS 1.2 или TLS 1.3.
Отключите принудительное применение TLS для экземпляра гибкого сервера базы данных MySQL в Azure
Если клиентское приложение не поддерживает зашифрованные подключения, необходимо отключить принудительное применение зашифрованных подключений на экземпляре гибкого сервера База данных Azure для MySQL. Чтобы отключить принудительное применение зашифрованных подключений, необходимо задать для параметра сервера require_secure_transport значение OFF, как показано на снимке экрана, и сохранить конфигурацию параметра сервера, чтобы она вступают в силу. require_secure_transport является динамическим параметром сервера, то есть вступает в силу немедленно, без перезапуска сервера.
Подключение с помощью клиента командной строки mysql с отключенным протоколом TLS
В следующем примере показано, как подключиться к серверу с помощью интерфейса командной строки mysql. Используйте параметр --ssl-mode=DISABLED в строке подключения, чтобы отключить подключение TLS/SSL от клиента mysql. Замените в ней предложенные значения реальными значениями имени сервера и пароля.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Это важно
Если вы установите require_secure_transport на OFF в экземпляре гибкого сервера базы данных Azure для MySQL, даже если клиент подключается с зашифрованным соединением, оно все равно будет принято.
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) |
В итоге require_secure_transport=OFF настройка ослабляет принудительное применение зашифрованных подключений, поэтому сервер принимает незашифрованные подключения в дополнение к зашифрованным подключениям.
Принудительное применение версии TLS
Чтобы задать версии TLS в экземпляре гибкого сервера Базы данных Azure для MySQL, необходимо задать tls_version параметр сервера. Значение по умолчанию для протокола TLS — TLS 1.2. Если приложение поддерживает подключения к серверу MySQL с помощью TLS, но требуется любой протокол, отличный от TLS 1.2, задайте версии TLS в параметре сервера.
tls_version — это параметр статического сервера , который требует перезапуска сервера для того, чтобы параметр вступил в силу.
Подключение с помощью клиента командной строки mysql с использованием TLS/SSL
Скачивание общедоступного SSL-сертификата
Чтобы установить зашифрованные подключения с клиентскими приложениями, скачайте сертификат DigiCert Global Root G2 и сертификат Корневого центра сертификации Microsoft RSA 2017. Объедините оба сертификата перед началом подключения к серверу. Подробные инструкции см. в статье Об обновлении корневого хранилища сертификатов на клиенте.
Замечание
Необходимо скачать сертификат DigiCert Global Root G2 для серверов в облаке Azure для государственных организаций.
Необходимо скачать глобальный корневой сертификат DigiCert для серверов в Azure Mooncake.
Сохраните файл сертификата в любое расположение. В этом руководстве используется c:\ssl или \var\www\html\bin в локальной среде или в клиентской среде, где размещается приложение.
Если вы создали экземпляр гибкого сервера База данных Azure для MySQL с частным доступом (интеграция с виртуальной сетью), необходимо подключиться к серверу из ресурса в той же виртуальной сети, что и сервер. Вы можете создать виртуальную машину и добавить ее в виртуальную сеть, созданную с помощью экземпляра гибкого сервера База данных Azure для MySQL.
Если вы создали экземпляр гибкого сервера База данных Azure для MySQL с общедоступным доступом (разрешенными IP-адресами), вы можете добавить локальный IP-адрес в список правил брандмауэра на сервере.
Вы можете выбрать mysql.exe или использовать MySQL Workbench с База данных Azure для MySQL — гибкий сервер,> чтобы подключиться к серверу из локальной среды.
В следующем примере показано, как подключиться к серверу с помощью интерфейса командной строки mysql. Используйте параметр строки подключения для принудительной --ssl-mode=REQUIRED проверки TLS/SSL-сертификата. Передайте путь к локальному файлу сертификата параметру --ssl-ca. Замените в ней предложенные значения реальными значениями имени сервера и пароля.
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
Замечание
Убедитесь, что значение в параметре --ssl-ca соответствует пути к сохраненному файлу сертификата.
Если вы подключаетесь с полной проверкой (sslmode=VERTIFY_IDENTITY), используйте \<servername\>.mysql.database.azure.com в строке подключения.
Если вы пытаетесь подключиться к серверу с незашифрованными подключениями, появится сообщение об ошибке о том, что подключения с использованием небезопасного транспорта запрещены:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Проверка подключения TLS
Выполните команду mysql status , чтобы убедиться, что вы подключены с помощью TLS:
mysql> status
Убедитесь, что подключение зашифровано, просмотрев выходные данные, в которых должно отображаться следующее: SSL: Cipher in use is (SSL: используется шифр). Этот комплект шифров приведен только для примера, а вы увидите другой комплект в зависимости от используемого клиента.
Как определить протоколы TLS, настроенные на сервере?
Вы можете запустить команду SHOW GLOBAL VARIABLES LIKE 'tls_version'; также проверьте значение, чтобы понять, как все протоколы настроены.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Как найти, какой протокол TLS используется моими клиентами для подключения к серверу?
Чтобы проверить версию TLS, используемую в этом подключении, выполните SQL-запрос:
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;
Подключитесь к экземпляру гибкого сервера База данных Azure для MySQL с зашифрованными подключениями с помощью различных платформ приложений
Строки подключения, предопределенные на странице "Строки подключения", доступные для сервера на портале Azure, включают необходимые параметры для общего языка для подключения к серверу базы данных с помощью TLS/SSL. Параметр TLS/SSL зависит от используемого соединителя. Это могут быть "useSSL=true", "sslmode=required", "ssl_verify_cert=true" и другие варианты.
Чтобы установить зашифрованное подключение к экземпляру гибкого сервера База данных Azure для MySQL через TLS/SSL из приложения, ознакомьтесь со следующими примерами кода:
WordPress
Скачайте общедоступный сертификат SSL и добавьте следующие строки в файл wp-config.php после строки // **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 (с использованием 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'}
}
}
}
Руби
client = Mysql2::Client.new(
:host => 'mydemoserver.mysql.database.azure.com',
:username => 'myadmin',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
)
Голанг
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 (соединитель MySQL для 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 (соединитель MariaDB для 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;
});
Связанный контент
- Использование MySQL Workbench с База данных Azure для MySQL гибким сервером
- Использование PHP с базой данных Azure для MySQL — гибкий сервер
- Создание виртуальных сетей для База данных Azure для MySQL и управление ими с помощью Azure CLI
- сеть в База данных Azure для MySQL — гибкий сервер
- База данных Azure для MySQL — правила брандмауэра гибкого сервера