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

ApsaraDB RDS:SSL経由でApsaraDB RDS for MySQLインスタンスに接続する

最終更新日:Aug 27, 2024

このトピックでは、SSL暗号化機能を設定した後、MySQL CLIとJava Database Connectivity (JDBC) を使用してApsaraDB RDS for MySQLインスタンスに接続する方法について説明します。

前提条件

  • RDSインスタンスのSSL暗号化機能が有効になっています。 機能が無効になっている場合は、「SSL暗号化機能の設定」の手順に基づいて機能を有効にします。

  • 次のファイルが取得されます。

    • サーバーCA証明書。 証明書の取得方法の詳細については、「SSL暗号化機能の設定」をご参照ください。

手順

クラウド証明書を使用したRDSインスタンスへの接続

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

CLI

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

説明

MySQL 5.7.11より前のバージョンのMySQLおよび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 {Endpoint of the RDS instance} -u {Account of the RDS instance} -p --ssl-mode=PREFERRED

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

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

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

MySQLワークベンチ

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

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

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

    説明

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

DMS

RDSインスタンスをデータ管理 (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();
            //You can specify the sslMode property based on your business requirements. For more information about the options for this property, see the description in the "CLI" section of this topic. 
            mysqlDS.setSslMode("VERIFY_IDENTITY");
          
            //The truststore is used to store the CA certificate. In this example, the truststore type is set to JKS. 
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            //You must replace the content following file:/ with the actual path to your ApsaraDB-CA-Chain.jks file. 
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            //The password of the downloaded JKS file is fixed as apsaradb. 
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
          
            //The endpoint of your RDS instance.
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
            //The port number of your RDS instance.
            mysqlDS.setPort(3306);
            //The username of the account that is used to connect to your RDS instance.
            mysqlDS.setUser("xxxxxx");
            //The password of the account that is used to connect to your RDS instance.
            mysqlDS.setPassword("xxxxxx");
            //The name of the database that you want to connect on your RDS instance.
            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をインストールします。

pymysqlのインポート

トライ:
    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.exeかわいい ('select version()')
    data = cursor.fetchone()
    print('Database version:', data[0])
    cursor.close()
eとしてpymysql.Errorを除いて:
    プリント (e) 

カスタム証明書を使用したRDSインスタンスへの接続

CLI

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

説明

MySQL 5.7.11より前のバージョンのMySQLおよび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証明書へのパス}
説明
  • ビジネス要件に基づいて、RDSインスタンスのエンドポイントRDSインスタンスのアカウント、およびカスタムCA証明書へのパスパラメーターを設定する必要があります。

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

MySQLワークベンチ

  1. MySQL Workbenchを開き、データベース> 接続の管理を選択します。

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

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

説明

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

DMS

RDSインスタンスをDMSに登録するときに、[Enable 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> 
重要

カスタム証明書を使用する場合は、次の操作を実行してJKSファイルを作成する必要があります。

  1. OpenSSLを使用して、クライアント証明書と秘密鍵をPKCS#12ファイルに変換します。 keytoolユーティリティは、PEM形式の秘密鍵または証明書をサポートしていません。

    openssl pkcs12 -export -in {Custom CA certificate} -inkey {Private key of the custom CA certificate} -out keystore.p12 -name ganyang -CAfile {Custom CA certificate}
    # Enter the password that is used to connect to the RDS instance.
    Enter Encryption Password:
    Verifying - Enter Encryption Password:
  2. keytoolを使用して、新しく作成したPKCS#12ファイルを新しいJKSファイルにインポートします。

    keytool -importkeystore -deststorepass JKS-password -destkeypass key-password -destkeystore keystore.jks -deststoretype pkcs12 -srckeystore keystore.p12 -srcstoretype pkcs12 -srcstorepass P12-password -alias your-alias

    パラメーターの説明:

    -deststorepass: the password specified for the JKS file. 
    -destkeypass: the password specified for the key in the JKS file. 
    -destkeystore: the JKS file that you want to create or an existing JKS file. 
    -deststoretype: The format of the file that you want to create is PKCS#12. 
    -srckeystore: the previously created PKCS#12 files. 
    -srcstoretype: The format of the source file is PKCS#12. 
    -srcstorepass: the password that is used to protect the PKCS#12 files. 
    -alias: the alias specified for the client certificate and private key of the user.

  3. 作成したJKSファイルを取得します。 keytoolベースのインポートが成功すると、実行ディレクトリにkeystore.jksファイルがあります。

説明

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();
            //You can specify the sslMode property based on your business requirements. For more information about the options for this property, see the description in the "CLI" section of this topic. 
            mysqlDS.setSslMode("VERIFY_IDENTITY");

            // The following code provides an example on how to use the JKS file of a cloud certificate. If a custom certificate is used, you must replace the related parameters with the path and password of the JKS file that is generated by using the custom certificate.
            //The truststore is used to store the CA certificate. In this example, the truststore type is set to JKS. 
            mysqlDS.setTrustCertificateKeyStoreType("JKS");
            //You must replace the content following file:/ with the actual path to your ApsaraDB-CA-Chain.jks file.
            mysqlDS.setTrustCertificateKeyStoreUrl("file:/D:\\ApsaraDB-CA-Chain\\ApsaraDB-CA-Chain.jks");
            //The password of the downloaded JKS file is fixed as apsaradb. 
            mysqlDS.setTrustCertificateKeyStorePassword("apsaradb");
          
            //The endpoint of your RDS instance.
            mysqlDS.setServerName("rm-xxxxxx.mysql.rds.aliyuncs.com");
            //The port number of your RDS instance.
            mysqlDS.setPort(3306);
            //The username of the account that is used to connect to your RDS instance.
            mysqlDS.setUser("xxxxxx");
            //The password of the account that is used to connect to your RDS instance.
            mysqlDS.setPassword("xxxxxx");
            //The name of the database that you want to connect on your RDS instance.
            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をインストールします。

pymysqlのインポート

トライ:
    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.exeかわいい ('select version()')
    data = cursor.fetchone()
    print('Database version:', data[0])
    cursor.close()
eとしてpymysql.Errorを除いて:
    プリント (e)