すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:SSL 暗号化機能を構成する

最終更新日:Mar 20, 2025

ApsaraDB RDS for MySQL の SSL 暗号化機能は、転送中のデータを暗号化するために使用されます。 この機能は、接続のセキュリティとコンプライアンスが求められるシナリオに適しています。 デフォルトでは、ApsaraDB RDS for MySQL インスタンスでは SSL 暗号化機能は無効になっています。

前提条件

  • RDS インスタンスは、SSL 暗号化機能を使用するために、次の MySQL バージョンと RDS エディションのいずれかを実行します。

    • RDS High-Availability Edition の MySQL 8.0、MySQL 5.7、または MySQL 5.6

    • RDS Cluster Edition の MySQL 8.0 または MySQL 5.7

    • RDS Basic Edition の MySQL 8.0 または MySQL 5.7

  • RDS インスタンスが [強制 SSL 暗号化] 機能を使用するための次の要件を満たしている必要があります。

    • RDS インスタンスは、RDS Basic Edition、RDS High-Availability Edition、または RDS Cluster Edition で MySQL 5.7 または MySQL 8.0 を実行している。

    • RDS インスタンスは、20241130 以降のマイナーエンジンバージョンを実行している。

説明
  • 強制 SSL 暗号化機能を使用するには、チケットを送信して、Alibaba Cloud アカウントをホワイトリストに追加するよう申請する必要があります。

  • RDS インスタンスの [基本情報] ページに移動して、上記の情報を確認できます。

  • RDS Basic Edition を実行しているサーバーレス以外の RDS インスタンスの課金方法をサーバーレスに変更する場合は、SSL 暗号化機能を再度有効にする必要があります。

  • RDS インスタンスが上記の要件を満たしているにもかかわらず、SSL 暗号化機能がサポートされていないことを示すエラーメッセージが引き続き表示される場合は、RDS インスタンスのマイナーエンジンバージョンを更新できます。 詳細については、「マイナーエンジンバージョンを更新する」をご参照ください。

機能の説明

SSL 暗号化機能を使用すると、ApsaraDB RDS for MySQL インスタンスとクライアント間で転送されるデータを暗号化できます。 これにより、データが第三者によって監視、傍受、または改ざんされるのを防ぎます。

SSL 暗号化機能を有効にした後、SSL 暗号化接続または非 SSL 暗号化接続を介してクライアントを RDS インスタンスに接続できます。 強制 SSL 暗号化機能を有効にした後、SSL 暗号化接続を介してのみクライアントまたはプロキシを RDS インスタンスに接続できます。

RDS インスタンスの SSL 暗号化機能を有効にすると、サーバー証明書、公開鍵、および秘密鍵が生成されます。

暗号化接続が確立されると、システムは公開鍵を含むサーバー証明書をクライアントに送信します。 クライアントは、受信した公開鍵を使用して、生成された対称鍵を暗号化します。 次に、システムは秘密鍵を使用して対称鍵を復号化します。 このようにして、RDS インスタンスとクライアントは対称鍵を使用してデータの暗号化と復号化を行います。 これにより、通信の機密性が確保されます。 また、クライアントは認証局 (CA) 証明書を使用して受信したサーバー証明書を検証し、RDS インスタンスの ID を確認して中間者攻撃を防ぐこともできます。

次の表に、さまざまな証明書の SSL 暗号化の構成と利点の比較を示します。

項目

クラウド証明書

カスタム証明書

取得方法

Alibaba Cloud によって発行されます。

認証局 (CA) によって発行されるか、自己署名証明書から発行されます。

有効期間

365 日

カスタマイズ可能

保護されるエンドポイントの数

1

1

目的

SSL 暗号化を有効にし、クライアントがサーバーを認証するために使用されます。

SSL 暗号化を有効にし、クライアントがサーバーを認証するために使用されます。

