MySQL 8.4 におけるSSL および RSA 証明書とキーの作成

目次

はじめに

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) 値を使用します。

    suffix値は 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 サーバー起動時のエラーログを見てみると、自己署名の警告が出力されていました。

エラーログに警告は出力されているものの、TLSを使った接続は問題なくできます。

おわりに

本記事ではMySQL 8.4 におけるSSL および RSA 証明書とキーの作成について、mysql_ssl_rsa_setup ユーティリティの削除と絡めながらご紹介しました。
MySQL Serverへのクライアント接続に暗号化された接続を用いている環境をお持ちのお客様が、MySQL 8.4 をお使いになる際のご参考になれば幸いです。

スマートスタイルTECHブログについて

スマートスタイルTECHブログでは、日頃MySQLのサポート業務に従事している有資格者で構成された技術サポートチームがMySQLに関する技術情報を発信しています。データベースのお困りごとはお気軽にご相談下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次