データリンクのセキュリティを向上させるために、SSL (Secure Sockets Layer) 暗号化を有効にし、アプリケーションサービスに SSL CA 証明書をインストールできます。SSL はトランスポート層でネットワーク接続を暗号化します。これにより、データ通信のセキュリティと完全性が向上しますが、ネットワーク接続の応答時間も増加します。
背景情報
SSL は、Web サーバーとブラウザ間の暗号化通信をサポートするために Netscape 社によって開発されました。SSL は、RC4、MD5、RSA などのさまざまな暗号化アルゴリズムをサポートしています。IETF (Internet Engineering Task Force) は SSL 3.0 を TLS (Transport Layer Security) にアップグレードしました。しかし、業界では依然として「SSL 暗号化」という用語が使用されています。このトピックでは、SSL 暗号化は TLS 暗号化を指します。
利用シーン
インターネット経由でのデータベースへのアクセス:クライアントがインターネット経由で PolarDB クラスターに接続する場合、データリンクは信頼できないネットワークに公開されます。中間者攻撃を防ぐために暗号化が必要です。
セキュリティコンプライアンス要件への対応:PCI-DSS や GDPR などの特定の業界またはデータ保護規制では、転送中の機密データを暗号化する必要があります。
ネットワーク環境をまたぐ通信:ハイブリッドクラウドやマルチ VPC アーキテクチャでは、ネットワークの境界を越えるデータストリームは、その機密性と完全性を確保するために SSL 暗号化が必要です。
注意事項
証明書の有効期間:SSL 証明書の有効期間は 1 年です。有効期限が切れる前に証明書を更新し、速やかに CA 証明書を再ダウンロードして設定する必要があります。そうしないと、暗号化接続を使用するクライアントアプリケーションが接続に失敗します。
サービスの中断:SSL 暗号化の有効化または無効化、証明書有効期間の更新、保護対象エンドポイントの変更、および証明書の自動ローテーションはクラスターを再起動します。これらの操作はオフピーク時間帯に実行し、アプリケーションに自動再接続メカニズムがあることを確認してください。再接続メカニズムはアプリケーションコードで設定する必要があります。
エンドポイントの長さの制限:SSL 暗号化が有効になっている PolarDB クラスターのエンドポイントは、64 文字未満である必要があります。エンドポイントの変更方法の詳細については、「データベースプロキシの設定」をご参照ください。
操作手順
ステップ 1:SSL 暗号化の有効化
SSL 暗号化を有効にすると、クラスターが再起動します。この操作はオフピーク時間帯に実行することを推奨します。
PolarDB コンソールにログインします。左上のコーナーで、クラスターがデプロイされているリージョンを選択します。左側のナビゲーションウィンドウで、クラスター をクリックします。次に、クラスターの ID をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
SSL の設定 タブで、SSL の横にあるスライダーをクリックして SSL 暗号化を有効にします。
説明プライマリエンドポイント、クラスターエンドポイント、およびカスタムエンドポイントに対して SSL を設定できます。
SSL の設定 ダイアログボックスで、SSL 暗号化を有効にするエンドポイントを選択し、OK をクリックします。
説明必要に応じて、プライベートエンドポイントまたはパブリックエンドポイントを暗号化することを選択できます。ただし、一度に暗号化できるエンドポイントは 1 つだけです。

ステップ 2:証明書のダウンロード
SSL 暗号化を有効にした後、PolarDB クラスターの証明書をダウンロードできます。この証明書は、クライアントが PolarDB クラスターにリモート接続する際に、データベースの信頼性を検証するために使用されます。
SSL の設定 タブで、対応するエンドポイントセクションの 証明書のダウンロード をクリックします。