影響

  • SSL 暗号化機能を有効化、無効化、または SSL 証明書を更新すると、RDS インスタンスが再起動し、プライマリ/セカンダリスイッチオーバーがトリガーされます。 これらの操作は、オフピーク時に実行することをお勧めします。 アプリケーションが RDS インスタンスに自動的に再接続するように構成されていることを確認してください。 アプリケーションのコードを変更して、自動再接続を有効にすることができます。 MySQL 5.6 または MySQL 5.7 を実行している RDS インスタンスの SSL 証明書を更新すると、RDS インスタンスが再起動します。 MySQL 8.0 を実行している RDS インスタンスの SSL 証明書を更新しても、RDS インスタンスは再起動しません。 インスタンスのスイッチオーバーの影響については、「インスタンスのスイッチオーバーの影響」をご参照ください。

  • RDS インスタンスの SSL 暗号化機能を有効にすると、暗号化接続によって CPU 使用率が大幅に増加します。 RDS インスタンスのパブリックエンドポイントへの接続を暗号化する必要がある場合にのみ、SSL 暗号化機能を有効にすることをお勧めします。

  • RDS インスタンスの強制 SSL 暗号化機能を有効にした後、SSL 暗号化接続を介してのみクライアントまたはデータベースプロキシを RDS インスタンスに接続できます。 非 SSL 暗号化接続は拒否されます。

TLS バージョン

Transport Layer Security (TLS) は、インターネット通信のデータプライバシーとセキュリティを確保するために広く使用されているトランスポート層セキュリティプロトコルです。 複数の TLS バージョンが利用可能です。 ApsaraDB RDS for MySQL インスタンスでサポートされている TLS バージョンは、RDS インスタンスのメジャーエンジンバージョンによって異なります。

メジャーエンジンバージョン

TLSv1.0

TLSv1.1

TLSv1.2

TLSv1.3

8.0

サポートされています

サポートされています

サポートされています

サポートされています

(20221231 以降のマイナーエンジンバージョンから)

5.7

サポートされています

サポートされています

サポートされています

サポートされていません

5.6

サポートされています

サポートされています

サポートされています

サポートされていません

説明

TLS 1.0 および TLS 1.1 は、2021 年に Internet Engineering Task Force (IETF) によって廃止されました。 データセキュリティを確保するために、TLSv1.2 以降を使用することをお勧めします。 詳細については、RFC 8996 を参照してください。

ssl_cipher 構成

ApsaraDB RDS for MySQL は、OpenSSL for TLS を使用して安全な通信を提供します。 OpenSSL は、MySQL 5.7 およびマイナーエンジンバージョン 20230831 を実行する RDS インスタンス、および MySQL 8.0 およびマイナーエンジンバージョン 20230930 を実行する RDS インスタンスでは OpenSSL 3.0 にアップグレードされています。 デフォルトでは、OpenSSL 3.0 は TLSv1.0 および TLSv1.1 を介した通信をサポートしていません。 詳細については、OpenSSL のドキュメントを参照してください。

ApsaraDB RDS for MySQL でのデータの互換性を確保するために、ssl_cipher パラメータの値は "ALL:@SECLEVEL=0" に変更され、TLSv1.0 および TLSv1.1 がサポートされています。

ワークロードで TLSv1.2 以降のみを使用する場合は、セキュリティを強化するために、ApsaraDB RDS コンソールで ssl_cipher パラメータを空の文字列 ("") に設定することをお勧めします。

手順 1: RDS インスタンスの SSL 暗号化機能を有効にする

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. 表示されるページの [SSL] タブで、[無効] の左側にあるスイッチをオンにします。

    説明

    [SSL] タブが表示されない場合は、RDS インスタンスが [前提条件] のすべての要件を満たしているかどうかを確認する必要があります。

  4. 表示されるダイアログボックスで、保護するエンドポイントを選択し、[OK] をクリックします。

    ビジネス要件に基づいて、内部エンドポイントまたはパブリックエンドポイントへの接続を暗号化できます。 1 つのエンドポイントへの接続のみを暗号化できます。

  5. オプション。 [強制暗号化] をオンにして、強制 SSL 暗号化機能を有効にします。

    重要
    • 強制 SSL 暗号化機能は、RDS インスタンスがマイナーエンジンバージョン 20241130 以降の MySQL 5.7 または MySQL 8.0 を実行している場合にのみ有効にできます。

    • RDS インスタンスの強制 SSL 暗号化機能を有効にした後、SSL 暗号化接続を介してのみクライアントまたはデータベースプロキシを RDS インスタンスに接続できます。 非 SSL 暗号化接続は拒否されます。

  6. SSL 暗号化機能を有効にするプロセスが完了するまで、約 1 分間待ちます。 ページを更新して、機能のステータスを表示できます。

