tencent cloud

TencentDB for MySQL

動向とお知らせ
製品アップデート情報一覧
初心者ガイド
製品紹介
製品概要
製品の優位性
適用シナリオ
データベースのアーキテクチャ
タグ編集
製品機能リスト
データベースインスタンス
高可用性(マルチアベイラビリティゾーン)
地域とAvailability Zone
自社研究カーネル
TXSQLカーネル概要
機能系特性
パフォーマンス系特性
セキュリティ系特性
安定性系特性
TXRocksエンジン
購入ガイド
課金概要
購入方法
支払い更新の説明
支払い延滞の説明
返金説明
インスタンス調整の料金の説明
バックアップキャパシティ課金説明
クイックスタート
概要
MySQLインスタンスの作成
操作ガイド
使用制限
操作一覧
インスタンスの管理とメンテナンス
アップグレードインスタンス
拡張インスタンス
データベースプロキシ
データベース管理(DMC)
アカウント管理
パラメータ設定
バックアップとロールバック
データ移行
インターネットとセキュリティ
監視とアラーム
ログセンター
タグ
プラクティスチュートリアル
MySQL利用規約
アプリケーションの自動再接続機能のコンフィグレーション
MySQLマスターインスタンスパラメータの変更影響
MyISAMからInnoDBエンジンへの切り替え制限
TencentDB for MySQLのためのVPC作成
MySQLによるサービス負荷能力の向上
2地域3センターのディザスタリカバリ構築
リード・ライト分離によるTencentDB for MySQLパフォーマンスの拡張
DTSでInnoDBデータをRocksDBに移行します
LAMPスタック上のWebアプリケーションの構築
Drupalウエブサイトの構築
Python言語によるMySQL APIの使用
ホワイトペーパー
パフォーマンス白書
セキュリティ白書
トラブルシューティング
接続に関する問題
性能関連
インスタンスデータの同期遅延
大文字と小文字を区別しない設定に失敗しました
APIドキュメント
History
Introduction
API Category
Instance APIs
Making API Requests
Data Import APIs
Database Proxy APIs
Database Audit APIs
Security APIs
Task APIs
Backup APIs
Account APIs
Rollback APIs
Parameter APIs
Database APIs
Monitoring APIs
Log-related API
Data Types
Error Codes
よくある質問
課金関連
ロールバック関連の問題
接続とログインに関する問題
パラメータを変更
アップグレード関連の問題
アカウント権限
性能メモリ
運営する
データ移行
機能特徴
コンソール関連
ログ関連
API 2.0切り替え 3.0ガイド
Service Agreement
Service Level Agreement
Terms of Service
汎用参考
標準と認証
お問い合わせ
用語集

SSL暗号化設定

PDF
フォーカスモード
フォントサイズ
最終更新日: 2024-07-25 17:50:17

SSL暗号化の概要

SSL(Secure Sockets Layer)認証は、クライアントからクラウドデータベースサーバー側への認証であり、ユーザーとサーバーに対して認証を行います。SSL暗号化をオンにすると、CA証明書を取得し、CA証明書をサーバーにアップロードすることができます。クライアントがデータベースにアクセスすると、 SSLプロトコルがアクティブ化され、クライアントとデータベースサーバーとの間にSSLセキュリティチャネルが確立されます。データ情報の暗号化送信が実現されるため、送信過程においてデータがキャプチャ、改ざん、盗聴されるのを防止し、双方におけるデータ転送の安全性を保証します。
SSLプロトコルは、信頼性の高いトランスポート層プロトコル(TCP)上に構築することが要求されます。その優位性は、それがアプリケーション層プロトコルに依存しておらず、上位のアプリケーション層プロトコル(例えば、HTTP、FTP、TELNETなど)が、SSLプロトコル上に透過的に構築できるということです。SSLプロトコルは、アプリケーション層プロトコル通信の前に、暗号化アルゴリズム、通信キーのネゴシエーション、サーバーの認証作業をすでに完了させているため、その後にアプリケーション層プロトコルから伝送されるデータはすべて暗号化され、それによって通信のプライバシーが保証されます。

