このトピックでは、SSL 暗号化機能を構成した後に、MySQL CLI と Java Database Connectivity (JDBC) を使用して ApsaraDB RDS for MySQL インスタンスに接続する方法について説明します。
前提条件
RDS インスタンスで SSL 暗号化機能が有効になっていること。機能が無効になっている場合は、「クラウド証明書を使用して SSL 暗号化を有効にする」の説明に従って機能を有効にしてください。
サーバー CA 証明書を取得済みであること。証明書の取得方法については、「手順 2: CA 証明書をダウンロードする」または「カスタム証明書を使用して SSL 暗号化を有効にする」をご参照ください。
手順
クラウド証明書を使用して RDS インスタンスに接続する
SSL 暗号化機能を有効にした後、クライアントと RDS インスタンス間の接続を暗号化するかどうかは、クライアントの種類と設定によって決まります。たとえば、クライアントから RDS インスタンスへの接続はデフォルトで暗号化される場合があります。クライアントの設定またはコードを変更して、接続の暗号化を有効にし、RDS インスタンスの ID を検証できます。
強制 SSL 暗号化機能は、MySQL 5.7 および MySQL 8.0、マイナーエンジンバージョン 20241130 以降を実行する RDS インスタンスでのみサポートされています。インスタンスに対して強制 SSL 暗号化機能を有効にすると、クライアントは SSL 接続を介してのみインスタンスと通信できます。
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
MySQL Workbench を起動し、 を選択します。
RDS インスタンスへの接続に使用するアカウントのユーザー名とパスワード、およびエンドポイントを入力します。
[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('Database version:', data[0])
cursor.close()
except pymysql.Error as e:
print(e)カスタム証明書を使用して 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 アドレスと一致するかどうかを確認する必要があります。
例:
システムは暗号化された接続を確立しようとします。試行が失敗した場合、暗号化されていない接続が確立されます。
mysql -h {RDS インスタンスのエンドポイント} -u {RDS インスタンスのアカウント} -p --ssl-mode=PREFERRED暗号化された接続が必要であり、サーバー証明書の有効性を検証する必要があります。
mysql -h {RDS インスタンスのエンドポイント} -u {RDS インスタンスのアカウント} -p --ssl-mode=VERIFY_CA --ssl-ca={カスタム CA 証明書へのパス}
RDS インスタンスのエンドポイント、RDS インスタンスのアカウント、およびカスタム CA 証明書へのパスのパラメーターをビジネス要件に基づいて設定する必要があります。--ssl-mode オプションの詳細については、「MySQL ドキュメント」をご参照ください。
MySQL Workbench
MySQL Workbench を開き、[データベース] > [接続の管理] を選択します。
RDS インスタンスへの接続に使用するアカウントのユーザー名とパスワード、およびエンドポイントを入力します。
[SSL] タブで、[SSL を使用する] および [SSL CA ファイル] パラメーターを設定し、[接続テスト] または [OK] をクリックします。クラウド証明書を使用する場合は、[SSL CA ファイル] パラメーターをダウンロードした PEM 形式の CA 証明書に設定します。カスタム証明書を使用する場合は、[SSL CA ファイル] パラメーターをカスタム CA 証明書に設定します。
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>カスタム証明書を使用する場合は、次の操作を実行して JKS ファイルを作成する必要があります。
OpenSSL を使用して、クライアント証明書と秘密鍵を PKCS#12 ファイルに変換します。keytool ユーティリティは、PEM 形式の秘密鍵または証明書をサポートしていません。
openssl pkcs12 -export -in {カスタム CA 証明書} -inkey {カスタム CA 証明書の秘密鍵} -out keystore.p12 -name ganyang -CAfile {カスタム CA 証明書} # RDS インスタンスへの接続に使用するパスワードを入力します。 Enter Encryption Password: Verifying - Enter Encryption Password: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: JKS ファイルに指定されたパスワード。 -destkeypass: JKS ファイルのキーに指定されたパスワード。 -destkeystore: 作成する JKS ファイル、または既存の JKS ファイル。 -deststoretype: 作成するファイルの形式は PKCS#12 です。 -srckeystore: 以前に作成された PKCS#12 ファイル。 -srcstoretype: ソースファイルの形式は PKCS#12 です。 -srcstorepass: PKCS#12 ファイルを保護するために使用されるパスワード。 -alias: ユーザーのクライアント証明書と秘密鍵に指定されたエイリアス。作成された 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();
// ビジネス要件に基づいて sslMode プロパティを指定できます。このプロパティのオプションの詳細については、このトピックの「CLI」セクションの説明をご参照ください。
mysqlDS.setSslMode("VERIFY_IDENTITY");
// 次のコードは、クラウド証明書の JKS ファイルを使用する方法の例を示しています。カスタム証明書を使用する場合は、関連するパラメーターを、カスタム証明書を使用して生成された JKS ファイルのパスとパスワードに置き換える必要があります。
// トラストストアは 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('Database version:', data[0])
cursor.close()
except pymysql.Error as e:
print(e)