概要
MySQLでは、サーバとクライアント間の通信を暗号化するためにSSL/TLS (Transport Layer Security) プロトコルを使用できる。
TLSはSSL (Secure Sockets Layer) の後継プロトコルであり、MySQLでは一般的に「SSL接続」と呼ばれるが、実際にはTLSプロトコルが使用されている。
SSL/TLS接続により、ネットワーク通信の盗聴・改ざんを防止し、データの機密性と完全性を保護できる。
クライアント証明書を使用することで、接続元の認証も可能である。
MySQL 8.0では、サーバ起動時に自動的にSSL証明書が生成され (auto_generate_certs=ON)、デフォルトでSSL/TLS接続がサポートされる。
クライアントの ssl-mode オプションにより、暗号化接続の要求レベルを制御できる。
MySQL 8.0.28以降では、TLS 1.0/1.1のサポートが削除され、TLS 1.2以上が必須となった。
TLS 1.3は、MySQL 8.0.16以降でOpenSSL 1.1.1以上を使用する場合にサポートされる。
認証プラグイン caching_sha2_password との関連については、MySQL - 認証プラグイン を参照すること。
レプリケーション全般については、MySQL - レプリケーション を参照すること。
SSL/TLS の基本
TLS プロトコルの概要
TLS (Transport Layer Security) は、ネットワーク通信を暗号化するプロトコルであり、SSL (Secure Sockets Layer) の後継である。
MySQLでは、サーバとクライアント間のTCP/IP接続を暗号化し、以下に示す機能を提供する。
- データの暗号化
- 通信内容の盗聴を防止
- データの完全性保護
- 通信内容の改ざんを検出
- サーバ認証
- サーバ証明書によるサーバの身元確認
- クライアント認証
- クライアント証明書による接続元の認証
TLS接続では、接続確立時にTLSハンドシェイクが実行され、暗号化パラメータの交換と認証が行われる。
MySQLにおけるTLSバージョンのサポート
MySQLのTLSバージョンサポートは、バージョンにより異なる。
| MySQLバージョン | サポートTLSバージョン | 備考 |
|---|---|---|
| 8.0.0 - 8.0.15 | TLSv1 (非推奨), TLSv1.1 (非推奨), TLSv1.2 | TLS 1.0/1.1は非推奨 |
| 8.0.16 - 8.0.27 | TLSv1 (非推奨), TLSv1.1 (非推奨), TLSv1.2, TLSv1.3 | TLS 1.3サポート追加 (OpenSSL 1.1.1以上) |
| 8.0.28以降 | TLSv1.2, TLSv1.3 | TLS 1.0/1.1削除 |
| 8.4以降 | TLSv1.2, TLSv1.3 | TLS 1.2が最低バージョン |
TLS 1.3を使用するには、OpenSSL 1.1.1以上が必要である。
TLS 1.3は、ハンドシェイク時間の短縮 (1-RTT) により、接続確立のパフォーマンスが向上する。
デフォルトの暗号化動作
MySQL 8.0では、auto_generate_certs=ON (デフォルト) により、サーバ起動時に自動的にSSL証明書が生成される。
下表に、自動生成されるファイルを示す。
| ファイル名 | 説明 |
|---|---|
| ca.pem | CA証明書 (自己署名、有効期限10年) |
| ca-key.pem | CA秘密鍵 |
| server-cert.pem | サーバ公開鍵証明書 |
| server-key.pem | サーバ秘密鍵 |
| client-cert.pem | クライアント公開鍵証明書 |
| client-key.pem | クライアント秘密鍵 |
生成される証明書の鍵サイズは2048ビットであり、CA証明書は自己署名である。
クライアントの ssl-mode デフォルト値は PREFERRED であり、サーバがSSL/TLSをサポートしている場合は暗号化接続、サポートしていない場合は非暗号化接続が確立される。
サーバ側の設定
SSL/TLS関連のシステム変数
MySQLサーバのSSL/TLS設定は、システム変数により制御される。
下表に、主要なシステム変数を示す。
| 変数名 | 説明 |
|---|---|
| ssl_ca | CA証明書ファイルのパス |
| ssl_capath | CA証明書ディレクトリのパス |
| ssl_cert | サーバ公開鍵証明書のパス (必須) |
| ssl_key | サーバ秘密鍵のパス (必須) |
| ssl_cipher | TLS 1.2以下用の暗号スイート (コロン区切り) |
| ssl_crl | 証明書失効リスト (CRL) ファイルのパス |
| ssl_crlpath | 証明書失効リスト (CRL) ディレクトリのパス |
| tls_version | サポートするTLSバージョン (カンマ区切り、デフォルト: TLSv1.2,TLSv1.3) |
| tls_ciphersuites | TLS 1.3用暗号スイート (コロン区切り) |
| auto_generate_certs | サーバ起動時の自動証明書生成 (デフォルト: ON) |
管理インターフェース用の独立したSSL/TLS設定も可能である。
- admin_ssl_ca, admin_ssl_cert, admin_ssl_key
- 管理インターフェース用の証明書設定
- admin_tls_version, admin_tls_ciphersuites
- 管理インターフェース用のTLSバージョンと暗号スイート
require_secure_transport
require_secure_transport システム変数をONに設定すると、暗号化接続またはUNIXソケット接続のみが許可される。
非暗号化のTCP/IP接続は拒否される。
設定例を以下に示す。
SET PERSIST require_secure_transport=ON;
この設定により、全ての接続で暗号化が強制される。
TLSバージョンの制限
tls_version システム変数により、サポートするTLSバージョンを制限できる。
my.cnfの [mysqld] セクション、または SET GLOBAL / SET PERSIST 文で設定する。
[mysqld]
tls_version=TLSv1.2,TLSv1.3
tls_version=TLSv1.2,TLSv1.3
TLS 1.0/1.1はMySQL 8.0.28で削除されたため、指定できない。
TLS 1.3のみを許可する例を以下に示す。
[mysqld]
tls_version=TLSv1.3
暗号スイートの設定
暗号スイートは、TLS接続で使用される暗号化アルゴリズムの組み合わせである。
TLS 1.2以下用の暗号スイートは ssl_cipher で設定する。
TLS 1.3用の暗号スイートは tls_ciphersuites で設定する。
これらもmy.cnfの [mysqld] セクション、または SET GLOBAL / SET PERSIST 文で設定する。
[mysqld]
ssl_cipher=ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256
tls_ciphersuites=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
TLS 1.3のデフォルト暗号スイートを以下に示す。
- TLS_AES_128_GCM_SHA256
- TLS_AES_256_GCM_SHA384
- TLS_CHACHA20_POLY1305_SHA256
暗号スイートは、セキュリティと互換性のバランスを考慮して選択する必要がある。
設定ファイルの例
my.cnfファイル (または、my.iniファイル) での設定例を以下に示す。
[mysqld]
ssl_ca=/path/to/ca.pem
ssl_cert=/path/to/server-cert.pem
ssl_key=/path/to/server-key.pem
ssl_cipher=ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384
tls_version=TLSv1.2,TLSv1.3
tls_ciphersuites=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
require_secure_transport=OFF
証明書ファイルのパスは、絶対パスを推奨する。
証明書の作成と管理
mysql_ssl_rsa_setup ツール
mysql_ssl_rsa_setup ツールは、MySQL 8.0.34で非推奨となり、MySQL 8.4 / 9.0で削除された。
非推奨となった理由を以下に示す。
- MySQL Community EditionがyaSSLからOpenSSLに移行
- 自動証明書生成機能 (
auto_generate_certs=ON) で代替可能
代替手段を以下に示す。
auto_generate_certs=ON(デフォルト)- サーバ起動時に自動的にSSL証明書を生成
- OpenSSLを使用した手動生成
- 本格的な証明書管理が必要な場合
新規環境では、OpenSSLを使用した証明書生成を推奨する。
OpenSSL を使用した証明書の作成
OpenSSLコマンドにより、CA証明書、サーバ証明書、クライアント証明書を作成することができる。
CA証明書の作成
CA (認証局) 証明書と秘密鍵を作成する。
openssl genrsa 2048 > ca-key.pem openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca.pem
openssl req コマンドでは、下表に示す情報を入力する。
| 項目名 (英語名称) | 例 / 説明 |
|---|---|
| Country Name (国コード) | JP |
| State or Province Name (都道府県) | Tokyo |
| Locality Name (市区町村) | Chiyoda-ku |
| Organization Name (組織名) | Example Company |
| Organizational Unit Name (部署名) | IT Department |
| Common Name (CN) | CA証明書のCN (サーバ・クライアント証明書とは異なる値を指定) |
CA証明書の有効期限は3600日 (約10年) である。
サーバ証明書の作成
サーバ証明書と秘密鍵を作成し、CA証明書で署名する。
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout server-key.pem -out server-req.pem openssl rsa -in server-key.pem -out server-key.pem openssl x509 -req -in server-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
サーバ証明書のCommon Name (CN) は、サーバのホスト名またはFQDNを指定する。
※注意
- CA証明書のCNとサーバ証明書のCNは異なる値を指定
- クライアント証明書のCNも異なる値を指定
クライアント証明書の作成
クライアント証明書と秘密鍵を作成し、CA証明書で署名する。
クライアント証明書のCommon Name (CN) は、クライアントを識別する任意の名前を指定する。
-set_serial オプションは、サーバ証明書とクライアント証明書で異なる値を指定する必要がある。
openssl req -newkey rsa:2048 -days 3600 -nodes -keyout client-key.pem -out client-req.pem openssl rsa -in client-key.pem -out client-key.pem openssl x509 -req -in client-req.pem -days 3600 -CA ca.pem -CAkey ca-key.pem -set_serial 02 -out client-cert.pem
証明書の検証
作成した証明書の検証を以下のコマンドで実行する。
openssl verify -CAfile ca.pem server-cert.pem client-cert.pem
正常な場合は、以下のようなメッセージが出力される。
server-cert.pem: OK client-cert.pem: OK
証明書の内容を確認するコマンドを以下に示す。
有効期限、発行者、サブジェクト、公開鍵等の情報を確認することができる。
openssl x509 -text -in server-cert.pem openssl x509 -text -in client-cert.pem
証明書のローテーション
MySQL 8.0.16以降では、ALTER INSTANCE RELOAD TLS 文により、サーバ再起動不要で証明書を更新できる。
基本構文を以下に示す。
ALTER INSTANCE RELOAD TLS;
インターフェース別のリロード (MySQL 8.4以降) を以下に示す。
ALTER INSTANCE RELOAD TLS FOR CHANNEL mysql_main;
エラー時にロールバックしないオプションを以下に示す。
ALTER INSTANCE RELOAD TLS NO ROLLBACK ON ERROR;
実行には CONNECTION_ADMIN 権限が必要である。
証明書リロード後の確認方法を以下に示す。
SHOW STATUS LIKE 'Current_tls_%';
※注意
- 現在の接続には影響なし。(新規接続から適用)
- グループレプリケーションのTLSコンテキストは更新されない。
クライアント側の設定
ssl-mode オプション
クライアントの ssl-mode オプションにより、暗号化接続の要求レベルを制御する。
| ssl-mode | 説明 | 証明書検証 | ホスト名検証 |
|---|---|---|---|
| DISABLED | SSL/TLS接続を無効化 | なし | なし |
| PREFERRED | サーバがサポートしていれば暗号化、なければ非暗号化 (デフォルト) | なし | なし |
| REQUIRED | 暗号化接続を要求 (証明書検証なし、MITM攻撃に脆弱) | なし | なし |
| VERIFY_CA | 暗号化接続を要求 + CA証明書を検証 (ホスト名検証なし) | あり | なし |
| VERIFY_IDENTITY | 暗号化接続を要求 + CA証明書検証+ホスト名検証 (最も安全) | あり | あり |
セキュリティを重視する場合は、VERIFY_IDENTITY を推奨する。
mysql コマンドラインクライアント
mysqlコマンドラインクライアントでのSSL/TLS接続例を以下に示す。
基本的な接続 (VERIFY_CA) を以下に示す。
mysql --ssl-mode=VERIFY_CA --ssl-ca=/path/to/ca.pem -h localhost -u user -p
ホスト名検証付き接続 (VERIFY_IDENTITY) を以下に示す。
mysql --ssl-mode=VERIFY_IDENTITY --ssl-ca=/path/to/ca.pem \
--ssl-cert=/path/to/client-cert.pem \
--ssl-key=/path/to/client-key.pem \
-h server.example.com -u user -p
クライアント証明書を使用する場合は、--ssl-cert と --ssl-key オプションを指定する。
SSL接続の確認方法を以下に示す。
SHOW SESSION STATUS LIKE 'Ssl_cipher';
SHOW SESSION STATUS LIKE 'Ssl_version';
または、\s コマンドで接続情報を確認する。
\s
SSL接続が確立されている場合、SSL: Cipher in use is ... のような情報が表示される。
プログラミング言語からの接続
MySQL Connector/Python
Python (MySQL Connector/Python) からのSSL/TLS接続例を以下に示す。
import mysql.connector
conn = mysql.connector.connect(
host='server.example.com',
user='user',
password='password',
database='mydb',
ssl_ca='/path/to/ca.pem',
ssl_cert='/path/to/client-cert.pem',
ssl_key='/path/to/client-key.pem',
ssl_verify_cert=True,
ssl_verify_identity=True
)
ssl_verify_cert=True により、証明書検証が有効化される。
ssl_verify_identity=True により、ホスト名検証が有効化される。
MySQL Connector/Java (JDBC)
Java (JDBC) からのSSL/TLS接続例を以下に示す。
jdbc:mysql://server.example.com:3306/mydb?useSSL=true&requireSSL=true&verifyServerCertificate=true&trustCertificateKeyStoreUrl=file:/path/to/truststore.jks&clientCertificateKeyStoreUrl=file:/path/to/keystore.jks
JDBCでは、JavaのKeyStore形式 (JKS) の証明書ファイルを使用する。
PHP (PDO / mysqli)
PHP (PDO) からのSSL/TLS接続例を以下に示す。
<?php
$pdo = new PDO(
'mysql:host=server.example.com;dbname=mydb',
'user',
'password',
[
PDO::MYSQL_ATTR_SSL_CA => '/path/to/ca.pem',
PDO::MYSQL_ATTR_SSL_CERT => '/path/to/client-cert.pem',
PDO::MYSQL_ATTR_SSL_KEY => '/path/to/client-key.pem',
PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true,
]
);
PHP (mysqli) からのSSL/TLS接続例を以下に示す。
<?php
$mysqli = new mysqli();
$mysqli->ssl_set(
'/path/to/client-key.pem',
'/path/to/client-cert.pem',
'/path/to/ca.pem',
NULL,
NULL
);
$mysqli->real_connect(
'server.example.com',
'user',
'password',
'mydb',
3306,
NULL,
MYSQLI_CLIENT_SSL
);
SSL接続の確認方法
接続後にSSL/TLS接続が確立されているかを確認する方法を以下に示す。
SHOW SESSION STATUS LIKE 'Ssl_cipher';
Ssl_cipher が空でない場合、SSL/TLS接続が確立されている。
TLSバージョンの確認を以下に示す。
SHOW SESSION STATUS LIKE 'Ssl_version';
Ssl_version の値 (例: TLSv1.3) により、使用中のTLSバージョンを確認できる。
ユーザごとのSSL/TLS要件
MySQLでは、ユーザ作成時に REQUIRE 句を使用して、ユーザごとにSSL/TLS接続要件を設定できる。
REQUIRE SSL
暗号化接続を必須とするが、証明書検証は行わない。
CREATE USER 'user1'@'%' REQUIRE SSL;
REQUIRE X509
有効なクライアント証明書を必須とする。(証明書の発行者・サブジェクトは問わない)
CREATE USER 'user2'@'%' REQUIRE X509;
REQUIRE ISSUER / SUBJECT
特定の発行者 (ISSUER) またはサブジェクト (SUBJECT) のクライアント証明書を必須とする。
REQUIRE ISSUER の例を以下に示す。
CREATE USER 'user3'@'%'
REQUIRE ISSUER '/C=US/ST=State/O=Organization/CN=CA';
REQUIRE SUBJECT の例を以下に示す。
CREATE USER 'user4'@'%'
REQUIRE SUBJECT '/C=US/CN=client';
REQUIRE ISSUER および REQUIRE SUBJECT は、REQUIRE X509 を暗示する。
ユーザの作成例と変更例
複数条件の組み合わせ例を以下に示す。
CREATE USER 'user5'@'%'
REQUIRE SUBJECT '/C=US/CN=client'
AND ISSUER '/C=US/CN=CA'
AND CIPHER 'ECDHE-RSA-AES256-GCM-SHA384';
- 既存ユーザの変更例
ALTER USER 'user1'@'%' REQUIRE X509;
- SSL/TLS要件の削除例
ALTER USER 'user1'@'%' REQUIRE NONE;
REQUIRE CIPHERにより、特定の暗号スイートを要求できる。CREATE USER 'user6'@'%' REQUIRE CIPHER 'ECDHE-RSA-AES128-GCM-SHA256';
レプリケーションのSSL/TLS設定
ソース-レプリカ間の暗号化
レプリケーション接続を暗号化するには、CHANGE REPLICATION SOURCE TO 文でSSL/TLSオプションを設定する。
基本的な設定例を以下に示す。
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source.example.com',
SOURCE_USER='replication',
SOURCE_PASSWORD='password',
SOURCE_SSL=1,
SOURCE_SSL_CA='/path/to/ca.pem',
SOURCE_SSL_CERT='/path/to/client-cert.pem',
SOURCE_SSL_KEY='/path/to/client-key.pem',
SOURCE_TLS_VERSION='TLSv1.2,TLSv1.3',
SOURCE_SSL_VERIFY_SERVER_CERT=1;
START REPLICA;
レプリケーション用証明書の設定
下表に、CHANGE REPLICATION SOURCE TO のSSL/TLSオプションを示す。
| オプション | 説明 |
|---|---|
| SOURCE_SSL | SSL/TLS接続の有効化 (1: 有効、0: 無効) |
| SOURCE_SSL_CA | CA証明書ファイルのパス |
| SOURCE_SSL_CAPATH | CA証明書ディレクトリのパス |
| SOURCE_SSL_CERT | クライアント証明書ファイルのパス |
| SOURCE_SSL_KEY | クライアント秘密鍵ファイルのパス |
| SOURCE_SSL_CRL | 証明書失効リストファイルのパス |
| SOURCE_SSL_CRLPATH | 証明書失効リストディレクトリのパス |
| SOURCE_SSL_CIPHER | TLS 1.2以下用の暗号スイート |
| SOURCE_SSL_VERIFY_SERVER_CERT | サーバ証明書検証 (1: 有効、0: 無効) |
| SOURCE_TLS_VERSION | サポートするTLSバージョン (カンマ区切り) |
| SOURCE_TLS_CIPHERSUITES | TLS 1.3用暗号スイート |
SOURCE_SSL_VERIFY_SERVER_CERT=1 により、ソースサーバ証明書の検証を有効化する。
グループレプリケーションのSSL設定
グループレプリケーションでのSSL/TLS設定は、専用のシステム変数を使用する。
下表に、主要な設定変数を示す。
| パラメータ名 | 説明 / 設定値 |
|---|---|
| group_replication_ssl_mode | DISABLED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY |
| group_replication_recovery_use_ssl | リカバリ用の暗号化接続有効化 |
| group_replication_recovery_ssl_ca | リカバリ用CA証明書 |
| group_replication_recovery_ssl_cert | リカバリ用クライアント証明書 |
| group_replication_recovery_ssl_key | リカバリ用クライアント秘密鍵 |
設定例を以下に示す。
SET GLOBAL group_replication_ssl_mode='VERIFY_IDENTITY';
SET GLOBAL group_replication_recovery_use_ssl=ON;
SET GLOBAL group_replication_recovery_ssl_ca='/path/to/ca.pem';
SET GLOBAL group_replication_recovery_ssl_cert='/path/to/client-cert.pem';
SET GLOBAL group_replication_recovery_ssl_key='/path/to/client-key.pem';
※注意
ALTER INSTANCE RELOAD TLSでは、グループレプリケーションのTLSコンテキストは更新されない。- グループレプリケーションのTLS設定を変更する場合は、グループの再起動が必要となる。
SSL/TLS接続のパフォーマンス
暗号化のオーバーヘッド
SSL/TLS接続により、以下のパフォーマンスオーバーヘッドが発生する。
| 項目 | 説明 |
|---|---|
| CPU使用率の増加 | 一般的に2〜5[%]増加 (適切な設定で1%以下も可能) |
| TLSハンドシェイクのオーバーヘッド | 接続確立時にハンドシェイク処理が実行される |
| データ転送の暗号化/復号化コスト | データ送受信時に暗号化処理が実行される |
TLS 1.3では、ハンドシェイク時間が短縮 (1-RTT) され、接続確立のパフォーマンスが向上する。
パフォーマンス最適化
SSL/TLS接続のパフォーマンスを最適化する手法を以下に示す。
| 対策項目 | 説明 |
|---|---|
| 接続プーリングの活用 | ハンドシェイク回数を削減し、接続確立コストを低減 |
| TLS 1.3の使用 | ハンドシェイク時間の短縮 (1-RTT) |
| 適切な暗号スイートの選択 | ECDHE (楕円曲線Diffie-Hellman鍵交換) を推奨 DHE (Diffie-Hellman鍵交換) は避ける (計算コストが高い) |
| セッション再利用/キャッシュ | TLSセッションの再利用により、ハンドシェイクを省略 |
暗号スイートの選択例を以下に示す。
[mysqld]
tls_ciphersuites=TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
接続プーリングの推奨を以下に示す。
- アプリケーション側で接続プールを実装
- 接続の再利用により、ハンドシェイク回数を削減
トラブルシューティング
SSL接続エラーの診断
SSL/TLS接続エラーの診断には、以下に示すステータス変数を確認する。
SHOW STATUS LIKE 'Ssl%';
主要なステータス変数を以下に示す。
| 変数名 | 説明 |
|---|---|
| Ssl_accepts | SSL接続受入回数 |
| Ssl_accepts_failed | SSL接続失敗回数 |
| Ssl_cipher | 現在の接続の暗号スイート |
| Ssl_version | 現在の接続のTLSバージョン |
Ssl_accepts_failed が増加している場合、SSL/TLS接続エラーが発生している。
エラーログの確認を以下に示す。
MySQLエラーログに、SSL/TLS関連のエラーメッセージが出力される。
tail -f /var/log/mysql/error.log
証明書関連のエラー
証明書期限切れ
証明書の有効期限を確認する。
openssl x509 -text -in server-cert.pem | grep -A2 Validity
期限切れの場合は、新しい証明書を作成する。
CA証明書不一致
証明書がCA証明書で署名されているかを確認する。
openssl verify -CAfile ca.pem server-cert.pem
エラーが表示される場合、証明書とCA証明書が一致していない。
秘密鍵と証明書の不一致
秘密鍵と証明書の対応を確認する。
openssl x509 -noout -modulus -in server-cert.pem | openssl md5 # または openssl rsa -noout -modulus -in server-key.pem | openssl md5
MD5ハッシュ値が一致しない場合、秘密鍵と証明書が対応していない。
Common Name (CN) 重複
CA証明書、サーバ証明書、クライアント証明書のCNは、それぞれ異なる値が必要である。
証明書のCNを確認する。
openssl x509 -noout -subject -in ca.pem # または openssl x509 -noout -subject -in server-cert.pem # または openssl x509 -noout -subject -in client-cert.pem
CNが重複している場合は、証明書を再作成する。
クライアント互換性の問題
MySQL 8.0.28以降では、TLS 1.0/1.1のサポートが削除されている。
古いクライアントがTLS 1.2以上に対応していない場合は、以下の対処が必要である。
- クライアントライブラリの更新
- TLS 1.2以上に対応したバージョンに更新
- サーバ側でのTLSバージョン調整 (MySQL 8.0.27以前)
tls_versionに古いバージョンを含める (非推奨)
TLS 1.2対応の確認を以下に示す。
mysql --version # または openssl version
OpenSSL 1.0.1以上が必要である。
バージョン別の変更点
MySQL 8.0の変更
MySQL 8.0での主要な変更を以下に示す。
- サーバ起動時の自動証明書生成 (
auto_generate_certs=ON) - クライアントのデフォルト
ssl-modeがPREFERRED - TLS 1.2サポート (デフォルト)
MySQL 8.0.16での変更を以下に示す。
- TLS 1.3サポート (OpenSSL 1.1.1以上)
ALTER INSTANCE RELOAD TLS文の追加
MySQL 8.0.28の変更
MySQL 8.0.28での主要な変更を以下に示す。
- TLS 1.0 / 1.1サポート削除
- TLS 1.2が最低バージョン
影響を以下に示す。
- TLS 1.2以上に対応していないクライアントは接続不可
tls_versionに TLSv1 または TLSv1.1を指定するとエラー
MySQL 8.0.34の変更
MySQL 8.0.34での主要な変更を以下に示す。
mysql_ssl_rsa_setupツールの非推奨化
代替手段を以下に示す。
auto_generate_certs=ONによる自動生成- OpenSSLによる手動生成
MySQL 8.4/9.0では、mysql_ssl_rsa_setup は削除される。
MySQL 8.4での追加機能を以下に示す。
tls-certificates-enforced-validation- 証明書検証を強制し、無効な証明書でサーバ起動が失敗する
ALTER INSTANCE RELOAD TLS FOR CHANNEL句- インターフェース別の証明書リロード
参考リンク
- MySQL 8.0 Reference Manual - Encrypted Connections
- MySQL 8.0 Reference Manual - Using Encrypted Connections
- MySQL 8.0 Reference Manual - ALTER INSTANCE Statement
- MySQL 8.0 Reference Manual - Replication with Encrypted Connections