Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы узнаете, как:
- Настройка экземпляра гибкого сервера База данных 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.
Important
Согласно удалению поддержки протоколов TLS 1.0 и TLS 1.1, к сентября 2024 г. Microsoft ранее планировалось полностью удалить TLS 1.0 и 1.1. Однако из-за зависимостей, определенных некоторыми клиентами, Microsoft решили продлить временную шкалу.
Начиная с 31 августа 2025 г. Microsoft начинает принудительное обновление для всех серверов, которые по-прежнему используют TLS 1.0 или 1.1. После этой даты все подключения, использующие TLS 1.0 или 1.1, могут перестать работать в любое время. Чтобы избежать потенциальных сбоев служб, завершите миграцию на TLS 1.2 до 31 августа 2025 г.
| Scenario | Параметры сервера | Описание |
|---|---|---|
| Отключение принудительного применения 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 и более поздней. |
Note
Изменения шифра 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
Important
Если для require_secure_transport на экземпляре База данных Azure для MySQL — Flexible Server задано значение OFF, но клиент подключается с использованием шифрования, сервер всё равно принимает подключение.
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. Объедините оба сертификата перед началом подключения к серверу. Подробные инструкции см. в разделе "Обновление корневого хранилища сертификатов" на клиенте.
Note
Необходимо скачать сертификат DigiCert Global Root G2 для ваших серверов в облаках Azure для государственных организаций, Public и Mooncake.
Сохраните файл сертификата в предпочитаемое вами место. В этом руководстве используются c:\ssl или \var\www\html\bin в локальной или клиентской среде, где работает ваше приложение.
Если вы создали экземпляр гибкого сервера Azure Database для 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
Note
Убедитесь, что значение, которое вы передаете --ssl-ca , соответствует пути к файлу для сохраненного сертификата.
Если вы подключаетесь с полной проверкой (sslmode=VERIFY_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 — Flexible Server с помощью Azure CLI
- сетевое взаимодействие в Azure Database для MySQL — гибкий сервер
- База данных Azure для MySQL — правила брандмауэра сервера с гибкими настройками