tencent cloud

TDSQL-C for MySQL

SSL暗号化の設定

Download
Focus Mode
Font Size
Last updated: 2026-01-29 18:16:20

SSL暗号化の概要

SSL(Secure Sockets Layer)認証は、クライアントからクラウドデータベースサーバ側への認証であり、ユーザーとサーバーに対して認証を行います。SSL暗号化を有効にすると、CA証明書を取得でき、CA証明書をサーバ側にアップロードします。クライアントがデータベースにアクセスする際に、SSLプロトコルが有効になり、クライアントとデータベースサーバ側の間にSSLセキュリティチャネルが確立されます。これにより、データ情報の暗号化された伝送を実現し、データが伝送中に傍受、改ざん、盗聴されるのを防止し、双方が伝達する情報のセキュリティを保証します。
SSLプロトコルは信頼性の高いトランスポート層プロトコル(TCP)上に構築されることを要求します。その利点は、アプリケーション層プロトコルから独立していることにあり、高レイヤーのアプリケーション層プロトコル(例:HTTP、FTP、TELNETなど)はSSLプロトコル上で透過的に構築可能です。SSLプロトコルは、アプリケーション層プロトコルによる通信開始前に、暗号化アルゴリズム・通信鍵のネゴシエーションおよびサーバー認証を完了します。これ以降、アプリケーション層プロトコルで送信されるデータはすべて暗号化され、通信の機密性が保証されます。
説明:
SSL暗号化を有効にした後、一時停止中のServerlessインスタンスにSSL経由で初めて接続する際にエラーが発生する場合があります。エラーが発生した場合は、しばらくしてから再試行してください。

背景

非暗号化方式でデータベースに接続する場合、ネットワーク上で伝送されるすべての情報は平文となるため、不正なユーザーによる盗聴・改ざん・なりすましの3大リスクが存在します。SSLプロトコルはこれら3大リスクを解決するために設計されたもので、理論上、以下の効果が期待できます:
情報は暗号化されて伝送されるため、第三者が盗聴することはできません。
検証メカニズムを備えており、一旦改ざんされると、通信双方は直ちに検知します。
身分証明書を装備し、なりすましを防止します。
TDSQL-C for MySQLは、リンクセキュリティを強化するためにSSL暗号化を有効化することをサポートしており、必要なアプリケーションサービスへのSSL CA証明書のダウンロードおよびインストールもサポートします。
注意:
SSL暗号化はデータ自体を保護するものではなく、データベースとサーバー間のトラフィックのセキュリティを確保するものです。トランスポート層でネットワーク接続を暗号化することで、通信データのセキュリティと完全性を向上させますが、同時にネットワーク接続の応答時間が増加します。

前提条件

インスタンスのバージョンはMySQL5.7/8.0です。
インスタンス形態はプリセットリソースまたはServerlessです。

サポートバージョン

TDSQL-C for MySQLは、セキュアな接続を実現するためにOpenSSLを使用しています。TDSQL-C for MySQLは、トランスポート層セキュリティ(TLS)プロトコルバージョン1.0、1.1、1.2および1.3をサポートしています。TLSのサポートはMySQLのバージョンに依存します。TLSをサポートするMySQLバージョンは次表の通りです。
MySQL バージョン
TLS1.0
TLS1.1
TLS1.2
TLS1.3
MySQL 5.7
非対応
非対応
対応
対応
MySQL 8.0
対応
対応
対応
対応

SSL 暗号化を有効化する

1. TDSQL-C for MySQLコンソールにログインし、クラスタリストでクラスタIDをクリックして、クラスタ管理ページに遷移します。
2. データセキュリティページを選択し、SSLで有効化する読み書きインスタンスまたは読み取り専用インスタンスを選択します。

3. この機能の状態はデフォルトでオフになっており、スイッチをオンに切り替えてから確定をクリックすると、SSL暗号化が有効になります。

