転送中のデータのセキュリティを向上させるため、Secure Sockets Layer (SSL) 暗号化を有効化し、クライアントに SSL CA 証明書をインストールできます。SSL はトランスポートレイヤーでネットワーク接続を暗号化し、データのセキュリティと整合性を強化しますが、接続の応答時間が増加する可能性があります。
背景情報
Internet Engineering Task Force (IETF) は SSL 3.0 を標準化し、Transport Layer Security (TLS) と改名しました。TLS が現代の標準ですが、このトピックでは一般的な用語である「SSL」を使用して TLS 暗号化を指します。
利用シーン
データベースへのパブリックアクセス:クライアントがパブリックインターネット経由で PolarDB クラスターに接続する場合、データリンクは信頼できないネットワークにさらされるため、中間者攻撃を防ぐために暗号化する必要があります。
セキュリティおよびコンプライアンス要件の満たし:PCI-DSS や GDPR などの特定の業界またはデータ保護規制では、転送中の機密データの暗号化が求められます。
クロスネットワーク通信:ハイブリッドクラウドまたはマルチ VPC アーキテクチャでは、ネットワーク境界を越えるデータフローを SSL で暗号化し、機密性と整合性を確保する必要があります。
制限事項
単一エンドポイント暗号化制限: 各クラスターでは、一度に 1 つのエンドポイントに対してのみ SSL 暗号化をサポートします。クラスターにパブリックエンドポイントと内部エンドポイントの両方が存在する場合、ユースケースに基づいて暗号化するエンドポイントを選択する必要があります。両方のエンドポイントを同時に暗号化することはできません。
暗号化するエンドポイントの選択に関する推奨事項:
パブリックインターネット経由でデータベースにアクセスする場合は、データ転送中のセキュリティリスクを軽減するために パブリックエンドポイント の SSL 暗号化を有効にしてください。
VPC 内からのみデータベースにアクセスし、セキュリティおよびコンプライアンス要件を満たす必要がある場合は、内部エンドポイント の SSL 暗号化を有効にしてください。
エンドポイント長制限: SSL 暗号化が有効になっている PolarDB クラスターのエンドポイントは 64 文字未満である必要があります。エンドポイントの変更方法については、「データベースプロキシの設定」をご参照ください。
注意事項
証明書の有効期間: SSL 証明書の有効期間は 1 年です。接続障害を回避するため、現在の証明書の有効期限が切れる前に、証明書の有効期間を更新し、新しい CA 証明書でクライアントを再構成する必要があります。
サービス中断: SSL 暗号化の有効化または無効化、証明書の有効期間の更新、保護対象エンドポイントの変更、および自動証明書ローテーションの有効化などの操作により、クラスターが再起動されます。これらの操作はオフピーク時間帯に実行し、アプリケーションが自動的に再接続できることを確認してください。
操作手順
ステップ 1:SSL 暗号化の有効化
SSL 暗号化を有効化するとクラスターが再起動されます。この操作はオフピーク時間帯に実行してください。
PolarDB コンソール にログインします。左側のナビゲーションウィンドウで クラスター をクリックします。リージョン を選択し、クラスター ID をクリックします。
左側のナビゲーションウィンドウで を選択します。
SSL の設定 タブで、SSL の横にあるスライダーをクリックして SSL 暗号化を有効にします。
説明プライマリエンドポイント、クラスターエンドポイント、カスタムエンドポイントに対して SSL を構成できます。
SSL の設定 ダイアログボックスで、暗号化するエンドポイントを選択し、OK をクリックします。
ステップ 2:証明書のダウンロード
SSL 暗号化を有効化した後、クライアントがリモートで PolarDB クラスターに接続する際にデータベースの真正性を検証できるよう、PolarDB クラスターの証明書をダウンロードできます。
SSL の設定 タブで、対応するエンドポイントの 証明書のダウンロード をクリックします。
ダウンロードされたファイルは、以下の 3 つのファイルを含む圧縮アーカイブです。
.p7b ファイル:Windows で CA 証明書をインポートする際に使用します。
.pem ファイル:他のオペレーティングシステムまたはアプリケーションで CA 証明書をインポートする際に使用します。
.jks ファイル:Java アプリケーションで CA 証明書チェーンをインポートするための Java トラストストアファイルです。パスワードは固定で
apsaradbです。説明Java で JKS 証明書ファイルを使用する場合、JDK 7 および JDK 8 のデフォルトのセキュリティ構成を変更する必要があります。PolarDB データベースに接続するサーバー上で、
jre/lib/security/java.securityファイル内の次の 2 つの設定を更新してください。jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224 jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024これらの構成を変更しない場合、次のようなエラーが発生します。同様の他のエラーも、通常は Java のセキュリティ構成の問題によって引き起こされます。
javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints
手順 3: 接続先: PolarDB
SSL 暗号化を有効化した後、クライアントと PolarDB クラスター間の接続が実際に暗号化されるかどうかは、クライアントの種類と設定に依存します。たとえば、一部のクライアントはデフォルトで暗号化接続を使用する場合があります。クライアントの設定またはコードを変更して、暗号化接続が確立され、PolarDB クラスターの ID が検証されることを確認できます。
Data Management (DMS) を使用して PolarDB クラスターにログインおよび管理する場合は、接続を暗号化する必要はありません。
CLI
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 アドレスが接続時に指定されたものと一致するかを確認します。
例 1:暗号化接続を試行し、失敗した場合は暗号化されていない接続にフォールバックします。
mysql -h {endpoint} -u {username} -p --ssl-mode=PREFERRED例 2:暗号化接続を必須とし、信頼できる CA に対してサーバーの証明書を検証します。
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 を開き、Database > Manage Connections を選択します。
PolarDB クラスターのエンドポイント、ユーザー名、パスワードを入力します。
SSL タブで、Use SSL のオプションを選択し、SSL CA File にダウンロードした PEM 証明書のパスを指定してから、Test Connection または OK をクリックします。
説明Use SSL のオプションの詳細については、コマンドライン接続の --ssl-mode の説明をご参照ください。
アプリケーションコード
Java
Connector/J (mysql-connector-java) は MySQL が提供する公式 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_endpoint");
// データベースのポート
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_endpoint', # ご利用のクラスターのエンドポイント
'user': 'your_username', # ユーザー名
'password': 'your_password', # パスワード
'database': 'your_database', # 接続先のデータベース
'port': 3306
}
# --- SSL 情報を設定 ---
ssl_args = {
'ca': '{path_to_ca_certificate}/ApsaraDB-CA-Chain.pem',
# サーバーの証明書を指定された CA に対して検証します。
'ssl_verify_cert': True
}
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 を構成します。
--mysql-ssl=onフラグをsysbenchコマンドラインに追加します。Sysbench 1.0.x を使用する場合は、
sysbenchコマンドを実行するディレクトリ内で .pem ファイルを cacert.pem にリネームする必要があります。これは、Sysbench が SSL 証明書の名前を cacert.pem としてハードコードしているためです。Sysbench 1.1.x を使用する場合は、Sysbench 1.0.x の構成に従うか、
--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 エンドポイントを変更した場合や証明書の有効期限が近づいている場合は、証明書の有効期間を手動で更新する必要があります。以下に、有効期間を更新する手順を示します。
証明書の有効期間を更新するとクラスターが再起動されます。この操作はオフピーク時間帯にスケジュールしてください。
自動証明書ローテーションの有効化
自動証明書ローテーションを有効化すると、証明書の有効期限が切れる 10 日前以内に、PolarDB がクラスターのメンテナンスウィンドウ中に証明書を自動的に更新します。
自動証明書更新によりクラスターが再起動されます。この操作はオフピーク時間帯に実行してください。
SSL の設定 タブで、詳細設定 をクリックします。
詳細設定 ダイアログボックスで、自動証明書ローテーションを有効化し、確定 をクリックします。

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