Docs Menu
Docs Home
/ / /
C++ ドライバー
/

トランスポート層セキュリティ (TLS) の構成

項目一覧

  • Overview
  • TLS の有効化
  • Specify a CA File
  • CA ディレクトリの指定
  • 証明書の失効を確認する
  • OCSP
  • 証明書失効リスト
  • クライアント証明書の提示
  • キー パスワードの入力
  • AllowInsecureTls
  • API ドキュメント

このガイドでは、 TLS の使用方法を説明します。 プロトコルを使用して、 MongoDBデプロイへの接続を保護します。

接続に TLS を有効にすると、 C++ドライバーは次のアクションを実行します。

  • TLS を使用して MongoDB 配置に接続

  • 配置の証明書を検証します

  • 証明書が配置を認証することを確認する

MongoDBTLS 用の 配置の構成方法については、 マニュアルの「 TLS 構成ガイド MongoDB Server」を参照してください。

注意

このページでは、TLS/SSL に関する事前の知識と、有効な証明書にアクセスすることを前提としています。 TLS/SSL、PKI(公開鍵基盤)証明書、認証局(CA)の詳細な説明は、このドキュメントの範囲外です。

Tip

C++ドライバーは、ほとんどの TLS 動作をMongoDB Cドライバーに委任します。 構成手順や期待される動作など、 Cドライバーが TLS を処理する方法について詳しくは、 Cドライバーのドキュメントの「 TLS の構成」を参照してください。

インスタンスへの接続で TLSMongoDB tlstruestringを有効にするには、次の例に示すように、 接続 で {0 接続オプションを に設定します。

mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");

Tip

接続stringに SRV 接続形式を指定する +srv の変更が含まれている場合、接続では TLS はデフォルトで有効になります。

SRV 接続形式の詳細については、 MongoDB Serverのドキュメントの「 SRV 接続形式 」を参照してください。

TLS ハンドシェイク中に、MongoDB 配置は ID を確立するために、アプリケーションに証明書鍵ファイルを提示します。 通常、配置の証明書は既知の CA によって署名されており、アプリケーションはこの CA に依存して証明書を検証します。

ただし、テスト中は、独自の CA として動作する必要がある場合があります。 この場合、別の CA によって署名された証明書ではなく CA 証明書を使用するようにC++ドライバーに指示する必要があります。

そのためには、ルート証明書チェーンを含む.pemファイルへのパスを指定します。 これは、mongocxx::options::tlsオブジェクトにプロパティを設定する方法と、 接続stringで tlsCAFile パラメータを使用する方法の 2 つがあります。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.pem_file("/path/to/file.pem");
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsCAFile=/path/to/file.pem");

TLS サポートに OpenSSL または LiveSSL( libtls )を使用している場合は、 C++ドライバーにディレクトリ内の CAファイルを検索するように指示することもできます。 ドライバーは、 tlsCAFileまたはpem_fileオプションで指定されたパスで CAファイルを見つけられない場合、このディレクトリを検索します。

次のコード例は、 ca_dirオプションを使用してドライバーが検索するディレクトリを指定する方法を示しています。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.ca_dir("/path/to/search/");
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);

Tip

このオプションは、OpenSSL SSL_CTX_load_verify_locations に対応します パラメータと LiveSSL tls_config_set_ca_path 許可されます。

X. 509証明書が信頼できなくなった場合(例、秘密キーが侵害された場合)、CA は証明書を取り消します。 C++ドライバーには、サーバーの証明書が失効しているかどうかを確認する 2 つの方法が含まれています。

オンライン証明書ステータスプロトコル (OCSP) プロセスは、接続しているMongoDB Serverのバージョンによって異なります。

  • MongoDB v 4.4以降:サーバーはタイムスタンプ付きの OCSP 応答を証明書にステープリングします。 C++ドライバーは、OCSP 応答に対して証明書を検証します。 CA によって証明書が取り消されている場合、または OCSP 応答がその他の方法で無効な場合、TLS ハンドシェイクは失敗します。

  • MongoDB v 4.3またはそれ以前:サーバーは OCSP エンドポイントを提供し、 C++ドライバーはこのエンドポイントに直接アクセスします。 次に、 C++ドライバーは OCSP 応答に対して証明書を検証します。 CA が証明書を失効していない場合、OCSP 応答が無効または不正であっても、TLS ハンドシェイクは続行されます。