注意:
SSLを有効化する過程中、お客様のデータベースインスタンスが再起動され、SSL Certificatesがロードされます。業務に再接続メカニズムが備わっていることをご確認ください。
4. ダウンロードをクリックし、SSL CA証明書をダウンロードします(証明書の有効期間は20年です)。 ダウンロードされるファイルは圧縮ファイル(TencentDB-SSL-CA.zip)であり、以下のファイルが含まれます:
p7bファイル:WindowsシステムでCA証明書をインポートするために使用されます。
jksファイル:Javaにおけるtruststoreおよびkeystoreのストレージファイルであり、パスワードは一律tencentdbです。JavaプログラムでCA証明書チェーンをインポートするために使用されます。
pemファイル:他のシステムやアプリケーションでCA証明書をインポートするために使用されます。

SSL CA 証明書を設定する

SSL暗号化を有効にした後、クライアントでクラウドデータベースに接続する際には、SSL CA証明書の設定が必要です。以下ではNavicatを例として、SSL CA証明書のインストール方法をご紹介します。その他のアプリケーションやクライアントについては、対応する製品の使用説明書を参照してください。
説明:
SSL暗号化を有効化または無効化するたびに、その証明書が新たに生成されます。
1. Navicatを起動します。
2. 対応するデータベース上でマウスを右クリックし、接続の編集を選択します。
3. SSLタブを選択し、.pem形式のCA証明書のパスを選択します。対応する設定を完了した後、確定をクリックします。
説明:
connection is being used エラーが発生した場合、前のセッションが切断されていない可能性があります。Navicatを終了してから再試行してください。
4. 対応するデータベースをダブルクリックし、正常に接続できるかどうかをテストします。

SSL暗号化を無効にします。

1. TDSQL-C for MySQLコンソールにログインし、クラスタリストでクラスタIDをクリックして、クラスタ管理ページに遷移します。
2. クラスタ管理ページでデータセキュリティタブを選択し、SSLの下で無効化する読み書きインスタンスまたは読み取り専用インスタンスを選択します。
3. 状態の後のスイッチをオフに設定し、ポップアップ表示されるダイアログボックスで確定をクリックします。
説明:
SSLを無効化する過程では、データベースインスタンスが再起動され、SSL Certificatesがアンインストールされます。業務に再接続メカニズムが備わっていることをご確認ください。

MySQLコマンドラインクライアントを使用して、SSL暗号化が有効化されたインスタンスに接続します。

お使いのデータベースのバージョンが異なる場合、MySQLクライアントの接続コマンドパラメータが異なります。まず以下のコマンドで使用中のデータベースのバージョンを確認し、その後、後続の手順に従ってインスタンスに接続します。
SELECT VERSION();

クエリ結果サンプル:
+--------------+
| VERSION() |
+--------------+
| 8.0.30-txsql |
+--------------+
1 row in set (0.00 sec)
1. TDSQL-C for MySQLコンソールからSSL CA証明書をダウンロードします。操作については、SSL暗号化を有効化するを参照してください。
2. MySQLコマンドラインクライアントを使用し、コマンドでSSL暗号化が有効化されたインスタンスに接続します。
クライアントのデータベースバージョンがMySQL 5.7/8.0の場合のコマンドで、以下のコマンドを使用してインスタンスに接続します。
mysql -h <IPアドレス> --ssl-ca=<ca証明書パス> --ssl-mode=REQUIRED -P <ポート番号> -u <ユーザー名> -p
他のSSLモード(例:VERIFY_CAやVERIFY_IDENTITY)を使用する場合は、以下のコマンドを使用してインスタンスに接続します。
mysql -h <IPアドレス> --ssl-ca=<ca証明書パス> --ssl-mode=VERIFY_CA -P <ポート番号> -u <ユーザー名> -p
説明:
--ssl-modeパラメータはSSLモードを表します。通常、REQUIREDモードとVERIFY_CAモードの使用が推奨されます。これらはMySQLクライアントがSSL/TLSプロトコルを使用してMySQLサーバーに接続すること、およびMySQLサーバーのSSL/TLS証明書の検証を要求します。一方、VERIFY_IDENTITYモードでは、MySQLサーバーのSSL/TLS証明書の検証に加え、クライアントが使用するホスト名がサーバー証明書の識別情報と一致することも要求されます。一致しない場合、MySQLクライアントはMySQLサーバーへの接続を拒否します。
3. システムのプロンプトに従い、対応するユーザー名のパスワードを入力します。


