Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo aprenderá a:
- Configurar la instancia del Servidor flexible de Azure Database for MySQL.
- Con SSL deshabilitado
- Con SSL exigido con la versión de TLS
- Conexión a la instancia de servidor flexible de Azure Database for MySQL mediante la línea de comandos mysql
- Con conexiones cifradas deshabilitadas
- Con conexiones cifradas habilitadas
- Comprobar el estado de cifrado de la conexión
- Conéctese a su instancia de Azure Database for MySQL Flexible Server con conexiones cifradas mediante varios marcos de aplicaciones
Introducción a la compatibilidad con TLS/SSL en el servidor flexible de Azure Database for MySQL
Azure Database for MySQL Flexible Server permite conectar las aplicaciones cliente a la instancia de Azure Database for MySQL Flexible Server mediante Secure Sockets Layer (SSL) con cifrado de Transport Layer Security (TLS). TLS es un protocolo estándar del sector que garantiza conexiones de red cifradas entre el servidor de bases de datos y las aplicaciones cliente, por lo que puede cumplir los requisitos de cumplimiento.
Azure Database for MySQL servidor flexible admite conexiones cifradas mediante la seguridad de la capa de transporte (TLS 1.2) de forma predeterminada y deniega todas las conexiones entrantes mediante TLS 1.0 y TLS 1.1 de forma predeterminada. Puede cambiar la configuración de aplicación de conexiones cifradas o de la versión de TLS en el servidor flexible, tal como se describe en este artículo.
En la tabla siguiente se describen las distintas configuraciones de SSL y TLS que puede tener para la instancia de servidor flexible de Azure Database for MySQL:
Importante
Según la retirada de la compatibilidad con los protocolos TLS 1.0 y TLS 1.1, Microsoft había planeado anteriormente retirar por completo TLS 1.0 y 1.1 para septiembre de 2024. Sin embargo, debido a las dependencias identificadas por algunos clientes, Microsoft decidió ampliar la escala de tiempo.
A partir del 31 de agosto de 2025, Microsoft comienza la actualización forzada para todos los servidores que siguen usando TLS 1.0 o 1.1. Después de esta fecha, las conexiones que dependen de TLS 1.0 o 1.1 podrían dejar de funcionar en cualquier momento. Para evitar posibles interrupciones del servicio, complete la migración a TLS 1.2 antes del 31 de agosto de 2025.
| Scenario | Configuración de parámetros del servidor | Descripción |
|---|---|---|
| Deshabilitar aplicación de TLS | require_secure_transport = OFF |
Si su aplicación heredada no admite conexiones cifradas, desactive la exigencia de conexiones cifradas. |
| Aplicación de TLS con versión < 1.2 (obsoleta en septiembre de 2024) |
require_secure_transport = ON y tls_version = TLS 1.0 o TLS 1.1 |
¡Ya no está disponible! |
| Aplicación de TLS con la versión de TLS = 1.2(Configuración predeterminada) |
require_secure_transport = ON y tls_version = TLS 1.2 |
Configuración predeterminada. |
| Aplicar TLS con la versión TLS 1.3 |
require_secure_transport = ON y tls_version = TLS 1.3 |
Configuración recomendada; Solo se admite con la versión v8.0 y posteriores del servidor flexible de Azure Database for MySQL. |
Note
No se admiten cambios en el cifrado TLS. Los conjuntos de cifrado compatibles con FIPS se aplican de forma predeterminada cuando se establece tls_version en TLS 1.2 o TLS 1.3.
Deshabilitación del cumplimiento de TLS en la instancia del servidor flexible de Azure Database for MySQL
Si la aplicación cliente no admite conexiones cifradas, tiene que deshabilitar la obligatoriedad de conexiones cifradas en la instancia del Servidor flexible de Azure Database for MySQL. Para deshabilitar la aplicación obligatoria de conexiones cifradas, establezca el parámetro del servidor require_secure_transport en OFF, como se muestra en la siguiente captura de pantalla, y guarde la configuración del parámetro del servidor para que surta efecto.
require_secure_transport es un parámetro de servidor dinámico que surte efecto inmediatamente y no requiere reiniciar el servidor.
Conexión mediante el cliente de línea de comandos mysql con TLS deshabilitado
En el ejemplo siguiente se muestra cómo conectarse al servidor mediante la interfaz de la línea de comandos mysql. Use la configuración de cadena de conexión --ssl-mode=DISABLED para deshabilitar la conexión TLS/SSL del cliente de MySQL. Reemplace los valores por el nombre real del servidor y la contraseña.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Importante
Si establece require_secure_transport en OFF en la instancia de servidor flexible de Azure Database for MySQL, pero el cliente se conecta con la conexión cifrada, el servidor sigue aceptando la conexión.
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) |
En resumen, la opción require_secure_transport=OFF reduce la exigencia de usar conexiones cifradas. Por lo tanto, el servidor acepta conexiones sin cifrar además de conexiones cifradas.
Aplicación de la versión de TLS
Para establecer las versiones de TLS en la instancia de servidor flexible de Azure Database for MySQL, establezca el parámetro de tls_version servidor. La configuración predeterminada para el protocolo TLS es TLS 1.2. Si la aplicación admite conexiones al servidor MySQL con TLS, pero requiere cualquier protocolo distinto de TLS 1.2, establezca las versiones de TLS en el parámetro de servidor.
tls_version es un parámetro de servidor estático que requiere un reinicio del servidor para que el parámetro surta efecto.
Conexión mediante el cliente de línea de comandos mysql con TLS/SSL
Descarga del certificado SSL público
Para establecer conexiones cifradas con las aplicaciones cliente, descargue el certificado DigiCert Global Root G2 y el certificado de la entidad de certificación raíz RSA de Microsoft 2017. Combine ambos certificados antes de iniciar una conexión con el servidor. Para obtener pasos detallados, consulte Actualización del almacén de certificados raíz en el cliente.
Note
Debe descargar el certificado DigiCert Global Root G2 para sus servidores en las nubes Azure Government, Public y Mooncake.
Guarde el archivo de certificado en la ubicación que prefiera. Por ejemplo, en este tutorial se usa c:\ssl o \var\www\html\bin en el entorno local o en el entorno cliente donde se hospeda la aplicación.
Si ha creado la instancia del Servidor flexible de Azure Database for MySQL con Acceso privado (integración con red virtual), debe conectarse al servidor desde un recurso que se encuentre en la misma red virtual que el servidor. Puede crear una máquina virtual y agregarla a la red virtual creada con la instancia del Servidor flexible de Azure Database for MySQL.
Si ha creado la instancia del Servidor flexible de Azure Database for MySQL con Acceso público (direcciones IP permitidas), puede agregar la dirección IP local a la lista de reglas de firewall del servidor.
Puede elegir mysql.exe o Usar MySQL Workbench con Azure Database for MySQL: servidor flexible para conectarse al servidor desde el entorno local.
En el ejemplo siguiente se muestra cómo conectarse al servidor mediante la interfaz de la línea de comandos mysql. Use la configuración de la cadena de conexión --ssl-mode=REQUIRED para aplicar la comprobación del certificado TLS/SSL. Pase la ruta de acceso al archivo del certificado local al parámetro --ssl-ca. Reemplace los valores por el nombre real del servidor y la contraseña.
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
Confirme que el valor que pasa a --ssl-ca coincide con la ruta de archivo del certificado que ha guardado.
Si se conecta con la verificación completa (sslmode=VERIFY_IDENTITY), use \<servername\>.mysql.database.azure.com en la cadena de conexión.
Si intenta conectarse al servidor con conexiones sin cifrar, verá un error que indica que las conexiones que usan transporte no seguro están prohibidas:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Comprobación de la conexión TLS
Ejecute el comando MySQL status para comprobar que está conectado mediante TLS:
mysql> status
Confirme que la conexión está cifrada; para ello, revise la salida, que debe mostrar: SSL: el cifrado en uso es. Este conjunto de cifrado muestra un ejemplo y, en función del cliente, puede ver un conjunto de cifrado diferente.
¿Cómo puedo identificar los protocolos TLS configurados en mi servidor?
Ejecute el comando SHOW GLOBAL VARIABLES LIKE 'tls_version'; y compruebe el valor para comprender qué protocolos están configurados.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
¿Cómo encuentro qué protocolos TLS usan mis clientes para conectarse al servidor?
Para comprobar la versión de TLS usada en esta conexión, ejecute la consulta 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;
Conéctese a su instancia de Azure Database for MySQL Flexible Server mediante conexiones cifradas usando distintos marcos de aplicaciones
Las cadenas de conexión predefinidas en la página Cadenas de conexión disponibles para el servidor en el portal de Azure incluyen los parámetros necesarios para que los lenguajes comunes se conecten al servidor de bases de datos mediante TLS/SSL. El parámetro TLS/SSL varía en función del conector. Por ejemplo, use useSSL=true, sslmode=requiredo ssl_verify_cert=true y otras variaciones.
Para establecer una conexión cifrada a la instancia del Servidor flexible de Azure Database for MySQL a través de TLS/SSL desde la aplicación, consulte los ejemplos de código siguientes:
WordPress
Descargue el certificado público SSL y agregue las líneas wp-config.php siguientes después de la línea // **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 (mediante 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 (conector de MySQL para 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 (conector de MariaDB para 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;
});
Contenido relacionado
- Usar MySQL Workbench con el servidor flexible de Azure Database for MySQL
- Uso de PHP con Azure Database for MySQL: Servidor flexible
- Creación y administración de redes virtuales para Azure Database for MySQL: Servidor flexible mediante la CLI de Azure
- redes en el Servidor flexible de Azure Database for MySQL
- reglas de firewall de Servidor flexible de Azure Database for MySQL