C++ドライバーが OCSP エンドポイントと接続するのを停止するには、次のコード例に示すように、 接続stringで tlsDisableOCSPEndpointCheck 接続オプションを true に設定します。

mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsDisableOCSPEndpointCheck=true");

OCSP を使用する代わりに、 C++ドライバーに指示して、CA によって公開された証明書失効リスト(CRL)でサーバーの証明書を確認できます。

次のコード例は、 crl_fileオプションを使用して CA からの.pemファイルへのパスを指定する方法を示しています。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.crl_file("/path/to/file.pem");
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);

Tip

CRLファイルは、 .pemまたは.der形式で指定できます。

一部のMongoDB配置では、接続するすべてのアプリケーションが ID を証明するクライアント証明書を提示する必要があります。 C++ドライバーが提示するクライアント証明書を指定するには、証明書と秘密キーを含む.pemファイルのファイルパスを指定します。

これは、mongocxx::options::tlsオブジェクトにプロパティを設定する方法と、 接続stringで tlsCertificateKeyFile パラメータを使用する方法の 2 つがあります。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.pem_file("/path/to/file.pem");
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/file.pem");

重要

クライアント証明書と秘密キーは同じ.pemファイル内になければなりません。 異なるファイルに保存されている場合は、それらを連結する必要があります。 次の例は、キー ファイルと証明書ファイルを Unix システム上のcombined.pemという 3 つ目のファイルに連結する方法を示しています。

$ cat key.pem cert.pem > combined.pem

証明書ファイル内の秘密キーが暗号化されている場合は、パスワードを入力する必要があります。 これは、mongocxx::options::tlsオブジェクトにプロパティを設定する方法と、 接続stringで tlsCertificateKeyFilePassword パラメータを使用する方法の 2 つがあります。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.pem_file("/path/to/file.pem");
tls_options.pem_password("<password>");
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/file.pem&tlsCertificateKeyFilePassword=<password>");

TLS が有効になっている場合、 C++ドライバーはサーバーが提示する証明書を自動的に検証します。 コードをテストするときは、この検証を無効にできます。 これは安全でない TLS と呼ばれます。

安全でない TLS が有効になっている場合、ドライバーは X. 509証明書の提示のみを必要としサーバー。 次のいずれかに当てはまる場合でも、ドライバーは証明書を受け入れます。

  • サーバーのホスト名と証明書のサブジェクト名(またはサブジェクトの別名)が一致しません。

  • 証明書の有効期限が切れているか、まだ有効ではありません。

  • 証明書のチェーン内に信頼できるルート証明書がありません。

  • 証明書の目的がサーバー識別には無効です。

注意

安全でない TLS が有効になっている場合でも、クライアントとサーバー間の通信は TLS で暗号化されます。

安全でない TLS を有効にするには、次のコード例に示すように、 接続stringで tlsInsecure 接続オプションを true に設定します。

mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true");

証明書の検証のみを無効にするには、 tlsAllowInvalidCertificatesオプションをtrueに設定し、 tlsInsecureオプションをfalseに設定します(または省略)。

mongocxx::options::client client_options;
mongocxx::options::tls tls_options;
tls_options.allow_invalid_certificates(true);
client_options.tls_opts(tls_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true");
mongocxx::client client(uri, client_options);
mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidCertificates=true");

ホスト名検証のみを無効にするには、 tlsAllowInvalidHostnamesオプションをtrueに設定し、 tlsInsecureオプションをfalseに設定します(または省略)。

mongocxx::uri uri("mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidHostnames=true");

警告

本番環境では を使用しないでください

本番環境では、 tlsInsecuretlsAllowInvalidCertificatestlsAllowInvalidHostnamesオプションは常にfalseに設定します。

本番環境でこれらのオプションのいずれかをtrueに設定すると、アプリケーションは安全でなくなり、期限切れの証明書や有効なクライアント インスタンスとみなされる外部プロセスに対して脆弱になる可能性があります。

C++ドライバーの TLS 構成の詳細については、次のAPIドキュメントを参照してください。

戻る

接続オプションの指定