Verbinding maken Azure Database for MySQL - Flexibele server met versleutelde verbindingen
VAN TOEPASSING OP: Azure Database for MySQL - Flexibele server
Flexibele Azure Database for MySQL-server biedt ondersteuning voor het verbinden van uw clienttoepassingen met het azure Database for MySQL flexibele serverexemplaren met SSL -versleuteling (Secure Sockets Layer) met TLS-versleuteling (Transport Layer Security). TLS is een industriestandaardprotocol dat zorgt voor versleutelde netwerkverbindingen tussen uw databaseserver en client-toepassingen, zodat u kunt voldoen aan nalevingsvereisten.
Flexibele Azure Database for MySQL-server ondersteunt standaard versleutelde verbindingen met TLS 1.2 (Transport Layer Security) en alle binnenkomende verbindingen met TLS 1.0 en TLS 1.1 worden standaard geweigerd. De configuratie van de versleutelde verbinding afdwingen of TLS-versie op uw flexibele server kan worden gewijzigd, zoals wordt beschreven in dit artikel.
Hieronder vindt u de verschillende configuraties van SSL- en TLS-instellingen die u kunt hebben voor uw flexibele Azure Database for MySQL-serverexemplaren:
Belangrijk
Volgens het verwijderen van ondersteuning voor de PROTOCOLLEN TLS 1.0 en TLS 1.1, vanaf begin september 2024, mogen nieuwe servers TLS 1.0 of 1.1 niet meer gebruiken en kunnen bestaande servers niet downgraden naar deze versies. Vanaf medio september 2024 starten we een verplichte upgrade van alle servers die momenteel GEBRUIKMAKEN van TLS 1.0 of 1.1 naar TLS 1.2. Dit upgradeproces wordt naar verwachting eind september 2024 voltooid. We raden klanten ten zeerste aan ervoor te zorgen dat hun toepassingen vóór eind september volledig compatibel zijn met TLS 1.2.
Scenario | Serverparameterinstellingen | Beschrijving |
---|---|---|
SSL-afdwinging uitschakelen | require_secure_transport = UIT | Als uw verouderde toepassing geen ondersteuning biedt voor versleutelde verbindingen met een flexibele Azure Database for MySQL-server, kunt u afdwingen van versleutelde verbindingen met uw flexibele Azure Database for MySQL-serverexemplaren uitschakelen door require_secure_transport=UIT in te stellen. |
SSL afdwingen met TLS-versie < 1.2 (wordt afgeschaft in september 2024) | require_secure_transport = AAN en tls_version = TLS 1.0 of TLS 1.1 | Als uw verouderde toepassing versleutelde verbindingen ondersteunt, maar TLS-versie < 1.2 vereist, kunt u versleutelde verbindingen inschakelen, maar uw exemplaar van flexibele Azure Database for MySQL-server configureren om verbindingen met de TLS-versie (1.0 of 1.1) toe te staan die door uw toepassing worden ondersteund. Alleen ondersteund met azure Database for MySQL flexibele server versie v5.7 |
SSL afdwingen met TLS-versie = 1.2(standaardconfiguratie) | require_secure_transport = AAN en tls_version = TLS 1.2 | Dit is de aanbevolen en standaardconfiguratie voor flexibele Azure Database for MySQL-server. |
SSL afdwingen met TLS-versie = 1.3 | require_secure_transport = AAN en tls_version = TLS 1.3 | Dit is handig en wordt aanbevolen voor het ontwikkelen van nieuwe toepassingen. Alleen ondersteund met Versie v8.0 van flexibele Azure Database for MySQL-server |
Notitie
Wijzigingen in SSL-codering op een flexibele Azure Database for MySQL-server worden niet ondersteund. FIPS-coderingssuites worden standaard afgedwongen wanneer tls_version is ingesteld op TLS-versie 1.2. Voor andere TLS-versies dan versie 1.2 is SSL-codering ingesteld op standaardinstellingen die worden geleverd bij de installatie van de MySQL-community.
In dit artikel leert u het volgende:
- Uw exemplaar van flexibele Azure Database for MySQL-server configureren
- Met SSL uitgeschakeld
- Met SSL afgedwongen met TLS-versie
- Verbinding maken met uw exemplaar van flexibele Azure Database for MySQL-server met behulp van de mysql-opdrachtregel
- Als versleutelde verbindingen zijn uitgeschakeld
- Als versleutelde verbindingen zijn ingeschakeld
- Versleutelingsstatus voor uw verbinding controleren
- Verbinding maken met uw exemplaar van flexibele Azure Database for MySQL-server met versleutelde verbindingen met behulp van verschillende toepassingsframeworks
SSL-afdwinging uitschakelen op uw flexibele Azure Database for MySQL-serverexemplaren
Als uw clienttoepassing geen ondersteuning biedt voor versleutelde verbindingen, moet u het afdwingen van versleutelde verbindingen uitschakelen op uw flexibele serverexemplaren van Azure Database for MySQL. Als u het afdwingen van versleutelde verbindingen wilt uitschakelen, moet u require_secure_transport serverparameter instellen op UIT, zoals wordt weergegeven in de schermopname en de configuratie van de serverparameter opslaan zodat deze van kracht wordt. require_secure_transport is een dynamische serverparameter die onmiddellijk van kracht wordt en waarvoor het opnieuw opstarten van de server niet van kracht hoeft te worden.
Verbinding maken met behulp van mysql-opdrachtregelclient met SSL uitgeschakeld
In het volgende voorbeeld ziet u hoe u verbinding maakt met uw server met behulp van de mysql-opdrachtregelinterface. Gebruik de --ssl-mode=DISABLED
instelling verbindingsreeks om de TLS/SSL-verbinding van mysql-client uit te schakelen. Vervang de waarden door uw werkelijke servernaam en wachtwoord.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Belangrijk
Als u de require_secure_transport instelt op UIT, betekent dit niet dat versleutelde verbindingen niet worden ondersteund aan de serverzijde. Als u require_secure_transport instelt op UIT op het exemplaar van de flexibele Azure Database for MySQL-server, maar als de client verbinding maakt met de versleutelde verbinding, wordt deze nog steeds geaccepteerd. De volgende verbinding met behulp van mysql-client naar een flexibele Azure Database for MySQL-serverinstantie die is geconfigureerd met require_secure_transport=OFF werkt ook zoals hieronder wordt weergegeven.
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)
Kortom, require_secure_transport=OFF-instelling versoepelt de afdwinging van versleutelde verbindingen op azure Database for MySQL flexibele server en maakt niet-versleutelde verbindingen met de server mogelijk naast de versleutelde verbindingen.
SSL afdwingen met TLS-versie
Als u TLS-versies wilt instellen op uw exemplaar van flexibele Azure Database for MySQL-server, moet u de serverparameter *tls_version- instellen. De standaardinstelling voor TLS-protocol is TLS 1.2. Als uw toepassing verbindingen met MySQL-server ondersteunt met SSL, maar een ander protocol dan TLS 1.2 vereist, moet u de TLS-versies instellen in de serverparameter. *tls_version- is een statische serverparameter waarvoor een server opnieuw moet worden opgestart voordat de parameter van kracht wordt. Hieronder vindt u de ondersteunde protocollen voor de beschikbare versies van azure Database for MySQL flexibele server.
Versie van flexibele Azure Database for MySQL-server | Ondersteunde waarden van tls_version | Standaardinstelling |
---|---|---|
MySQL 5.7 | TLS 1.0, TLS 1.1(wordt afgeschaft in september 2024) TLS 1.2 | TLS 1.2 |
MySQL 8.0 | TLS 1.2, TLS 1.3 | TLS 1.2 |
Verbinding maken met behulp van mysql-opdrachtregelclient met TLS/SSL
Het openbare SSL-certificaat downloaden
Als u versleutelde verbindingen met uw clienttoepassingen wilt gebruiken, moet u het openbare SSL-certificaat downloaden, dat ook beschikbaar is in het deelvenster Netwerken in Azure Portal, zoals wordt weergegeven in de onderstaande schermopname.
Notitie
U moet dit SSL-certificaat downloaden voor uw servers in de Azure Government-cloud.
Sla het certificaatbestand op de gewenste locatie op. In deze zelfstudie wordt bijvoorbeeld gebruikgemaakt c:\ssl
van of \var\www\html\bin
in uw lokale omgeving of in de clientomgeving waar uw toepassing wordt gehost. Hierdoor kunnen toepassingen veilig verbinding maken met de database via SSL.
Als u uw exemplaar van flexibele Azure Database for MySQL-server hebt gemaakt met privétoegang (VNet-integratie), moet u verbinding maken met uw server vanuit een resource binnen hetzelfde VNet als uw server. U kunt een virtuele machine maken en deze toevoegen aan het VNet dat is gemaakt met uw flexibele Azure Database for MySQL-serverexemplaren.
Als u uw exemplaar van flexibele Azure Database for MySQL-server hebt gemaakt met openbare toegang (toegestane IP-adressen), kunt u uw lokale IP-adres toevoegen aan de lijst met firewallregels op uw server.
U kunt kiezen mysql.exe of MySQL Workbench> om verbinding te maken met de server vanuit uw lokale omgeving.
In het volgende voorbeeld ziet u hoe u verbinding maakt met uw server met behulp van de mysql-opdrachtregelinterface. Gebruik de --ssl-mode=REQUIRED
verbindingsreeks-instelling om verificatie van TLS/SSL-certificaten af te dwingen. Geef het pad naar het lokale certificaatbestand door aan de --ssl-ca
parameter. Vervang de waarden door uw werkelijke servernaam en wachtwoord.
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
Notitie
Controleer of de waarde die is doorgegeven aan --ssl-ca
overeenkomt met het bestandspad voor het certificaat dat u hebt opgeslagen.
Als u verbinding maakt met Azure Database for MySQL - Flexibel met SSL en een optie gebruikt om volledige verificatie (sslmode=VERTIFY_IDENTITY) uit te voeren met de onderwerpnaam van het certificaat, gebruikt <u servernaam.mysql.database.azure.com> in uw verbindingsreeks.
Als u probeert verbinding te maken met uw server met niet-versleutelde verbindingen, ziet u een foutbericht waarin staat dat verbindingen met onveilig transport zijn verboden, zoals hieronder:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
De TLS/SSL-verbinding controleren
Voer de mysql-statusopdracht uit om te controleren of u verbinding hebt gemaakt met uw MySQL-server met behulp van TLS/SSL:
mysql> status
Controleer of de verbinding is versleuteld door de uitvoer te controleren, die moet worden weergegeven: SSL: Codering in gebruik is. Deze coderingssuite toont een voorbeeld en op basis van de client ziet u een andere coderingssuite.
Hoe identificeert u de TLS-protocollen die op uw server zijn geconfigureerd?
U kunt de opdracht SHOW GLOBAL VARIABLES LIKE 'tls_version' uitvoeren; en controleer de waarde om te begrijpen wat alle protocollen zijn geconfigureerd.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Hoe kunt u vinden welk TLS-protocol door mijn clients wordt gebruikt om verbinding te maken met de server?
U kunt de onderstaande opdracht uitvoeren en tls_version voor de sessie bekijken om te bepalen welke TLS-versie wordt gebruikt om verbinding te maken.
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;
Verbinding maken met uw exemplaar van flexibele Azure Database for MySQL-server met versleutelde verbindingen met behulp van verschillende toepassingsframeworks
Verbindingsreeksen die vooraf zijn gedefinieerd op de pagina Verbindingsreeksen die beschikbaar zijn voor uw server in Azure Portal, bevatten de vereiste parameters voor algemene talen om verbinding te maken met uw databaseserver met behulp van TLS/SSL. De TLS/SSL-parameter varieert op basis van de connector. Bijvoorbeeld 'useSSL=true', 'sslmode=required' of 'ssl_verify_cert=true' en andere variaties.
Raadpleeg de volgende codevoorbeelden om een versleutelde verbinding tot stand te brengen met uw flexibele Azure Database for MySQL-serverexemplaren via TLS/SSL vanuit uw toepassing:
WordPress
Download het openbare SSL-certificaat en voeg de volgende regels toe in wp-config.php na de regel // **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/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 (met PDO)
$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='<password>',
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='<password>',
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 (MySQL Connector voor 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 Connector voor 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;
});
Volgende stappen
- MySQL Workbench gebruiken om verbinding te maken met en query's uit te voeren op gegevens in Azure Database for MySQL Flexibele server
- PHP gebruiken om verbinding te maken met en query's uit te voeren op gegevens in Azure Database for MySQL Flexibele server
- Een virtueel netwerk voor flexibele Azure Database for MySQL-servers maken en beheren met behulp van Azure CLI.
- Meer informatie over netwerken in Azure Database for MySQL Flexibele server
- Meer informatie over firewallregels voor flexibele Azure Database for MySQL-servers