手順 2: CA 証明書をダウンロードする

クラウド証明書を構成すると、RDS インスタンスはダウンロード用のサーバー CA 証明書を提供します。 クライアントから RDS インスタンスに接続するときに、サーバー CA 証明書を使用して RDS インスタンスを認証できます。

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。

  2. 表示されるページの左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。 [SSL] タブで、[CA 証明書をダウンロード] をクリックします。

    ダウンロードしたファイルは、次のファイルを含むパッケージです。

    • PEM ファイル: ほとんどのシナリオに適しています。

    • JKS ファイル: Java アプリケーションに適しています。 ほとんどの場合、PEM 形式の CA 証明書ファイルをトラストストアにインポートして JKS ファイルに変換する必要があります。 Java アプリケーションで JKS ファイルを使用できます。 ファイルのパスワードは apsaradb です。

    • P7B ファイル: PKCS#7 形式の証明書ファイルを必要とする少数の Windows アプリケーションに適しています。

手順 3: データベースクライアントから RDS インスタンスに接続する

SSL 暗号化機能を有効にした後、クライアントのタイプと設定によって、クライアントと RDS インスタンス間の接続を暗号化するかどうかが決まります。 たとえば、クライアントから RDS インスタンスへの接続はデフォルトで暗号化される場合があります。 クライアントの設定またはコードを変更して、接続の暗号化を有効にし、RDS インスタンスの ID を検証できます。

重要

RDS インスタンスの強制 SSL 暗号化機能を有効にした場合、SSL 暗号化接続を介してのみクライアントまたはデータベースプロキシを RDS インスタンスに接続できます。

CLI

MySQL 5.7.11 以降を実行するクライアントの場合、接続コマンドに --ssl-mode オプションを追加して SSL 暗号化機能を構成できます。

説明

MySQL 5.7.11 より前のバージョンを実行するクライアントと MariaDB クライアントの場合、--ssl や --ssl-verify-server-cert などのオプションを使用して SSL 暗号化機能を構成できます。 詳細については、MariaDB および MySQL の公式ドキュメントを参照してください。

  • --ssl-mode オプションが DISABLED に設定されている場合、接続は暗号化されません。

  • --ssl-mode オプションが PREFERRED に設定されているか、オプションが使用されていない場合、システムは暗号化接続の確立を試みます。 試行が失敗した場合、暗号化されていない接続が確立されます。

  • --ssl-mode オプションが REQUIRED に設定されている場合、暗号化接続のみが許可されます。 接続を暗号化できない場合、接続の確立は失敗します。

  • --ssl-mode オプションが VERIFY_CA に設定されている場合、暗号化接続のみが許可され、オンプレミスデバイスの CA 証明書を使用してサーバー証明書が有効かどうかを確認する必要があります。

  • --ssl-mode オプションが VERIFY_IDENTITY に設定されている場合、暗号化接続のみが許可され、オンプレミスデバイスの CA 証明書を使用してサーバー証明書が有効かどうか、およびサーバー証明書のホスト名または IP アドレスが実際の接続のホスト名または IP アドレスと一致するかどうかを確認する必要があります。

例 1: システムは暗号化接続の確立を試みます。 試行が失敗した場合、暗号化されていない接続が確立されます。

mysql -h {RDS インスタンスのエンドポイント} -u {RDS インスタンスのアカウント} -p --ssl-mode=PREFERRED

例 2: 暗号化接続が必要であり、サーバー証明書の有効性を検証する必要があります。

mysql -h {RDS インスタンスのエンドポイント} -u {RDS インスタンスのアカウント} -p --ssl-mode=VERIFY_CA --ssl-ca={CA 証明書へのパス}/ApsaraDB-CA-Chain.pem
説明
  • ビジネス要件に基づいて、RDS インスタンスのエンドポイント、RDS インスタンスのアカウント、および CA 証明書へのパスパラメータを構成する必要があります。

  • --ssl-mode オプションの詳細については、MySQL のドキュメントを参照してください。

MySQL Workbench

  1. MySQL Workbench を起動し、[データベース] > [接続の管理] を選択します。

  2. RDS インスタンスへの接続に使用するアカウントのユーザー名とパスワード、およびエンドポイントを入力します。

  3. [SSL] タブで、[SSL を使用する] パラメータを構成し、[SSL CA ファイル] パラメータをダウンロードした PEM 形式の CA 証明書に設定して、[接続テスト] または [OK] をクリックします。

    [SSL を使用する] パラメータのオプションの詳細については、このトピックの「CLI」セクションの --ssl-mode オプションの説明を参照してください。

