<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=MySQL_-_SSL_TLS%E6%8E%A5%E7%B6%9A</id>
	<title>MySQL - SSL TLS接続 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://mochiu.net/index.php?action=history&amp;feed=atom&amp;title=MySQL_-_SSL_TLS%E6%8E%A5%E7%B6%9A"/>
	<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=MySQL_-_SSL_TLS%E6%8E%A5%E7%B6%9A&amp;action=history"/>
	<updated>2026-04-17T14:36:10Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://mochiu.net/index.php?title=MySQL_-_SSL_TLS%E6%8E%A5%E7%B6%9A&amp;diff=14313&amp;oldid=prev</id>
		<title>Wiki: ページの作成:「== 概要 == MySQLでは、サーバとクライアント間の通信を暗号化するためにSSL/TLS (Transport Layer Security) プロトコルを使用できる。&lt;br&gt; TLSはSSL (Secure Sockets Layer) の後継プロトコルであり、MySQLでは一般的に「SSL接続」と呼ばれるが、実際にはTLSプロトコルが使用されている。&lt;br&gt; &lt;br&gt; SSL/TLS接続により、ネットワーク通信の盗聴・改ざんを防止し、データの機密…」</title>
		<link rel="alternate" type="text/html" href="https://mochiu.net/index.php?title=MySQL_-_SSL_TLS%E6%8E%A5%E7%B6%9A&amp;diff=14313&amp;oldid=prev"/>
		<updated>2026-02-16T10:55:21Z</updated>

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