MariaDBの柔軟なセキュリティ:TLSクライアント証明書で個別制御
MariaDBでTLSを有効にしつつ、TLSなしの接続も許可する方法
そこで、TLSを有効にしつつ、TLSなしの接続も許可する方法をご紹介します。
方法
MariaDBの設定ファイル(my.cnfなど)に以下の設定を追加します。
ssl=REQUIRED
tls-version=TLS1.2
[non-ssl]
ssl=DISABLED
この設定により、以下のようになります。
- デフォルトでは、TLSによる暗号化が要求されます。
non-ssl
という名前のグループに属するクライアント接続は、TLSなしで許可されます。
クライアント接続をnon-sslグループに属させるには、以下のいずれかの方法で行います。
- MariaDBクライアント接続ライブラリの接続オプションで、
ssl-mode=NONE
を設定します。 - MariaDBの設定ファイルで、
bind-address
オプションを使用して、non-ssl
グループに属するクライアント接続専用のリスニングポートを指定します。
例
以下の設定は、3306番ポートでTLSを要求し、3307番ポートでTLSなしの接続を許可します。
# 3306番ポートでTLSを要求
[mysqld]
port=3306
ssl=REQUIRED
tls-version=TLS1.2
# 3307番ポートでTLSなしの接続を許可
[mysqld-non-ssl]
port=3307
ssl=DISABLED
注意事項
- TLSなしの接続は暗号化されていないため、傍受や改ざんの危険があります。
- TLSv1.0およびTLSv1.1は脆弱性が発見されているため、TLSv1.2以上を使用することをお勧めします。
- 古いバージョンのMariaDBでは、TLS関連の設定が異なる場合があります。
MariaDBでTLSを有効にしつつ、TLSなしの接続も許可するサンプルコード
# 3306番ポートでTLSを要求
[mysqld]
port=3306
ssl=REQUIRED
tls-version=TLS1.2
# 3307番ポートでTLSなしの接続を許可
[mysqld-non-ssl]
port=3307
ssl=DISABLED
説明
port
オプション: 各リスニングポートの番号を指定します。ssl
オプション: TLS暗号化の使用を制御します。REQUIRED
: TLS暗号化を必須にします。
tls-version
オプション: 使用可能なTLSプロトコルのバージョンを指定します。
クライアント接続をnon-sslグループに属させる
以下のいずれかの方法で、クライアント接続をnon-ssl
グループに属させることができます。
MariaDBクライアント接続ライブラリを使用する場合、接続オプションでssl-mode=NONE
を設定することで、クライアント接続をnon-ssl
グループに属させることができます。
import mariadb
try:
# TLSなしの接続
conn = mariadb.connect(
host="localhost",
port=3307,
user="username",
password="password",
ssl_mode="NONE"
)
# ...
except mariadb.Error as e:
print(f"Error connecting to MariaDB: {e}")
# 3306番ポートでTLSを要求
[mysqld]
port=3306
ssl=REQUIRED
tls-version=TLS1.2
# 3307番ポートでTLSなしの接続を許可
[mysqld-non-ssl]
port=3307
ssl=DISABLED
bind-address=127.0.0.1:3307
上記の例では、mysqld-non-ssl
グループに属するクライアント接続は、127.0.0.1:3307
アドレスでのみ許可されます。
- 上記のサンプルコードは、MariaDB 10.5以降で使用することを前提としています。古いバージョンのMariaDBでは、TLS関連の設定が異なる場合があります。
MariaDBでTLSを有効にしつつ、TLSなしの接続も許可するその他の方法
TLSクライアント証明書を使用すると、特定のクライアントのみTLS接続を許可することができます。この方法では、すべてのクライアントでTLSを有効にする必要がなく、許可されたクライアントのみが暗号化された接続でデータベースにアクセスできます。
TLSトンネルを使用すると、非TLS接続をTLSでラップして、安全な接続を確立することができます。この方法は、TLS対応していないクライアントを使用している場合に役立ちます。
プロキシサーバーを使用すると、クライアントとデータベースサーバー間のすべての通信を仲介することができます。プロキシサーバーは、TLSを使用してクライアントとの接続を暗号化し、データベースサーバーとの接続には非TLSを使用することができます。
各方法の比較
方法 | 利点 | 欠点 |
---|---|---|
TLSクライアント証明書 | 特定のクライアントのみTLS接続を許可できる | クライアント証明書の配布と管理が必要 |
TLSトンネル | TLS対応していないクライアントで使用できる | 追加のセットアップと構成が必要 |
プロキシサーバー | 集中的なアクセス制御と監査が可能 | 追加のハードウェアまたはソフトウェアが必要 |
最適な方法は、個々の要件によって異なります。TLSクライアント証明書は、セキュリティを最優先に考える場合に適しています。TLSトンネルは、柔軟性と互換性を重視する場合に適しています。プロキシサーバーは、集中的な管理が必要な大規模な環境に適しています。
ssl mariadb