背景

非暗号化方式を使用してデータベースに接続した場合は、ネットワークにおいて伝送されるすべての情報は平文となるため、不正なユーザーによる盗聴、改ざん、なりすましの3つのリスクがあります。SSLプロトコルは、この3つのリスクに対処するために設計されており、理論上次のことを実現できます:
情報は暗号化されて送信されます。サードパーティが盗聴することはできません。
検証メカニズムがあり、一度改ざんされると、通信をしている双方がすぐに発見することができます。
身分証明書を装備しており、IDのなりすましを防止しています。
TencentDB for MySQLはSSL暗号化の有効化によるリンクセキュリティの強化も、必要なアプリケーションサービスへのSSL CA証明書のダウンロードとインストールもサポートします。
ご注意:
SSL暗号化はデータ自体を保護するのではなく、データベースとサーバー間のトラフィックの安全性を確保します。トランスポート層でネットワーク接続を暗号化することで、通信データの安全性と完全性を高めるが、同時にネットワーク接続の応答時間を長くすることができます。

前提条件

インスタンスバージョンが、MySQL 5.6/5.7/8.0であること。
インスタンスアーキテクチャが、2ノード/3ノードであること。
インスタンスエンジンが、InooDB/RocksDBであること。

SSL暗号化をオンにする

1. MySQLコンソールにログインし、インスタンスリストでインスタンスIDまたは操作列の管理をクリックして、インスタンス管理ページに進みます。
2. インスタンス管理ページのデータセキュリティのページで、SSLページを選択します。


3. この機能は、ステータスがデフォルトでは有効化されていません。スイッチをオンにしてからOKをクリックし、SSL暗号化をオンにします。
マスターインスタンスをオンにするSSLウィンドウは次のとおりです:


ご注意:
SSLをオンにするプロセスで、SSL証明書のロードのため、データベースインスタンスが再起動されますので、業務に再接続のメカニズムがあることを確認してください。
ROインスタンスを起動するSSLインターフェースは次のとおりです:

ご注意:
ROインスタンスSSL機能の設定から、所属するROグループのその他のROインスタンスを同期設定することができます。
4. ダウンロードをクリックし、SSL CA証明書をダウンロードしてください。 ダウンロードされたファイルは圧縮パッケージ(TencentDB-CA-Chain.zip)で、次の3つのファイルを含みます:
p7bファイル:WindowsシステムでCA証明書をインポートするために使用します。
jksファイル:Javaのtruststore証明書ストレージファイルで、パスワードがtencentdbに統一されています。JavaプログラムにCA証明書チェーンをインポートするために使用します。
pemファイル:その他のシステムまたはアプリケーションにCA証明書をインポートするために使用します。

SSL CA証明書の設定

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

SSL暗号化をオフにする

1. MySQLコンソールにログインし、インスタンスリストでインスタンスIDまたは操作列の管理をクリックして、インスタンス管理ページに進みます。
2. インスタンス管理ページのデータセキュリティのページで、SSLページを選択します。
3. すでに有効化してあるスイッチボタンをクリックし、ポップアップしたダイアログボックスで、OKをクリックします。

説明:
SSLをオフにするプロセスで、SSL証明書がアンインストールされたため、データベースインスタンスが再起動されますので、業務に再接続のメカニズムがあることを確認してください。

SSL接続暗号化のインスタンスをオンにして接続

SSL接続暗号化方式を使用したデータベースSQLへの接続は次のとおりです:
mysql -P <ポート番号> -h <IPアドレス> -u <ユーザー名> -p<パスワード> --ssl-ca<ca証明書>

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 => '<ダウンロードした証明書のパス>
)


ヘルプとサポート

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

フィードバック