Anslut till Azure Database for MySQL – flexibel server med krypterade anslutningar
GÄLLER FÖR: Azure Database for MySQL – flexibel server
Azure Database for MySQL – flexibel server stöder anslutning av klientprogram till Azure Database for MySQL – flexibel serverinstans med hjälp av SSL (Secure Sockets Layer) med TLS-kryptering (Transport Layer Security). TLS är ett branschstandardprotokoll som säkerställer krypterade nätverksanslutningar mellan databasservern och klientprogram, så att du kan följa efterlevnadskrav.
Azure Database for MySQL – flexibel server stöder krypterade anslutningar med transportnivåsäkerhet (TLS 1.2) som standard och alla inkommande anslutningar med TLS 1.0 och TLS 1.1 nekas som standard. Konfigurationen av krypterad anslutning eller TLS-version på den flexibla servern kan ändras enligt beskrivningen i den här artikeln.
Följande är de olika konfigurationerna av SSL- och TLS-inställningar som du kan ha för din flexibla Azure Database for MySQL-serverinstans:
Scenario | Inställningar för serverparameter | beskrivning |
---|---|---|
Inaktivera SSL-tillämpning | require_secure_transport = AV | Om ditt äldre program inte stöder krypterade anslutningar till azure database for MySQL – flexibel server kan du inaktivera tillämpningen av krypterade anslutningar till din flexibla Azure Database for MySQL-serverinstans genom att ange require_secure_transport=OFF. |
Framtvinga SSL med TLS version < 1.2 | require_secure_transport = ON och tls_version = TLS 1.0 eller TLS 1.1 | Om ditt äldre program stöder krypterade anslutningar men kräver TLS version < 1.2 kan du aktivera krypterade anslutningar, men konfigurera din azure database for MySQL-instans för flexibel server så att anslutningar med TLS-versionen (1.0 eller 1.1) stöds av ditt program. Stöds endast med Azure Database for MySQL – flexibel serverversion v5.7 |
Framtvinga SSL med TLS-version = 1.2(standardkonfiguration) | require_secure_transport = ON och tls_version = TLS 1.2 | Detta är den rekommenderade och standardkonfigurationen för flexibel Azure Database for MySQL-server. |
Framtvinga SSL med TLS-version = 1.3 | require_secure_transport = ON och tls_version = TLS 1.3 | Detta är användbart och rekommenderas för utveckling av nya program. Stöds endast med Azure Database for MySQL – flexibel serverversion v8.0 |
Kommentar
- Ändringar i SSL-chiffer i Azure Database for MySQL – flexibel server stöds inte. FIPS-chiffersviter tillämpas som standard när tls_version är inställt på TLS version 1.2 . För andra TLS-versioner än version 1.2 är SSL-chiffer inställt på standardinställningar som medföljer installation av MySQL-communityn.
- MySQL community-utgåvor med öppen källkod som börjar med versionen av MySQL-versionerna 8.0.26 och 5.7.35, TLS 1.0- och TLS 1.1-protokollen är inaktuella. Dessa protokoll som släpptes 1996 respektive 2006 för att kryptera data i rörelse anses vara svaga, inaktuella och sårbara för säkerhetshot. Mer information finns i Ta bort stöd för TLS 1.0- och TLS 1.1-protokollen. Azure Database for MySQL – flexibel server slutar också att stödja TLS-versioner när communityn stoppar stödet för protokollet för att anpassa sig till moderna säkerhetsstandarder.
I den här artikeln kan du se hur du:
- Konfigurera en flexibel Azure Database for MySQL-serverinstans
- Med SSL inaktiverat
- Med SSL framtvingas med TLS-version
- Anslut till din flexibla Azure Database for MySQL-serverinstans med hjälp av mysql-kommandoraden
- Med krypterade anslutningar inaktiverade
- Med krypterade anslutningar aktiverade
- Verifiera krypteringsstatus för anslutningen
- Anslut till din flexibla Azure Database for MySQL-serverinstans med krypterade anslutningar med olika programramverk
Inaktivera SSL-tillämpning på din flexibla Serverinstans för Azure Database for MySQL
Om klientprogrammet inte stöder krypterade anslutningar måste du inaktivera tvingande av krypterade anslutningar på din flexibla Azure Database for MySQL-serverinstans. Om du vill inaktivera tvingande av krypterade anslutningar måste du ställa in require_secure_transport serverparametern på AV enligt skärmbilden och spara konfigurationen av serverparametern så att den börjar gälla. require_secure_transport är en dynamisk serverparameter som börjar gälla omedelbart och inte kräver att serveromstarten börjar gälla.
Anslut med hjälp av mysql-kommandoradsklienten med SSL inaktiverat
I följande exempel visas hur du ansluter till servern med hjälp av kommandoradsgränssnittet mysql. Använd inställningen --ssl-mode=DISABLED
anslutningssträng för att inaktivera TLS/SSL-anslutning från mysql-klienten. Ersätt värden med ditt faktiska servernamn och lösenord.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
Viktigt!
Om du ställer in require_secure_transport på AV betyder det inte att krypterade anslutningar inte stöds på serversidan. Om du ställer in require_secure_transport till AV på azure database for MySQL flexibel serverinstans, men om klienten ansluter med den krypterade anslutningen godkänns den fortfarande. Följande anslutning med mysql-klienten till en flexibel Azure Database for MySQL-serverinstans som konfigurerats med require_secure_transport=OFF fungerar också enligt nedan.
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)
Sammanfattningsvis require_secure_transport=OFF-inställningen minskar tillämpningen av krypterade anslutningar på en flexibel Azure Database for MySQL-server och tillåter okrypterade anslutningar till servern från klienten utöver de krypterade anslutningarna.
Framtvinga SSL med TLS-version
Om du vill ange TLS-versioner på din flexibla Azure Database for MySQL-serverinstans måste du ange *tls_version- serverparameter. Standardinställningen för TLS-protokollet är TLS 1.2. Om programmet stöder anslutningar till MySQL-servern med SSL, men kräver något annat protokoll än TLS 1.2, måste du ange TLS-versionerna i serverparametern. *tls_version – är en statisk serverparameter som kräver en omstart av servern för att parametern ska börja gälla. Följande är protokoll som stöds för de tillgängliga versionerna av Azure Database for MySQL – flexibel server.
Azure Database for MySQL – flexibel serverversion | Värden som stöds för tls_version | Standardinställningen |
---|---|---|
MySQL 5.7 | TLS 1.0, TLS 1.1, TLS 1.2 | TLS 1.2 |
MySQL 8.0 | TLS 1.2, TLS 1.3 | TLS 1.2 |
Anslut med hjälp av mysql-kommandoradsklienten med TLS/SSL
Ladda ned det offentliga SSL-certifikatet
Om du vill använda krypterade anslutningar med dina klientprogram måste du ladda ned det offentliga SSL-certifikatet, som också är tillgängligt i azure-portalens nätverksfönster enligt skärmbilden nedan.
Kommentar
Du måste ladda ned det här SSL-certifikatet för dina servrar i Azure Government-molnet.
Spara certifikatfilen på önskad plats. Den här självstudien använder c:\ssl
till exempel eller \var\www\html\bin
i din lokala miljö eller klientmiljön där programmet finns. På så sätt kan program ansluta säkert till databasen via SSL.
Om du har skapat en flexibel Azure Database for MySQL-serverinstans med privat åtkomst (VNet-integrering) måste du ansluta till servern från en resurs i samma virtuella nätverk som servern. Du kan skapa en virtuell dator och lägga till den i det virtuella nätverk som skapats med din flexibla Azure Database for MySQL-serverinstans.
Om du har skapat en flexibel Azure Database for MySQL-serverinstans med offentlig åtkomst (tillåtna IP-adresser) kan du lägga till din lokala IP-adress i listan över brandväggsregler på servern.
Du kan välja antingen mysql.exe eller MySQL Workbench för> att ansluta till servern från din lokala miljö.
I följande exempel visas hur du ansluter till servern med hjälp av kommandoradsgränssnittet mysql. Använd inställningen --ssl-mode=REQUIRED
anslutningssträng för att framtvinga TLS/SSL-certifikatverifiering. Skicka sökvägen till den lokala certifikatfilen till parametern --ssl-ca
. Ersätt värden med ditt faktiska servernamn och lösenord.
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
Kommentar
Bekräfta att det värde som skickas till --ssl-ca
matchar filsökvägen för det certifikat som du sparade.
Om du ansluter till Azure Database for MySQL – Flexibel med SSL och använder ett alternativ för att utföra fullständig verifiering (sslmode=VERTIFY_IDENTITY) med certifikatmottagarens namn använder du <servername.mysql.database.azure.com> i anslutningssträng.
Om du försöker ansluta till servern med okrypterade anslutningar visas ett felmeddelande om att anslutningar som använder osäker transport är förbjudna på liknande sätt som nedan:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
Verifiera TLS/SSL-anslutningen
Kör mysql-statuskommandot för att kontrollera att du har anslutit till MySQL-servern med TLS/SSL:
mysql> status
Bekräfta att anslutningen är krypterad genom att granska utdata, vilket bör visa: SSL: Chiffer som används är. Den här chiffersviten visar ett exempel och baserat på klienten kan du se en annan chiffersvit.
Hur identifierar du de TLS-protokoll som konfigurerats på servern?
Du kan köra kommandot SHOW GLOBAL VARIABLES LIKE 'tls_version'; och kontrollera värdet för att förstå vad alla protokoll har konfigurerats.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
Hur hittar jag vilket TLS-protokoll som används av mina klienter för att ansluta till servern?
Du kan köra kommandot nedan och titta på tls_version för sessionen för att identifiera vilken TLS-version som används för att ansluta.
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;
Anslut till din flexibla Azure Database for MySQL-serverinstans med krypterade anslutningar med olika programramverk
Anslut ionssträngar som är fördefinierade på sidan "Anslut ionssträngar" som är tillgängliga för servern i Azure-portalen innehåller de parametrar som krävs för att vanliga språk ska kunna ansluta till databasservern med hjälp av TLS/SSL. Parametern TLS/SSL varierar beroende på anslutningsappen. Till exempel "useSSL=true", "sslmode=required" eller "ssl_verify_cert=true" och andra varianter.
Information om hur du upprättar en krypterad anslutning till din flexibla Azure Database for MySQL-serverinstans via TLS/SSL från ditt program finns i följande kodexempel:
WordPress
Ladda ned offentligt SSL-certifikat och lägg till följande rader i wp-config.php efter raden // **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 (med hjälp av 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 (MySQL Anslut or Python)
try:
conn = mysql.connector.connect(user='myadmin',
password='yourpassword',
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='yourpassword',
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 Anslut or för 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 Anslut eller för 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 (MySql Anslut or)
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;
});
Nästa steg
- Använd MySQL Workbench för att ansluta och fråga efter data i azure database for MySQL – flexibel server
- Använda PHP för att ansluta och fråga efter data i Azure Database for MySQL – flexibel server
- Skapa och hantera ett flexibelt virtuellt servernätverk i Azure Database for MySQL med Azure CLI.
- Läs mer om nätverk i Azure Database for MySQL – flexibel server
- Lär dig mer om brandväggsregler för Azure Database for MySQL – flexibel server