一般的なプログラムによるSSL有効化インスタンス接続のコード例

PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "<ダウンロードされた証明書のパス>", NULL, NULL);
mysqli_real_connect($conn, '<データベースアクセスアドレス>', '<データベースアクセスユーザー名>', '<データベースアクセスパスワード>', '<指定アクセスデータベース>', <アクセスポート>, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (Using PDO)
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '<ダウンロードされた証明書のパス>'
);
$db = new PDO('mysql:host=<データベースアクセスアドレス>;port=<アクセスポート>;dbname='<指定アクセスデータベース>', '<データベースアクセスユーザー名>', '<データベースアクセスパスワード>', $options);
Java (MySQL Connector for Java)
# generate truststore and keystore in code

String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\\\s+"));

# use the generated keystore and truststore

System.setProperty("javax.net.ssl.keyStore","<ダウンロードされた証明書のパス>");
System.setProperty("javax.net.ssl.keyStorePassword","tencentdb");
System.setProperty("javax.net.ssl.trustStore","<ダウンロードされた証明書のパス>");
System.setProperty("javax.net.ssl.trustStorePassword","tencentdb");

url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", '<データベースアクセスアドレス>', '<指定アクセスデータベース>');
properties.setProperty("user", '<データベースアクセスユーザー名>');
properties.setProperty("password", '<データベースアクセスパスワード>');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "<データベースアクセスアドレス>",
UserID = "<データベースアクセスユーザー名>",
Password = "<データベースアクセスパスワード>",
Database = "<指定アクセスデータベース>",
SslMode = MySqlSslMode.VerifyCA,
SslCa = "<ダウンロードされた証明書>",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Python (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='<データベースアクセスユーザー名>',
password='<データベースアクセスパスワード>',
database='<指定アクセスデータベース>',
host='<データベースアクセスアドレス>',
ssl_ca='<ダウンロードされた証明書のパス>')
except mysql.connector.Error as err:
print(err)
Python (PyMySQL)
conn = pymysql.connect(user='<データベースアクセスユーザー名>',
password='<データベースアクセスパスワード>',
database='<指定アクセスデータベース>',
host='<データベースアクセスアドレス>',
ssl={'ca': '<ダウンロードされた証明書のパス>'}
Django (PyMySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '<指定アクセスデータベース>',
'USER': '<データベースアクセスユーザー名>',
'PASSWORD': '<データベースアクセスパスワード>',
'HOST': '<データベースアクセスアドレス>',
'PORT': '<アクセスポート>',
'OPTIONS': {
'ssl': {'ca': '<ダウンロードされた証明書のパス>'}
}
}
}
Node.js
var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("<ダウンロードされた証明書のパス>", "utf8")];
var conn=mysql.createConnection({
host:"<データベースアクセスアドレス>",
user:"<データベースアクセスユーザー名>",
password:"<データベースアクセスパスワード>",
database:"<指定アクセスデータベース>",
port:<アクセスポート>,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("<ダウンロードされた証明書のパス>")
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:<アクセスポート>)/%s?allowNativePasswords=true&tls=custom","<データベースアクセスユーザー名>" , "<データベースアクセスパスワード>", "<データベースアクセスアドレス>", '<指定アクセスデータベース>')
db, _ := sql.Open("mysql", connectionString)
Ruby
client = Mysql2::Client.new(
:host => '<データベースアクセスアドレス>',
:username => '<データベースアクセスユーザー名>',
:password => '<データベースアクセスパスワード>',
:database => '<指定アクセスデータベース>',
:sslca => '<ダウンロードされた証明書のパス>'
)

関連するAPI

API
説明
本インターフェース(CloseSSL)はSSL暗号化を無効化するために使用されます。

Help and Support

Was this page helpful?

Help us improve! Rate your documentation experience in 5 mins.

Feedback