MariaDBの柔軟なセキュリティ:TLSクライアント証明書で個別制御

2024-06-22

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


      Cloud Foundryでデータベースを安全に保護:MariaDBとS3の自動バックアップガイド

      このチュートリアルでは、Cloud Foundry で MariaDB サービスと S3 バケット間で自動バックアップを実行する方法を説明します。 2 つのツールを使用してこれを実現します。db-dumper: MariaDB データベースのダンプを作成します。...


      Mac Big Sur で MariaDB がつながらない? エラー 2002 (HY000) の解決策を 5 ステップで解説

      MariaDB を macOS Big Sur で使用中に、以下のエラーが発生することがあります。このエラーは、MariaDBサーバーが起動していないか、ソケットファイルに問題があることを示しています。原因このエラーメッセージが表示される主な原因は以下の3つです。...


      SHOW CREATE DATABASEコマンドでデータベース作成時のSQLクエリを確認する

      方法1:SHOW CREATE DATABASEコマンドを使用するこれは、データベース作成時のSQLクエリを直接表示する最も簡単な方法です。以下のコマンドを実行します。例:このコマンドは、データベース作成時のDDL(データ定義言語)ステートメントをすべて出力します。...


      【会計初心者向け】MySQL、SQL、MariaDBで試算表を作成して財務分析

      このチュートリアルでは、debit と credit という 2 つの列と 1 つの amount 列のみを含むテーブルから試算表を表示するための SELECT ステートメントを、MySQL、SQL、MariaDB で記述する方法について説明します。...


      SQL SQL SQL SQL Amazon で見る



      MariaDB over SSL 接続で「certificate verify failed」エラーが発生した場合のトラブルシューティング

      MariaDB を SSL で接続しようとすると、「certificate verify failed」エラーが発生する。対象OS: RHEL 7データベース: MariaDB原因このエラーは、クライアントがサーバーの証明書を検証できなかったことを示しています。考えられる原因は以下の通りです。


      PHP PDOでMySQL/MariaDBに接続する際の注意点 --sslオプションとセキュリティ

      このチュートリアルでは、PHP PDOを使用して、SSL証明書なしでMySQL/MariaDBに接続する方法を説明します。前提条件PHP 7.4以上MySQL/MariaDB 5.7以上PDO拡張モジュール手順PDO接続文字列を作成するPDOオブジェクトを作成する