概要

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サポート
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/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 オプションの値
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オプションを示す。

レプリケーション用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セキュリティ設定項目
パラメータ名 説明 / 設定値
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接続により、以下のパフォーマンスオーバーヘッドが発生する。

SSL/TLSパフォーマンスへの影響
項目 説明
CPU使用率の増加 一般的に2〜5[%]増加 (適切な設定で1%以下も可能)
TLSハンドシェイクのオーバーヘッド 接続確立時にハンドシェイク処理が実行される
データ転送の暗号化/復号化コスト データ送受信時に暗号化処理が実行される


TLS 1.3では、ハンドシェイク時間が短縮 (1-RTT) され、接続確立のパフォーマンスが向上する。

パフォーマンス最適化

SSL/TLS接続のパフォーマンスを最適化する手法を以下に示す。

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/TLSステータス変数
変数名 説明
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-modePREFERRED
  • 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
    インターフェース別の証明書リロード



参考リンク