ダウンロードされたファイルは圧縮パッケージで、以下の 3 つのファイルが含まれています:
.p7b ファイル:Windows オペレーティングシステムで CA 証明書をインポートするために使用されます。
.pem ファイル:他のオペレーティングシステムやアプリケーションで CA 証明書をインポートするために使用されます。
.jks ファイル:Java 用のトラストストア証明書ファイルです。パスワードは `apsaradb` です。このファイルは、CA 証明書チェーンを Java アプリケーションにインポートするために使用されます。
説明Java で JKS 証明書ファイルを使用する場合、JDK 7 および JDK 8 のデフォルトの JDK セキュリティ設定を変更する必要があります。PolarDB データベースに接続するサーバーで、
jre/lib/security/java.securityファイル内の次の 2 つの設定を変更します:jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024JDK セキュリティ設定を変更しない場合、次のエラーが報告されます。他の同様のエラーも、通常は Java セキュリティ設定が正しくないことが原因です。
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
ステップ 3:クライアントから PolarDB クラスターへの接続
SSL 暗号化を有効にした後、クライアントと PolarDB クラスター間の接続が SSL 暗号化を使用するかどうかは、クライアントの種類と設定によって異なります。たとえば、一部のクライアントはデフォルトで暗号化接続を使用する場合があります。クライアントの設定やコードを変更して、暗号化接続を確立し、PolarDB クラスターの ID を検証できます。
DMS を使用して PolarDB クラスターにログインして管理する場合、データリンクを暗号化する必要はありません。
コマンドライン
MySQL クライアントバージョン 5.7.11 以降では、接続コマンドに --ssl-mode オプションを追加して SSL 暗号化を設定します。
--ssl-mode=DISABLED:接続は暗号化されません。--ssl-mode=PREFERREDまたは--ssl-modeオプションなし:暗号化接続の確立を試みます。暗号化接続を確立できない場合は、暗号化されていない接続が使用されます。--ssl-mode=REQUIRED:暗号化接続が必要です。暗号化接続を確立できない場合、接続は失敗します。--ssl-mode=VERIFY_CA:暗号化接続が必要であり、ローカルの CA 証明書を使用してサーバー証明書の有効性を検証します。--ssl-mode=VERIFY_IDENTITY:暗号化接続が必要です。ローカルの CA 証明書を使用してサーバー証明書の有効性を検証し、サーバー証明書のホスト名または IP アドレスが実際の接続のホスト名または IP アドレスと一致するかを検証します。
例 1:暗号化接続の確立を試みます。暗号化接続を確立できない場合は、暗号化されていない接続を使用します。
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED例 2:暗号化接続を要求し、サーバー証明書の有効性を検証します。
mysql -h {endpoint} -u {username} -p --ssl-mode=VERIFY_CA --ssl-ca={path_to_CA_certificate}/ApsaraDB-CA-Chain.pem上記の例では、
{endpoint}、{username}、および{path_to_CA_certificate}を実際の値に置き換えてください。--ssl-modeオプションの詳細については、MySQL の公式ドキュメントをご参照ください。
MySQL Workbench
MySQL Workbench を開き、 を選択します。
PolarDB のエンドポイント、ユーザー名、パスワードを入力します。
[SSL] タブで、[Use SSL] パラメーターを設定します。[SSL CA File] パラメーターには、ダウンロードした PEM 形式の CA 証明書へのパスを指定します。次に、[Test Connection] または [OK] をクリックします。
説明[Use SSL] パラメーターのオプションについては、コマンドライン接続の --ssl-mode オプションの説明をご参照ください。
アプリケーションコード
Java
Connector/J (mysql-connector-java) は、MySQL が提供する公式の Java Database Connectivity (JDBC) ドライバーです。この例では、依存関係として mysql-connector-java バージョン 8.0.19 を使用します。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>以下のサンプルコードでは、sslMode プロパティを使用して SSL モードを指定しています。このプロパティは、mysql-connector-java バージョン 8.0.13 以降でサポートされています。それ以前のバージョンを使用している場合は、代わりに useSSL、requireSSL、および verifyServerCertificate プロパティを使用する必要があります。詳細については、MySQL ドキュメントをご参照ください。
サンプルコード:
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();
// 必要に応じて SslMode を設定します。このプロパティのオプションの詳細については、コマンドライン接続方法をご参照ください。
mysqlDS.setSslMode("VERIFY_IDENTITY");
// トラストストアは CA 証明書を格納するために使用されます。トラストストアのタイプを JKS に設定します。
mysqlDS.setTrustCertificateKeyStoreType("JKS");
// file:// の後のパスを、ご自身の ApsaraDB-CA-Chain.jks ファイルのパスに置き換えます。
mysqlDS.setTrustCertificateKeyStoreUrl("file://{path_to_CA_certificate}/ApsaraDB-CA-Chain.jks");
// ダウンロードした JKS ファイルのパスワードは apsaradb であり、変更できません。
mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
// ご利用のデータベースエンドポイント
mysqlDS.setServerName("your_polardb_host");
// ご利用のデータベースポート
mysqlDS.setPort(3306);
// ご利用のデータベースユーザー名
mysqlDS.setUser("your_username");
// ご利用のデータベースパスワード
mysqlDS.setPassword("your_password");
// ご利用のデータベース名
mysqlDS.setDatabaseName("your_database");
System.out.println("データベースへの接続を試みています...");
conn = mysqlDS.getConnection();
System.out.println("データベース接続に成功しました!");
// try-with-resources を使用して、Statement と ResultSet が自動的にクローズされるようにします
try (Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT VERSION()")) {
// クエリが結果を返したかどうかを確認します
if (rs.next()) {
// 最初の列から結果を取得して出力します
String dbVersion = rs.getString(1);
System.out.println("データベースのバージョン: " + dbVersion);
} else {
System.out.println("データベースのバージョン情報の取得に失敗しました。");
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}Python
# pymysql をインストールします
# pip install pymysql
import pymysql
# --- データベース情報を設定します ---
db_config = {
'host': 'your_polardb_host', # ご利用のクラスターエンドポイント
'user': 'your_username', # ご利用のユーザー名
'password': 'your_password', # ご利用のパスワード
'database': 'your_database', # 接続したいデータベース
'port': 3306
}
# --- SSL 情報を設定します ---
ssl_args = {
'ca': '{path_to_CA_certificate}/ApsaraDB-CA-Chain.pem',
'mode': 'VERIFY_CA'
}
try:
# 接続を確立し、ssl パラメーターを渡します
print("SSL を使用して MySQL への接続を試みています...")
connection = pymysql.connect(**db_config, ssl=ssl_args)
print("SSL 接続に成功しました!")
with connection.cursor() as cursor:
# 簡単なクエリを実行して接続を検証します
cursor.execute("SELECT VERSION()")
version = cursor.fetchone()
print(f"データベースのバージョン: {version[0]}")
except pymysql.MySQLError as e:
# SSL 関連のエラーを出力すると役立ちます
print(f"接続に失敗しました: {e}")
finally:
if 'connection' in locals() and connection.open:
connection.close()
print("データベース接続が閉じられました。")Sysbench ストレステストの設定
証明書をダウンロードして解凍します。
Sysbench を設定します:
sysbenchコマンドラインに--mysql-ssl=onを追加します。Sysbench 1.0.x を使用している場合、.pem ファイルを `cacert.pem` に名前変更し、
sysbenchコマンドを実行するディレクトリに配置します。これは、このバージョンの Sysbench では SSL 証明書の名前が cacert.pem としてハードコーディングされているためです。Sysbench 1.1.x を使用している場合、Sysbench 1.0.x と同じ方法で Sysbench の SSL 証明書を設定できます。また、
--mysql-ssl-caパラメーターを使用して PEM ファイルのパスを渡すこともできます。
ストレステストの方法の詳細については、「パフォーマンステスト方法 (OLTP)」をご参照ください。
説明ストレステスト中は、MySQL クライアントのバージョンが PolarDB の MySQL バージョンと一致していることを確認してください。
ステップ 4:接続が暗号化されていることの確認
SSL プロトコルには多くのバージョンがあります。PolarDB は現在、TLSv1.2 以降のバージョンをサポートしています。SSL ハンドシェイク中に、クライアントと PolarDB サーバーは、TLS バージョン、暗号スイート、セッションキーなどの接続パラメーターをネゴシエートします。暗号スイートの詳細なリストについては、OpenSSL 公式サイトをご参照ください。
SSL 設定済みのクライアントを使用して PolarDB クラスターに接続します。
次の SQL クエリを実行します:
SHOW STATUS LIKE 'ssl_cipher'; +---------------+---------------------------+ | Variable_name | Value | +---------------+---------------------------+ | Ssl_cipher | DHE-RSA-AES256-GCM-SHA384 | +---------------+---------------------------+分析:
Value列が空でない値 (例:DHE-RSA-AES256-GCM-SHA384) を返す場合、現在の接続は暗号化されています。Value列が空の場合、現在の接続は暗号化されていません。クライアントの設定が正しいか確認してください。
メンテナンスと管理
保護対象エンドポイントの変更
SSL で保護されたエンドポイントを変更するには、対応するエンドポイントセクションの SSL の設定 をクリックします。
保護対象のエンドポイントを変更すると、SSL 証明書が自動的に更新され、クラスターが再起動します。この操作はオフピーク時間帯に実行することを推奨します。

証明書有効期間の更新
SSL エンドポイントを変更した場合や、証明書の有効期限が近づいている場合は、手動で証明書を更新する必要があります。このセクションでは、証明書の更新方法について説明します。
証明書の有効期間を更新すると、クラスターが再起動します。ビジネスへの影響を最小限に抑えるため、この操作はオフピーク時間帯に実行することを推奨します。
証明書自動ローテーションの有効化
証明書の自動ローテーションを有効にすると、PolarDB は証明書の有効期限が切れる 10 日前のクラスターのメンテナンスウィンドウ内で証明書を自動的に更新します。
証明書の自動更新はクラスターを再起動します。この操作はオフピーク時間帯に実行することを推奨します。
SSL の設定 タブで、詳細設定 をクリックします。
詳細設定 ダイアログボックスで、証明書の自動ローテーションを有効にし、確定 をクリックします。

SSL 暗号化の無効化
SSL 暗号化を無効にすると、クラスターが再起動します。この操作はオフピーク時間帯に実行することを推奨します。
SSL の設定 タブで、SSL の横にあるスライダーをクリックして SSL 暗号化を無効にします。
表示されるダイアログボックスで、OK をクリックします。
関連 API
API | 説明 |
PolarDB クラスターの SSL 設定を照会します。 | |
PolarDB クラスターの SSL 暗号化を有効または無効にするか、CA 証明書を更新します。 |
