tencent cloud

TDSQL-C for MySQL

動向とお知らせ
製品アップデート
製品お知らせ
初心者ガイド
製品概要
プロダクト概要
製品の強み
適用シーン
製品アーキテクチャ
製品仕様
インスタンスタイプ
製品機能一覧
データベースのバージョン
リージョンとアベイラビリティゾーン
基本概念
利用制限
利用ガイドの推奨事項
自社開発カーネル
カーネル概要
カーネルバージョンのアップデート情報
カーネル最適化バージョン
機能特性
パフォーマンス関連機能
セキュリティカテゴリの機能
安定性機能
分析エンジン特性
カーネル問題のチェックと修復
購入ガイド
課金概要
製品価格
クラスタを作成する
構成変更説明
未払いについての説明
継続支払いの説明
返金ポリシー
従量課金から年/月単位サブスクリプションへの変換
従量課金からServerlessへの変換
付加価値サービスの課金説明
料金請求書の確認
クイックスタート
データベース監査
概要
監査インスタンス一覧
監査サービスを有効化する
監査ログの確認
ログ配信
事後アラーム設定
監査ルールの変更
監査サービスを変更する
監査サービスを停止する
監査ルールテンプレート
監査タスクの照会
サブユーザーへのデータベース監査利用権限付与
Serverlessサービス
Serverless入門
サーバーレス版クラスタの作成と管理
伸縮性スケーリング管理ツール
Serverlessリソースパック
マルチAZデプロイ
設定を変更する
よくあるご質問
Serverlessコスト見積ツール
操作ガイド
操作概要
コンソールでのクラスタページビューの切り替え
データベース接続
インスタンス管理
設定を変更する
インスタンス形態管理
クラスタ管理
読み取り専用インスタンス管理 
データベースプロキシ
アカウント管理
DMC
DMC(データベース管理ツール)
パラメータ設定
マルチAZデプロイ
グローバルデータベース
バックアップとリストア
操作ログ
データマイグレーション
パラレルクエリ
列ストレージインデックス CSI
分析エンジン
データベースセキュリティと暗号化
モニタリングとアラーム
SQLの基本操作
以下のコマンドを実行して、TDSQL-C for MySQLに接続してログインします
Tag
実践チュートリアル
TDSQL-C for MySQL データベース監査の等級保護実践
非InnoDBテーブル問題のワンクリック移行検出処理方法
DTSによるデータベースバージョンのアップグレード MySQL 5.7から8.0へ
TDSQL-C for MySQL 使用規範
新版コンソール
データベースプロキシの複数接続アドレスによる複数ROグループの実現
データベースプロキシのメリット
ストレージの課金モードの選び方
DTSによるリモートディザスタリカバリの構築
クラスタ用VPCの作成
データ復旧の方法
CPU使用率の高騰問題の解決方法
サブユーザーへの監視データ閲覧権限付与方法
ホワイトペーパー
セキュリティホワイトペーパー
性能ホワイトペーパー
トラブルシューティング
接続関連
性能関連
よくあるご質問
基本概念
購入と課金
サポートされるフォーマット
接続とネットワーク
機能特性
コンソールの操作
データベーステーブル
パフォーマンスとログ
データベース監査
TDSQL-C for MySQLとTencentDB for MySQLの違い
関連契約
SLA
利用規約
TDSQL-C ポリシー
プライバシーポリシー
データ処理と安全プロトコル
汎用参考
標準と認証
用語一覧
お問い合わせ

SSL暗号化の設定

PDF
フォーカスモード
フォントサイズ
最終更新日: 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暗号化を無効化するために使用されます。

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック