Aktarım halindeki verilerin güvenliğini artırmak için Secure Sockets Layer (SSL) şifrelemeyi etkinleştirebilir ve uygulama hizmetlerinize bir CA sertifikası yükleyebilirsiniz. SSL, veri güvenliğini ve bütünlüğünü iyileştirmek amacıyla ağ bağlantılarını taşıma katmanında şifreler; ancak bu işlem bağlantı gecikme süresini artırabilir.
Arka plan bilgileri
SSL, bir web tarayıcısı ile bir web sunucusu arasında veri aktarımı için güvenli bir kanal oluşturmak amacıyla Netscape tarafından geliştirilen bir güvenlik protokolüdür. RC4, MD5 ve RSA gibi şifreleme algoritmaları kullanarak iletişimi güvence altına alır. Internet Engineering Task Force (IETF), SSL 3.0'ı standartlaştırarak Transport Layer Security (TLS) olarak yeniden adlandırdı. SSL daha yaygın bir terim olsa da bu belgede SSL şifrelemeden bahsedilirken TLS şifrelemeye atıfta bulunulmaktadır.
Senaryolar
Genel internet üzerinden bir veritabanına erişim: Bir istemci genel internet üzerinden bir PolarDB kümesine bağlandığında, veri bağlantısı güvenilmeyen bir ağa maruz kalır. Man-in-the-middle saldırılarını önlemek için şifreleme gereklidir.
Güvenlik ve uyumluluk gereksinimlerini karşılama: PCI-DSS ve GDPR gibi belirli sektör veya veri koruma düzenlemeleri, aktarım halindeki hassas veriler için şifreleme kullanılmasını zorunlu kılar.
Ağ ortamları arasında iletişim: Hibrit cloud veya çok VPC mimarisinde, ağ sınırlarını aşan veri akışlarının gizliliğini ve bütünlüğünü sağlamak için SSL şifreleme gerekir.
Sınırlamalar
Tek uç nokta şifrelemesi: Her küme, aynı anda yalnızca bir uç nokta için SSL şifrelemeyi destekler. Kümeniz hem bir genel hem de bir dahili uç nokta ile yapılandırılmışsa, iş senaryonıza göre şifrelemek üzere birini seçmeniz gerekir.
-
Şifrelenecek bir uç nokta seçmeye ilişkin öneriler:
Veritabanına genel internet üzerinden erişiyorsanız, aktarım halindeki verileri korumak için genel uç nokta için SSL şifrelemeyi etkinleştirmenizi öneririz.
Veritabanına yalnızca bir VPC içinden erişiyorsanız ve güvenlik ile uyumluluk gereksinimlerini karşılamak istiyorsanız, dahili uç nokta için SSL şifrelemeyi etkinleştirmenizi öneririz.
Uç nokta uzunluğu sınırı: SSL şifreleme etkinleştirilmiş bir PolarDB uç noktası 64 karakterden kısa olmalıdır. Bir uç noktayı nasıl değiştireceğiniz hakkında bilgi için bkz. PolarProxy'yi Yapılandırma.
Önemli
Sertifika geçerlilik süresi: SSL sertifikalarının bir yıl olan ve uzatılamayan bir geçerlilik süresi vardır. Süresi dolmadan önce geçerlilik süresini güncellemeniz, CA sertifikasını yeniden indirmeniz ve yapılandırmanız gerekir. Aksi takdirde, şifrelenmiş istemci bağlantıları başarısız olur. otomatik sertifika rotasyonunu etkinleştirmenizi öneririz.
Hizmet kesintileri: Aşağıdaki eylemler kümenizi yeniden başlatır: etkinleştirme veya devre dışı bırakma, sertifika geçerlilik süresini güncelleme, korunan uç noktayı değiştirme ve otomatik sertifika rotasyonunu etkinleştirme. Bu işlemleri yoğun olmayan saatlerde yapmanızı ve uygulamanızın otomatik olarak yeniden bağlanabildiğinden emin olmanızı öneririz.
Yordam
1. Adım: SSL şifrelemeyi etkinleştirin
SSL şifrelemeyi etkinleştirmek kümenizi yeniden başlatır. Bu işlemi yoğun olmayan saatlerde yapmanızı öneririz.
PolarDB konsoluna giriş yapın. Sol gezinme bölmesinde Clusters öğesine tıklayın. Kümenizin bulunduğu bölgeyi seçin ve ardından küme kimliğine tıklayın.
Sol gezinme bölmesinde seçeneğini belirleyin.
-
SSL Settings sekmesinde, SSL şifrelemeyi etkinleştirmek için SSL Status anahtarını açın.
NotBirincil, küme ve özel uç noktalar için SSL yapılandırabilirsiniz.
Configure SSL iletişim kutusunda şifrelenecek uç noktayı seçin ve ardından OK öğesine tıklayın.
2. Adım: Sertifikayı indirin
SSL şifrelemeyi etkinleştirdikten sonra, bir istemci PolarDB kümesine uzaktan bağlandığında veritabanının kimliğini doğrulamak için PolarDB kümesinin sertifikasını indirebilirsiniz.
SSL Settings sekmesinde, istediğiniz uç noktanın bölümünde Download öğesine tıklayın.
-
İndirilen dosya, aşağıdaki üç dosyayı içeren sıkıştırılmış bir pakettir:
.p7b dosyası: Windows'ta CA sertifikasını içe aktarmak için kullanılır.
.pem dosyası: Diğer sistemlerde veya uygulamalarda CA sertifikasını içe aktarmak için kullanılır.
-
.jks dosyası: CA sertifika zincirini Java uygulamalarına içe aktarmak için kullanılan, parolası
apsaradbolan bir Java truststore sertifika dosyasıdır.NotJava'da JKS sertifika dosyasını kullanırken JDK 7 ve JDK 8 için varsayılan güvenlik yapılandırmasını değiştirmeniz gerekir. PolarDB veritabanına bağlanan sunucuda
jre/lib/security/java.securitydosyasını düzenleyin ve aşağıdaki iki ayarı değiştirin:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024JDK güvenlik ayarlarını değiştirmezseniz aşağıdakine benzer bir hata oluşabilir. Bu ve diğer ilgili hatalar genellikle yanlış Java güvenlik ayarlarından kaynaklanır.
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
3. Adım: Bir istemciden PolarDB'ye bağlanın
SSL şifrelemeyi etkinleştirdikten sonra, bir istemci ile PolarDB kümesi arasındaki bir bağlantının şifrelenip şifrelenmediği istemcinin türüne ve ayarlarına bağlıdır. Örneğin, bazı istemciler varsayılan olarak şifrelenmiş bağlantılar kullanabilir. Şifrelenmiş bir bağlantı kurmak ve PolarDB kümesinin kimliğini doğrulamak için istemcinin ayarlarını veya kodunu değiştirebilirsiniz.
PolarDB kümelerinde oturum açmak ve bunları yönetmek için Data Management (DMS) kullanıyorsanız bağlantıyı şifrelemeniz gerekmez.
CLI
MySQL istemcilerinin 5.7.11 ve sonraki sürümleri için, bağlantı komutunda SSL şifrelemeyi yapılandırmak amacıyla --ssl-mode seçeneğini kullanabilirsiniz.
--ssl-mode=DISABLED: Bağlantı şifrelenmez.--ssl-mode=PREFERREDveya--ssl-modeseçeneğinin belirtilmemesi: Şifrelenmiş bir bağlantı kurmaya çalışır. Başarısız olursa bunun yerine şifrelenmemiş bir bağlantı kurar.--ssl-mode=REQUIRED: Şifrelenmiş bir bağlantı gerektirir. Şifrelenmiş bir bağlantı kurulamazsa bağlantı başarısız olur.--ssl-mode=VERIFY_CA: Şifrelenmiş bir bağlantı gerektirir ve sunucu sertifikasını yerel CA sertifikasına göre doğrular.--ssl-mode=VERIFY_IDENTITY: Şifrelenmiş bir bağlantı gerektirir, sunucu sertifikasını yerel CA sertifikasına göre doğrular ve sunucunun ana bilgisayar adının veya IP adresinin bağlantı için kullanılanla eşleştiğini kontrol eder.
Örnek 1: Başarısız olması durumunda şifrelenmemiş bağlantıya geri dönerek şifrelenmiş bir bağlantı kurmayı deneyin.
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED
Örnek 2: Şifrelenmiş bir bağlantı gerektirin ve sunucu sertifikasını doğrulayın.
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={CA certificate path}/ApsaraDB-CA-Chain.pem
{endpoint},{username}ve{CA certificate path}değerlerini gerçek değerlerinizle değiştirin.--ssl-modeseçeneği hakkında daha fazla bilgi için MySQL belgelerine bakın.
MySQL Workbench
MySQL Workbench'i açın ve Database > Manage Connections öğesini seçin.
PolarDB uç noktasını, kullanıcı adını ve parolayı girin.
-
SSL sekmesinde Use SSL parametresini ayarlayın, SSL CA File değerini indirilen PEM formatlı CA sertifikasının yoluna ayarlayın ve ardından Test Connection veya OK öğesine tıklayın.
NotUse SSL seçeneklerinin açıklaması için komut satırı bağlantıları için --ssl-mode seçeneğinin açıklamasına bakın.
Application code
Java
Connector/J (mysql-connector-java), MySQL için resmi JDBC sürücüsüdür. Bu örnekte bağımlılık olarak mysql-connector-java sürüm 8.0.19 kullanılmaktadır.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
Aşağıdaki örnek kod, SSL modunu belirtmek için sslMode özelliğini kullanır. Bu özellik, mysql-connector-java'nın 8.0.13 ve sonraki sürümlerinde desteklenir. Daha eski bir sürüm kullanıyorsanız bunun yerine useSSL, requireSSL ve verifyServerCertificate özelliklerini kullanmanız gerekir. Ayrıntılar için MySQL belgelerine bakın.
Örnek kod:
package com.example.ssltest;
import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Main {
public static void main(String[] args) {
Connection conn = null;
MysqlDataSource mysqlDS=null;
try{
mysqlDS = new MysqlDataSource();
// Set SslMode as needed. For options, see the command-line connection instructions.
mysqlDS.setSslMode("VERIFY_IDENTITY");
// The truststore contains the CA certificate. Set the truststore type to JKS.
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// Replace the path after file:/ with the path to your ApsaraDB-CA-Chain.jks file.
mysqlDS.setTrustCertificateKeyStoreUrl("file://{CA certificate path}/ApsaraDB-CA-Chain.jks");
// The password for the downloaded JKS file is apsaradb and cannot be changed.
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// Your database endpoint
mysqlDS.setServerName("your_polardb_host");
// Your database port
mysqlDS.setPort(3306);
// Your database username
mysqlDS.setUser("your_username");
// Your database password
mysqlDS.setPassword("your_password");
// Your database name
mysqlDS.setDatabaseName("your_database");
System.out.println("Attempting to connect to the database...");
conn = mysqlDS.getConnection();
System.out.println("Database connection successful!");
// Use try-with-resources to ensure Statement and ResultSet are automatically closed.
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// Check if the query returned a result.
if (rs.next()) {
// Get the result from the first column and print it.
String dbVersion = rs.getString(1);
System.out.println("Database version: " + dbVersion);
} else {
System.out.println("Failed to retrieve database version information.");
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Python
# Install pymysql
# pip install pymysql
import pymysql
# --- Configure your database information ---
db_config = {
'host': 'your_polardb_host', # Your cluster endpoint
'user': 'your_username', # Your username
'password': 'your_password', # Your password
'database': 'your_database', # The database you want to connect to
'port': 3306
}
# --- Configure SSL information ---
ssl_args = {
'ca': '{CA certificate path}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# Establish a connection, passing ssl parameters
print("Attempting to connect to MySQL with SSL...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("SSL connection successful!")
with connection.cursor() as cursor:
# Execute a simple query to verify the connection
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"Database version: {version[0]}")
except pymysql.MySQLError as e:
# Printing SSL-related errors can be helpful for troubleshooting
print(f"Connection failed: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("Database connection closed.")
Sysbench benchmarking
Sertifikayı indirin ve paketi açın.
-
Sysbench'i yapılandırın:
sysbenchkomutuna--mysql-ssl=onekleyin.Sysbench 1.0.x kullanıyorsanız .pem dosyasının adını cacert.pem olarak değiştirin ve
sysbenchkomutunu çalıştırdığınız dizine yerleştirin. Sysbench'in bu sürümü SSL sertifika adını cacert.pem olarak sabit kodlar.Sysbench 1.1.x kullanıyorsanız SSL sertifikasını Sysbench 1.0.x'teki gibi yapılandırabilirsiniz. Alternatif olarak,
--mysql-ssl-caparametresini kullanarak PEM dosyasının yolunu belirtebilirsiniz.
-
Karşılaştırma yöntemleri için bkz. Performans test yöntemi (OLTP).
NotKarşılaştırma sırasında MySQL İstemci sürümünüzün PolarDB kümenizin MySQL sürümüyle eşleştiğinden emin olun.
4. Adım: Şifrelenmiş bağlantıyı doğrulayın
SSL protokolünün birden çok sürümü vardır. PolarDB şu anda TLSv1.2 ve sonraki sürümleri destekler. SSL el sıkışması sırasında istemci ve PolarDB sunucusu, TLS sürümü, şifre paketi ve oturum anahtarı dahil olmak üzere bağlantı parametrelerini müzakere eder. Şifre paketlerinin ayrıntılı listesi için OpenSSL resmi web sitesini ziyaret edin.
SSL için yapılandırılmış bir istemci kullanarak PolarDB kümesine bağlanın.
-
Aşağıdaki SQL sorgusunu yürütün:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+ -
Sonucu analiz edin:
ValuesütunuDHE-RSA-AES256-GCM-SHA384gibi boş olmayan bir değer döndürürse mevcut bağlantı şifrelenir.Valuesütunu boşsa mevcut bağlantı şifrelenmez. İstemci yapılandırmanızı kontrol edin.
Bakım ve yönetim
Korunan uç noktayı değiştirin
SSL tarafından korunan uç noktayı değiştirmek için o uç noktanın bölümünde Configure SSL öğesine tıklayın.
Korunan uç noktayı değiştirmek SSL sertifikasını otomatik olarak günceller ve kümenizi yeniden başlatır. Bu işlemi yoğun olmayan saatlerde yapın.
Sertifika geçerlilik süresini güncelleyin
SSL uç noktasını değiştirirseniz veya sertifikanın süresi dolmak üzereyse sertifikanın geçerlilik süresini manuel olarak güncellemeniz gerekir.
Sertifika geçerlilik süresini güncellemek kümeyi yeniden başlatır. Bu kesinti süresini buna göre planlayın.
SSL Settings sekmesinde Update Validity Period öğesine tıklayın.
Görüntülenen iletişim kutusunda OK öğesine tıklayın.
Geçerlilik süresi güncellendikten sonra yeni sertifikayı indirin ve yapılandırın.
Bir SSL sertifikasının geçerlilik süresi uzatılamaz. Yalnızca geçerlilik süresini güncelleyebilir ve ardından sertifikayı yeniden indirip yapılandırabilirsiniz. Sertifikanın süresi her dolduğunda manuel olarak güncellemekten kaçınmak için otomatik sertifika rotasyonunu etkinleştirmenizi öneririz. Daha fazla bilgi için bkz. Otomatik sertifika rotasyonunu etkinleştirme.
Otomatik sertifika rotasyonunu etkinleştirin
Otomatik sertifika rotasyonunu etkinleştirirseniz PolarDB süresinin dolmasına 10 gün kala kümenin bakım penceresi sırasında sertifikayı otomatik olarak yeniler.
Otomatik sertifika yenileme kümeyi yeniden başlatır. Bu işlemi yoğun olmayan saatlerde yapmanızı öneririz.
SSL Settings sekmesinde Advanced Settings öğesine tıklayın.
Advanced Settings iletişim kutusunda otomatik sertifika rotasyonunu etkinleştirin ve Confirm öğesine tıklayın.
SSL şifrelemeyi devre dışı bırakın
SSL şifrelemeyi devre dışı bırakmak kümenizi yeniden başlatır. Bu işlemi yoğun olmayan saatlerde yapmanızı öneririz.
SSL Settings sekmesinde SSL şifrelemeyi devre dışı bırakmak için SSL Status anahtarını kapatın.
Görüntülenen iletişim kutusunda OK öğesine tıklayın.
İlgili API'ler
|
|
|
|
|
|
|
|