DMS

RDS インスタンスを Data Management (DMS) に登録するときに、[SSL を有効にする] パラメータを構成できます。 詳細については、「Alibaba Cloud データベースインスタンスを登録する」をご参照ください。

インスタンスを右クリックし、[編集] を選択して、[詳細情報] セクションで [SSL を有効にする] パラメータを構成することもできます。

アプリケーションコード

Java

MySQL 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.aliyun.sample;

import com.mysql.cj.jdbc.MysqlDataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class Sample {

    public static void main(String[] args) {

        Connection conn = null;
        MysqlDataSource mysqlDS=null;

        try{
            mysqlDS = new MysqlDataSource();
            // ビジネス要件に基づいて sslMode プロパティを指定できます。 このプロパティのオプションの詳細については、このトピックの「CLI」セクションの説明を参照してください。
            mysqlDS.setSslMode("VERIFY_IDENTITY");
          
            // トラストストアは、CA 証明書を格納するために使用されます。 この例では、トラストストアのタイプは JKS に設定されています。
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            // file:/ に続くコンテンツを、ApsaraDB-CA-Chain.jks ファイルの実際のパスに置き換える必要があります。
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            // ダウンロードした JKS ファイルのパスワードは、apsaradb に固定されています。
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
          
            // RDS インスタンスのエンドポイント。
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
            // RDS インスタンスのポート番号。
            mysqlDS.setPort(3306);
            // RDS インスタンスへの接続に使用するアカウントのユーザー名。
            mysqlDS.setUser("xxxxxx");
            // RDS インスタンスへの接続に使用するアカウントのパスワード。
            mysqlDS.setPassword("xxxxxx");
            // RDS インスタンスで接続するデータベースの名前。
            mysqlDS.setDatabaseName("xxxxxx");

            conn = mysqlDS.getConnection();

        }catch(Exception e){
            e.printStackTrace();
        } finally {
            try {
                if (conn != null)
                    conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

}

Python

# pip install pymysql コマンドを実行して、PyMySQL をインストールします。

import pymysql

try:
    ssl_config = {"ca":"/path/to/path/ca.crt", "mode":"VERIFY_CA"}   # ca を証明書へのパスに、mode を使用する SSL モードに設定する必要があります。
    conn = pymysql.connect(host='******.mysql.rds.aliyuncs.com', user='*****', passwd='******', db='*****', ssl=ssl_config)
    cursor = conn.cursor()
    cursor.execute('select version()')
    data = cursor.fetchone()
    print('データベースバージョン:', data[0])
    cursor.close()
except pymysql.Error as e:
    print(e)

次のステップ

クラウド証明書を更新する

RDS インスタンスのクラウド証明書の有効期間は 1 年です。 証明書の有効期限が切れた後にクラウド証明書を更新しないと、暗号化接続を使用するクライアントは RDS インスタンスに接続できません。 クラウド証明書の有効期限が近づくと、Alibaba Cloud からメールまたは内部メッセージで通知されます。

[スケジュールイベント] ダイアログボックスで、クラウド証明書を更新する時間を指定できます。 証明書は、指定された期間内に自動的に更新されます。 詳細については、「スケジュールイベントを管理する」をご参照ください。 また、次の操作を実行して、サーバー証明書を手動で更新することもできます。

説明
  • クラウド証明書が自動的に更新された後、暗号化接続を使用するクライアントは、CA 証明書を再度ダウンロードまたは構成することなくデータベースに接続できます。

  • カスタム証明書の更新方法の詳細については、「作成したカスタム証明書を更新する」をご参照ください。

重要

MySQL 8.0 を実行している RDS インスタンスの証明書を更新しても、インスタンスは再起動しません。 MySQL 5.6 または MySQL 5.7 を実行している RDS インスタンスの証明書を更新すると、インスタンスが再起動します。

  1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。

  2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

  3. 表示されるページで、[SSL] タブをクリックします。 次に、[有効期限の更新] をクリックします。

接続の暗号化に関する詳細を表示する

  • 現在のセッションで使用されている暗号スイートを表示します。 戻り値が空でない場合、現在の接続は暗号化されています。

    SHOW STATUS LIKE 'Ssl_cipher';
  • 現在のセッションで使用されている SSL または TLS バージョンを表示します。

    SHOW STATUS LIKE 'Ssl_version';
  • MySQL コマンドラインツールを使用している場合は、\s コマンドを実行して、現在の接続が暗号化されているかどうかを確認できます。 現在の接続が暗号化されている場合、コマンド出力の SSL 値は、現在の接続で使用されている暗号スイートを示します。

暗号化接続を強制的に使用する

サーバーを構成して暗号化接続のみを使用する

詳細については、「手順 1: RDS インスタンスの SSL 暗号化機能を有効にする」をご参照ください。

説明

暗号化接続の強制使用は、ホワイトリストに追加されているユーザーのみが利用できます。 この機能を構成するには、チケットを送信して、Alibaba Cloud アカウントをホワイトリストに追加してください。

クライアントを構成して暗号化接続のみを使用する

この例では、コマンドラインツールが使用されています。 接続コマンドで、SSL モードを REQUIRED、VERIFY_CA、または VERIFY_IDENTITY に設定して、暗号化接続のみを使用します。 接続を暗号化できない場合、接続の確立は失敗します。

特定のユーザーを構成して暗号化接続のみを使用する

この例では、testuser ユーザーは暗号化接続のみを使用するように構成されています。

ALTER USER 'testuser'@'%' REQUIRE SSL;

CA 証明書のコンテンツを表示する

次のコマンドを実行して、CA 証明書のコンテンツを表示します。

openssl x509 -in {CA 証明書へのパス}/ApsaraDB-CA-Chain.pem -text

SSL 暗号化機能を無効にする

重要

SSL 暗号化機能を無効にすると、RDS インスタンスが再起動します。 この場合、ワークロードへの影響を軽減するために、システムはプライマリ/セカンダリスイッチオーバーをトリガーします。 オフピーク時に SSL 暗号化機能を無効にすることをお勧めします。

    1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDS インスタンスを見つけて、インスタンスの ID をクリックします。

    2. 左側のナビゲーションウィンドウで、セキュリティコントロール をクリックします。

    3. 表示されるページで、[SSL] タブをクリックします。

    4. [SSL 暗号化] をオフにします。 表示されるメッセージで、[OK] をクリックします。

    FAQ

    機能

    • サーバーとクライアントの ID を検証する相互認証を実装するにはどうすればよいですか?

      ApsaraDB RDS for MySQL では、SSL ハンドシェイク中にクライアント ID を検証できません。 ホワイトリストとアカウント管理を使用してアクセス制御を実装できます。

    • 読み書き分離エンドポイントの SSL 暗号化を構成するにはどうすればよいですか?

      詳細については、「データベースプロキシエンドポイントの SSL 暗号化を構成する」をご参照ください。

    トラブルシューティング

    Java アプリケーションからの接続で、「Javax.net.ssl.SSLHandshakeException: DHPublicKey does not comply to algorithm constraints」というエラーメッセージが報告されます。

    JDK 7 または JDK 8 で JDK セキュリティ設定項目を変更しないと、このエラーメッセージまたはその他の同様のエラーが報告されます。

    この問題を解決するには、アプリケーションがデプロイされているホストの jre/lib/security/Java.security ファイルで、次の JDK セキュリティ構成を使用します。

    jdk.tls.disabledAlgorithms=SSLv3, RC4, DH keySize < 224
    jdk.certpath.disabledAlgorithms=MD2, RSA keySize < 1024

    Java アプリケーションからの接続で、「javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)」というエラーメッセージが報告されます。

    MySQL Connector/J 8.0.18 以前を使用して MySQL 5.6 または MySQL 5.7 を実行する RDS インスタンスに接続する場合、互換性の理由により TLS 1.2 以降は無効になっています。 この問題を解決するには、次のいずれかの方法を使用できます。

    • MySQL Connector/J 8.0.19 以降を使用します。

    • RDS インスタンスのメジャーエンジンバージョンを MySQL 8.0 にアップグレードします。

    • コードで TLS バージョンを指定します。 たとえば、enabledTLSProtocols または tlsVersions を TLSv1.2 に設定します。

    関連操作