MySQL için Azure Veritabanı'na güvenli bir şekilde bağlanmak üzere uygulamanızda SSL bağlantısı yapılandırma
ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu
Önemli
MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?
MySQL için Azure Veritabanı, güvenli yuva katmanı (SSL) kullanarak MySQL için Azure Veritabanı sunucunuzu istemci uygulamalarına bağlamayı destekler. Veritabanı sunucunuzla istemci uygulamalarınız arasında SSL bağlantılarının zorunlu tutulması, sunucuya uygulamanız arasındaki veri akışını şifreleyerek "bağlantıyı izinsiz izleme" saldırılarına karşı korumaya yardımcı olur.
1. Adım: SSL sertifikası alma
MySQL için Azure Veritabanı sunucunuzla https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem SSL üzerinden iletişim kurmak için gereken sertifikayı indirin ve sertifika dosyasını yerel sürücünüze kaydedin (bu öğreticide örneğin c:\ssl kullanılır). Microsoft Internet Explorer ve Microsoft Edge için: İndirme tamamlandıktan sonra sertifikayı BaltimoreCyberTrustRoot.crt.pem olarak yeniden adlandırın.
Bağımsız bulutlardaki sunucular için sertifikalar için aşağıdaki bağlantılara bakın: Azure Kamu, 21Vianet tarafından sağlanan Microsoft Azure ve Azure Almanya.
2. Adım: SSL bağlama
Belirli programlama dili bağlantı dizesi için lütfen aşağıdaki örnek koda bakın.
SSL üzerinden MySQL Workbench kullanarak sunucuya bağlanma
MySQL Workbench'i SSL üzerinden güvenli bir şekilde bağlanacak şekilde yapılandırın.
Yeni Bağlantı Kur iletişim kutusunda SSL sekmesine gidin.
SSL Kullan alanını "Gerekli" olarak güncelleştirin.
SSL CA Dosyası: alanına DigiCertGlobalRootG2.crt.pem dosyasının konumunu girin.
Mevcut bağlantılar için, bağlantı simgesine sağ tıklayıp Düzenle'yi seçerek SSL'yi bağlayabilirsiniz. Ardından SSL sekmesine gidin ve sertifika dosyasını bağlayın.
SSL üzerinden MySQL CLI kullanarak sunucuya bağlanma
SSL sertifikasını bağlamanın bir diğer yolu da aşağıdaki komutları yürüterek MySQL komut satırı arabirimini kullanmaktır.
mysql.exe -h mydemoserver.mysql.database.azure.com -u Username@mydemoserver -p --ssl-mode=REQUIRED --ssl-ca=c:\ssl\DigiCertGlobalRootG2.crt.pem
Not
Windows'ta MySQL komut satırı arabirimini kullanırken hata SSL connection error: Certificate signature check failed
alabilirsiniz. Bu durumda, parametrelerini ile --ssl
değiştirin--ssl-mode=REQUIRED --ssl-ca={filepath}
.
3. Adım: Azure'da SSL bağlantılarını zorunlu tutma
Azure portalını kullanma
Azure portalını kullanarak MySQL için Azure Veritabanı sunucunuzu ziyaret edin ve bağlantı güvenliği'ne tıklayın. SSL bağlantısını zorunlu kılma ayarını etkinleştirmek veya devre dışı bırakmak için iki durumlu düğmeyi kullanın ve kaydet'e tıklayın. Microsoft, gelişmiş güvenlik için SSL bağlantısını zorunlu kılma ayarının her zaman etkinleştirilmesini önerir.
Azure CLI'yı kullanma
Azure CLI'da sırasıyla Etkin veya Devre Dışı değerlerini kullanarak ssl zorlama parametresini etkinleştirebilir veya devre dışı bırakabilirsiniz.
az mysql server update --resource-group myresource --name mydemoserver --ssl-enforcement Enabled
4. Adım: SSL bağlantısını doğrulama
MySQL sunucunuza SSL kullanarak bağlandığınızdan emin olmak için mysql status komutunu yürütebilirsiniz:
mysql> status
Çıkışı gözden geçirerek bağlantının şifrelendiğinden emin olmak için şunu göstermelisiniz: SSL: Şifreleme kullanımda AES256-SHA
Örnek kod
Uygulamanızdan SSL üzerinden MySQL için Azure Veritabanı güvenli bir bağlantı kurmak için aşağıdaki kod örneklerine bakın:
MySQL için Azure Veritabanı hizmeti tarafından desteklenen uyumlu sürücülerin listesine bakın.
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@mydemoserver', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (PDO kullanarak)
$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', 'username@mydemoserver', 'yourpassword', $options);
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin@mydemoserver',
password='yourpassword',
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@mydemoserver',
password='yourpassword',
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@mydemoserver',
'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@mydemoserver',
: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@mydemoserver" , "yourpassword", "mydemoserver.mysql.database.azure.com", 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (Java için MySQL Bağlayıcısı)
# 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@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (Java için MariaDB Bağlayıcısı)
# 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@mydemoserver');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin@mydemoserver",
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@mydemoserver",
password:"yourpassword",
database:"quickstartdb",
port:3306,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Sonraki adımlar
- Sertifika süre sonu ve döndürme hakkında bilgi edinmek için sertifika döndürme belgelerine bakın
- MySQL için Azure Veritabanı için Bağlantı kitaplıklarını izleyen çeşitli uygulama bağlantı seçeneklerini gözden geçirin