MongoDB.local SF, Jan 15: See the speaker lineup & ship your AI vision faster. Use WEB50 to save 50%
Find out more >
Docs Menu
Docs Home
/ /

x.509

MongoDB はクライアント認証およびレプリカセットやシャーディングされたクラスターのノードの内部認証に対して X.509 証明書による認証をサポートします。

X.509 証明書認証には安全な TLS/SSL 接続 が必要です。

実稼働環境で使用する場合、MongoDB の配置には、認証局によって生成および署名された有効な証明書を使用する必要があります。ユーザーまたは組織は、独立した認証局を作成して維持することも、サードパーティの TLS ベンダーによって生成された証明書を使用することもできます。証明書の取得と管理については、このドキュメントの範囲外です。

サーバーで認証するために、クライアントはユーザー名とパスワードの代わりに X.509 証明書を使用できます。

クライアント証明書の要件:

  • 単一の認証局(CA)がクライアントとサーバーの両方の証明書を発行する必要があります。

  • それぞれの固有の MongoDB ユーザーに固有の証明書が必要です。

  • X.509証明書は期限切れであっては なりません 。

    注意

  • クライアント証明書には次のフィールドが含まれている必要があります。

    keyUsage = digitalSignature
    extendedKeyUsage = clientAuth
  • 次のクライアント証明書属性の少なくとも 1 つは、net.tls.clusterFile および net.tls.certificateKeyFile のどちらのサーバー証明書の属性とも異なる必要があります。

    • 組織(O

    • 組織単位(OU

    • ドメイン コンポーネント(DC

    注意

    また、起動時にenforceUserClusterSeparationパラメータを無効にして、 O/OU/DCチェックを自動的に無効にすることもできます。 これにより、メンバー証明書は$externalデータベースに保存されているユーザーとして認証できるようになります。

  • 識別名(DN) を含む x.509 クライアント証明書の subject は、x.509 ノード証明書subject異なる必要があります。MongoDB 配置に tlsX509ClusterAuthDNOverride が設定されている場合、クライアント x.509 証明書のサブジェクトはその値と一致してはいけません。

    重要

    クライアントX.509 証明書のサブジェクトがO OUDC509ノード X. 証明書の 、 、 属性(または設定されている場合はtlsX509ClusterAuthDNOverride )と完全に一致する場合、クライアント接続は受け入れられます、完全な権限が付与され、ログに警告メッセージが表示されます。

    クラスター ノードの x509 証明書のみが、OOU、および DC の属性が同じ組み合わせを使用する必要があります。

クライアント証明書を使用して認証するには、まずクライアント証明書の subject を MongoDB ユーザーとして $external データベースに追加する必要があります。$external データベースはユーザーの 認証データベース です。

一意の X.509クライアント証明書はそれぞれ 1 人のMongoDBユーザーに対する証明書です。1 つのクライアント証明書を使用して複数のMongoDBユーザーを認証することはできません。

$external認証ユーザー(Kerberos、LDAP、または X.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10 k バイトより大きくすることはできません。

MongoDB 5.0 以降では、証明書にサブジェクト代替名属性が含まれていない場合、mongodmongos で起動時の警告が発せられるようになっています。

以下のプラットフォームは、コモンネームの検証をサポートしていません。

  • iOS 13 以降

  • MacOS 10.15 以降

  • Go 1.15 以降

これらのプラットフォームを使用するクライアントは、CommonName 属性によって指定されているホスト名の x.509 証明書を使用する MongoDB サーバーに対して認証を行いません。

シャーディングされたクラスターとレプリカセットのメンバー間の内部認証には、 キーファイル の代わりに X.509 証明書を使用できます。

TLSが有効になっている場合、メンバー証明書を使用して、シャーディングされたクラスターまたはレプリカセットの内部接続へのメンバーシップを検証します。net.tls.clusterFileおよびnet.tls.certificateKeyFileのオプションを使用して、メンバー証明書ファイルのパスを構成できます。メンバーには次の構成要件があります。

  • クラスター ノードの設定では、認証に使用される属性の少なくとも 1 つに空でない値を指定する必要があります。デフォルトで MongoDB は次のものを受け入れます。

    • 組織 (O)

    • 組織単位 (OU)

    • ドメインコンポーネント (DC)

    MongoDB は、エントリがすべてのノード証明書にわたって完全に一致することを確認します。複数の OU 値を指定する場合、すべての証明書で同一のリストを使用する必要があります。

    net.tls.clusterAuthX509.extensionValue を設定することで、認証に使用する代替属性を指定できます。

  • クラスター ノード設定には同じ net.tls.clusterAuthX509.attributes を含み、一致する値を使用する必要があります。属性の順序は関係ありません。次の例えでは OOU を設定しますが、 DC は設定しません。

    net:
    tls:
    clusterAuthX509:
    attributes: O=MongoDB, OU=MongoDB Server

注意

enforceUserClusterSeparationパラメータを false に設定した場合、次の動作が適用されます。

  • clusterAuthMode を X.509 を許可するオプションに設定することはできません。そうしないと、サーバーが起動しません。サーバーは、clusterAuthModekeyFile の場合にのみ起動します。

  • クライアントは、クラスター メンバーシップ用にサーバーの構成済み属性と一致するO/OU/DC属性を持つユーザーを $externalデータベースに作成できます。

  • ノード証明書を提示するクライアントは、$external データベースのユーザーとして MONGODB-X509 認証を試行できるようになりました。

enforceUserClusterSeparationパラメータをfalseに設定するには、起動時に次のコマンドを実行します。

mongod --setParameter enforceUserClusterSeparation=false

証明書には次の要件があります。

  • 単一の認証局(CA)が、シャーディングされたクラスターまたはレプリカセットのノードに対してすべての X.509 証明書を発行する必要があります。

  • サブジェクト代替名 (SAN) エントリの少なくとも 1 つは、他のクラスター ノードが使用するサーバー ホスト名と一致する必要があります。SAN を比較する際に、MongoDB は DNS 名または IP アドレスのいずれかを比較できます。

    subjectAltName を指定しない場合、 MongoDB は代わりに CN(Common Name、共通名)を比較します。ただし、CN のこの使用は RFC2818 に従って非推奨となります。

キー使用量 と 拡張キー使用量 は、証明書に関連付けられたキーの使用を厳密に定義および制限する X.509 拡張機能です。これらの拡張機能はどちらも任意です。tlsCertificateKeyFile または tlsClusterFile がこれらの拡張機能を省略する証明書を点場合、証明書の使用に制限は適用されません。

tlsCertificateKeyFile または tlsClusterFile に使用される X.509 証明書に EKU(Extended Key Usage)拡張機能が含まれている場合は、次のルールに準拠する必要があります。

  • tlsCertificateKeyFile EKU に serverAuth を含める必要があります。

    extendedKeyUsage = serverAuth
  • tlsClusterFile EKU に clientAuth を含める 必要があります 。

    extendedKeyUsage = clientAuth
  • tlsClusterFile が省略され、tlsCertificateKeyFile のみが設定されている場合、tlsCertificateKeyFile には EKU の serverAuthclientAuth の両方が含まれている必要があります。

    extendedKeyUsage = clientAuth, serverAuth

tlsCertificateKeyFile または tlsClusterFile に使用される X.509 証明書に KU(Key Usage)拡張機能が含まれている場合は、次のように設定します。

  • tlsCertificateKeyFile には KU 拡張機能に digitalSignaturekeyEnciphermentkeyAgreement が含まれている必要があります。

    keyUsage = digitalSignature, keyEncipherment, keyAgreement
  • tlsClusterFile には KU 拡張機能に digitalSignature が含まれている必要があります。

    keyUsage = digitalSignature

TLS は、レプリカセットの各ノード(各 mongod インスタンス)間、またはシャーディングされたクラスター(各 mongod インスタンスと mongos インスタンス)間の認証に使用できます。

内部認証に TLS を使用するには、次の設定を使用します。

重要

--tlsModedisabled以外の値に設定した場合、MongoDB では内部レプリカセット接続のサーバーとクライアント認証の両方に net.tls.certificateKeyFileで指定された証明書が使用されます。この証明書設定は、security.clusterAuthModeX.509 に設定されているかどうかに関係なく適用されます。

mongodインスタンスとmongosインスタンスは証明書鍵ファイルを使用してクライアントに ID を証明しますが、証明書鍵ファイルはメンバーシップ認証に使用することもできます。 クラスター ファイルを指定しない場合、メンバーはメンバーシップ認証に証明書鍵ファイルを使用します。 net.tls.certificateKeyFileまたは--tlsCertificateKeyFileを使用して証明書鍵ファイルを指定します。

証明書キーファイルをクライアント認証とメンバーシップ認証の両方に使用するには、証明書は次のいずれかを行う必要があります。

  • extendedKeyUsage を省略する、または

  • 特定 extendedKeyUsage = serverAuth, clientAuth

戻る

クライアントの認証

項目一覧