はじめに
2024年4月30日に、LTS(Long Term Support)であるMySQL 8.4 がリリースされました。
それまでの MySQL 8.0.x リリースにて非推奨となった機能が MySQL 8.4 では多数削除されています。
MySQL 8.0.34 で非推奨となったmysql_ssl_rsa_setup ユーティリティ(以下mysql_ssl_rsa_setup)もその1つです。
この記事ではmysql_ssl_rsa_setup の削除によりMySQL 8.4 におけるSSL および RSA 証明書とキーの作成方法がどう変化するのかご紹介いたします。
なお、mysql_ssl_rsa_setup については、MySQL 8.0 日本語版のマニュアルに説明があります。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 4.4.3 mysql_ssl_rsa_setup — SSL/RSA ファイルの作成
このプログラムは、SSL を使用したセキュアな接続をサポートするために必要な SSL 証明書およびキーファイルと RSA キーペアファイル、および暗号化されていない接続を介した RSA を使用したセキュアなパスワード交換を作成します
(それらのファイルがない場合)。
既存の SSL ファイルの有効期限が切れている場合、mysql_ssl_rsa_setup を使用して新しい SSL ファイルを作成することもできます。
また、弊社ブログの過去記事にmysql_ssl_rsa_setup を使用した暗号鍵の生成方法が載っています。
MySQL 5.7 が対象の記事となりますが、気になる方は併せて参照ください。
MySQL で クライアントと SSL/TLS を使った暗号化接続を行う | スマートスタイル TECH BLOG
MySQL 8.4 で使用可能なSSL および RSA 証明書とキーの作成方法
MySQL サーバーインスタンスにクライアントから暗号化接続するためには、クライアント証明書およびキーファイルを作成する必要があります。
MySQL での暗号化接続のサポートは、OpenSSL を使用して提供されます。
MySQL 8.4 での作成方法としては、以下の2つが用意されています。
- サーバーの起動時に自動生成する
- opensslコマンドを実行して生成する
MySQL 8.0 と比較すると、mysql_ssl_rsa_setup を使った方法が削除されたのみで、その他の方法は変更ありません。
この記事では、1つ目の方法について詳しく見ていきます。
自動生成されるSSL および RSA 証明書とキーは、以下の仕様となっています。
MySQL :: MySQL 8.4 Reference Manual :: 8.3.3.1 Creating SSL and RSA Certificates and Keys using MySQL / SSL and RSA File Characteristics
SSL キーと RSA キーのサイズは 2048 ビットです。
SSL CA 証明書は自己署名されています。
SSL サーバーおよびクライアント証明書は、 sha256WithRSAEncryption署名アルゴリズムを使用して CA 証明書とキーで署名されます。
SSL 証明書は、適切な証明書タイプ (CA、サーバー、クライアント) とともに、次の共通名 (CN) 値を使用します。
123 ca.pem: MySQL_Server_suffix_Auto_Generated_CA_Certificateserver-cert.pm: MySQL_Server_suffix_Auto_Generated_Server_Certificateclient-cert.pm: MySQL_Server_suffix_Auto_Generated_Client_Certificatesuffix値は MySQL のバージョン番号に基づいています。
サーバーによって生成されたファイルでは、結果のCN値が64文字を超える場合、名前の_suffix部分は省略されます。
SSL ファイルには、国 (C)、州または県 (ST)、組織 (O)、組織単位名 (OU)、および電子メール アドレスの値が空白になっています。
サーバーによって作成された SSL ファイルは、生成時から 10 年間有効です。
RSA ファイルに有効期限はありません。
SSL ファイルには、証明書/キー ペアごとに異なるシリアル番号があります (CA の場合は 1、サーバーの場合は 2、クライアントの場合は 3)。
サーバーによって自動的に作成されたファイルは、サーバーを実行するアカウントによって所有されます。
Unix および Unix ライクなシステムでは、ファイル アクセス モードは、証明書ファイルの場合は 644 (つまり、誰でも読み取り可能)、キー ファイルの場合は 600 (つまり、サーバーを実行するアカウントのみがアクセス可能) です。
上記の仕様は、mysql_ssl_rsa_setup を使用して作成されていたファイルと基本的には変わりません。
1点だけ、mysql_ssl_rsa_setup を使用して作成されたファイルは、そのプログラムを起動したユーザーが所有していましたが、サーバーで自動生成されたファイルはサーバーを実行するアカウントによって所有される点が異なります。
参考) MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.3.3.1 MySQL を使用した SSL および RSA 証明書とキーの作成/SSL および RSA ファイルの特性
これまでmysql_ssl_rsa_setup を使用してSSL および RSA 証明書とキーを作成していた場合は、ファイルの所有ユーザーにのみご留意いただければ、サーバーの自動生成によって作成されたファイルを使ってこれまでと同様に暗号化接続が利用できそうです。
続いて、サーバー起動時に自動で生成される証明書を使って暗号化接続してみた際のステータスや、エラーログのメッセージを確認してみます。
実機確認に使用した環境
・Oracle Linux 8.9
・MySQL Community Server 8.4.0 LTS(RPMパッケージからインストールしたもの)
実機確認
MySQL サーバー起動時のエラーログを見てみると、自己署名の警告が出力されていました。
1 2 3 4 5 6 7 8 9 |
## 抜粋 2024-06-21T08:09:24.224898Z 0 [System] [MY-015015] [Server] MySQL Server - start. 2024-06-21T08:09:24.399995Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.4.0) starting as process 9804 2024-06-21T08:09:24.418342Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-06-21T08:09:24.844860Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2024-06-21T08:09:25.134989Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. ★自己署名の警告が出力 2024-06-21T08:09:25.135019Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2024-06-21T08:09:25.168917Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.4.0' socket: '/var/lib/mysql/mysql.sock' port: 3306 MySQL Community Server - GPL. 2024-06-21T08:09:25.423141Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock |
エラーログに警告は出力されているものの、TLSを使った接続は問題なくできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ mysql -uroot -p --ssl-mode=REQUIRED --protocol=tcp Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.4.0 MySQL Community Server - GPL Copyright (c) 2000, 2024, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> \s : SSL: Cipher in use is TLS_AES_128_GCM_SHA256 ★ Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 8.4.0 MySQL Community Server - GPL : -------------- mysql> exit Bye |
おわりに
本記事ではMySQL 8.4 におけるSSL および RSA 証明書とキーの作成について、mysql_ssl_rsa_setup ユーティリティの削除と絡めながらご紹介しました。
MySQL Serverへのクライアント接続に暗号化された接続を用いている環境をお持ちのお客様が、MySQL 8.4 をお使いになる際のご参考になれば幸いです。