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
/
MongoDBマニュアル
/

x.509

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

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

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

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

クライアント証明書には次のプロパティが必要です。

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

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

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

  • 509クライアント x。識別名(DN )を含む 証明書のサブジェクトは、 x メンバー509 のサブジェクトと 異なる 必要があります。 証明書

    重要

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

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

    MongoDB 配置にtlsX509ClusterAuthDNOverrideが設定されている場合、クライアントは x. 509証明書の subject はその値と異なる必要があります。

    MongoDB 配置にtlsX509ClusterAuthDNOverrideが設定されている場合、クライアントは x. 509証明書のサブジェクトもその値と異なる必要があります。

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

    が x を表示した場合、 mongod / mongosは接続時に警告を記録します。 509証明書はmongod/mongosホスト システム時間から30日以内に期限切れになります。

クライアント証明書を使用して認証するには、まず MongoDB ユーザーとしてクライアント証明書のsubjectの値を追加する必要があります。 一意の x。 509クライアント証明書は、単一の MongoDB ユーザーに対応します。 1 つのクライアント証明書を使用して複数の MongoDB ユーザーを認証することはできません。

$externalデータベースにユーザーを追加します。 $externalデータベースはユーザーの認証データベースです。

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

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

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

  • iOS 13 以降

  • MacOS 10.15 以降

  • Go 1.15 以降

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

シャーディングされたクラスターとレプリカセットのメンバー間の内部認証には x を使用できます。 SCRAM認証メカニズムを使用するキーファイルではなく、 509証明書。

シャーディングされたクラスターまたはレプリカセット(指定されている場合はnet.tls.clusterFile 、およびnet.tls.certificateKeyFile )へのメンバーシップを検証するために使用するメンバー証明書には、次のプロパティが必要です。

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

  • メンバー証明書のsubjectにある識別名( DN )は、次の属性の少なくとも 1 つに空でない値を指定する必要があります。

    • 組織 (O)

    • 組織単位 (OU)

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

  • 組織属性( O )、組織単位属性( OU )、ドメインコンポーネント( DC )は、 net.tls.clusterFile } 証明書とnet.tls.certificateKeyFile証明書の両方からのものと一致する必要があります他のクラスター ノード(または設定されている場合はtlsX509ClusterAuthDNOverride値)。

    一致させるには、証明書がこれらの属性のすべての仕様と一致する必要があります(これらの属性が指定されていない場合も含め)。 属性の順序は関係ありません。

    次の例では、2 つのDNには、 OOUの一致する仕様と、 DC属性の非指定が含まれています。

    CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US
    C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2

    ただし、次の 2 つのDNには、1 つには 2 つのOU仕様が含まれ、もう 1 つの仕様しか含まれていないため、 OU属性と不一致が含まれています。

    CN=host1,OU=Dept1,OU=Sales,O=MongoDB
    CN=host2,OU=Dept1,O=MongoDB
  • マルチクラスター配置では、各クラスターで異なる X. 509ノード証明書を使用する必要があります。 各証明書のOOU 、およびDC識別名(DN)フィールドに一意の値が必要です。

    2 つのクラスターが同じ DN 値を持つ証明書を持っている場合、一方のクラスターで侵害されたサーバーは、もう一方のクラスターのノードとして認証できます。

  • コモンネーム( CN )またはサブジェクト代替名( SAN )のいずれかのエントリは、他のクラスター ノードのサーバー ホスト名と一致する必要があります。 MongoDB 4.2 以降では、 SANを比較する際に、MongoDB は DNS 名または IP アドレスのいずれかを比較できます。 以前のバージョンでは MongoDB は DNS 名のみを比較していました。

    たとえば、クラスターの証明書には次のサブジェクトが含まれる可能性があります。

    subject= CN=<myhostname1>,OU=Dept1,O=MongoDB,ST=NY,C=US
    subject= CN=<myhostname2>,OU=Dept1,O=MongoDB,ST=NY,C=US
    subject= CN=<myhostname3>,OU=Dept1,O=MongoDB,ST=NY,C=US
  • certificateKeyFile として使用される証明書に extendedKeyUsage が含まれている場合、値には clientAuth(「TLS Web クライアント認証」)と serverAuth(「TLS Web サーバー認証」)の両方を含める必要があります。

    extendedKeyUsage = clientAuth, serverAuth
  • clusterFile として使用される証明書に extendedKeyUsage が含まれている場合、値には clientAuth が含まれている必要があります。

    extendedKeyUsage = clientAuth
  • x.509証明書は期限切れであってはなりません

    が x を表示した場合、 mongod / mongosは接続時に警告を記録します。 509証明書はmongod/mongosホスト システム時間から30日以内に期限切れになります。

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

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

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

クライアント認証とメンバーシップ認証の両方にcertificate key fileを使用するには、証明書に次のいずれかが必要です。

  • extendedKeyUsage を省略する、または

  • 特定 extendedKeyUsage = serverAuth, clientAuth

戻る

クライアントの認証

項目一覧