MariaDB 11 (MySQLも同様) で発生する "CLI ERROR 2026 (HY000): TLS/SSL エラー: SSL が必要ですが、サーバーはサポートしていない" エラーとその解決策
MariaDB 11 (またはMySQL) で、MariaDB 10.4サーバーに接続しようとすると、以下のエラーが発生します。
CLI ERROR 2026 (HY000): TLS/SSL error: SSL is required, but the server does not support it
このエラーは、MariaDB 11クライアントがSSL接続を要求しているのに対し、MariaDB 10.4サーバーがSSLをサポートしていないために発生します。
原因
このエラーには主に2つの原因が考えられます。
- MariaDB 10.4サーバーがSSLをサポートしていない: MariaDB 10.4はデフォルトでSSLを無効にしており、明示的に有効にする必要があります。
- クライアントとサーバーのTLSバージョンが互換性がない: MariaDB 11はTLS 1.3以降を、MariaDB 10.4はTLS 1.2までしかサポートしていない可能性があります。
解決策
以下のいずれかの方法で問題を解決できます。
MariaDB 10.4サーバーでSSLを有効にする
- MariaDBサーバー設定ファイル (/etc/my.cnf など) を編集します。
- 以下の行を追加します。
ssl=REQUIRED
- MariaDBサーバーを再起動します。
MariaDB 11クライアントでSSLを無効にする
以下のコマンドオプションを使用して、MariaDB 11クライアントでSSLを無効にすることができます。
mysql --ssl=0 -u username -p -h hostname
MariaDB 10.4サーバーをアップグレードする
MariaDB 10.4はすでにEOL (End of Life) を迎えているため、セキュリティ上の理由からMariaDB 11.4以降にアップグレードすることを強くお勧めします。
MariaDB 11クライアントをダウングレードする
MariaDB 10.4サーバーとの互換性を保つために、MariaDB 11クライアントを10.4にダウングレードすることもできます。
- SSL接続は、データベースサーバーとクライアント間の通信を暗号化し、データの漏洩を防ぐために重要です。可能な限り、すべてのMariaDB接続でSSLを有効にすることをお勧めします。
import mysql.connector
# MariaDB 10.4サーバーへの接続
db = mysql.connector.connect(
host="localhost",
user="username",
password="password",
database="dbname",
ssl=0 # SSLを無効にする
)
# データベース操作
cursor = db.cursor()
cursor.execute("SELECT * FROM mytable")
for row in cursor:
print(row)
# データベース接続のクローズ
db.close()
説明
mysql.connector
モジュールをインポートします。connect()
関数を使用して、MariaDBサーバーに接続します。host
、user
、password
、database
パラメーターを使用して、接続情報を設定します。ssl
パラメーターを0
に設定して、SSLを無効にします。cursor()
メソッドを使用して、カーソルオブジェクトを作成します。execute()
メソッドを使用して、SQLクエリを実行します。fetchone()
メソッドを使用して、クエリ結果の1行を取得します。close()
メソッドを使用して、データベース接続を閉じます。
注意事項
- このコードは、MariaDB 11クライアントとMariaDB 10.4サーバーでのみ動作します。
- SSLを無効にすることは、データベースサーバーとクライアント間の通信を暗号化しないため、セキュリティリスクが高くなります。
- 本番環境でSSLを無効にすることはお勧めしません。
MariaDB 11でのTLS/SSLエラーの解決策:代替方法
MariaDB 10.4サーバーをTLS 1.3以降にアップグレードすることで、クライアントとサーバーのTLSバージョン互換性の問題を解決できます。ただし、アップグレードにはサーバーのダウンタイムが必要となる場合があります。
промежуточный層 (Proxy) を使用する
TLS 1.2とTLS 1.3の両方をサポートする中間層 (Proxy) を導入することで、MariaDB 11クライアントとMariaDB 10.4サーバー間の通信を仲介することができます。ただし、中間層の導入と管理には追加の複雑性とオーバーヘッドがかかります。
別のデータベースクライアントを使用する
MariaDB 11と互換性があり、TLS 1.2をサポートする別のデータベースクライアントを使用することができます。ただし、新しいクライアントを学習し、既存のアプリケーションをそのクライアント用に変更する必要があります。
TLS 1.2をサポートするカスタムクライアントライブラリをビルドする
MariaDB 11用の公式クライアントライブラリではなく、TLS 1.2をサポートするカスタムクライアントライブラリをビルドすることができます。ただし、これは高度な技術スキルと、ライブラリの継続的なメンテナンスが必要となります。
最適な解決策の選択
最適な解決策は、個々の状況によって異なります。以下の要素を考慮する必要があります。
- 環境: 使用しているオペレーティングシステム、MariaDBのバージョン、およびアプリケーションの要件。
- スキルセット: カスタムクライアントライブラリの構築など、複雑なタスクを実行するスキルとリソースの利用可能性。
- ダウンタイム許容度: MariaDB 10.4サーバーをアップグレードする場合など、メンテナンス作業に伴うダウンタイム許容度。
- セキュリティ要件: データベースサーバーとクライアント間の通信を暗号化するためのセキュリティ要件。
mariadb mariadb-10.4 mariadb-11