AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

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

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

接続に TLS を有効にすると、 PHPライブラリは次のアクションを実行します。

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

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

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

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

注意

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

Tip

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

MongoDBデプロイへの接続で TLS を有効にするには、 tls接続オプションをtrueに設定します。 これは、MongoDB\Client コンストラクターの uriOptions パラメーターを使用する方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true';
$client = MongoDB\Client($uri);

Tip

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

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

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

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

そのためには、 tlsCAFile接続オプションを使用して、ルート証明書チェーンを含む.pemファイルへのパスを指定します。 これは、MongoDB\Client コンストラクターの uriOptions パラメーターを使用する方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCAFile' => '/path/to/ca.pem',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCAFile=/path/to/ca.pem';
$client = MongoDB\Client($uri);

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

次のコード例は、 driverOptionsパラメータを使用してca_dirオプションを指定する方法を示しています。

<?php
$uri = 'mongodb://<hostname>:<port>';
$uriOptions = ['tls' => true];
$driverOptions = ['ca_dir' => '/path/to/search/'];
$client = new MongoDB\Client($uri, $uriOptions, $driverOptions);

Tip

このオプションは、OpenSSL SSL_CTX_load_verify_locations パラメータとlibreSSL tls_config_set_ca_path パラメータに相当します。

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

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

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

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

注意

Let's Encrypt OCSP の廃止

Let's Encrypt は新しい証明書の OCSP サポートを終了しました。Let's Encrypt が発行した新しい証明書に OCSP 応答者 URL が含まれていない場合があります。OCSP 失効チェックは、証明書に OCSP URI が含まれている場合にのみ発生するため、OCSP URL がないことは予想され、MongoDB 配置に必ずしも問題があることを意味しません。

PHPライブラリが OCSP エンドポイントとの接続を停止するには、 tlsDisableOCSPEndpointCheck接続オプションをtrueに設定します。 これは、MongoDB\Client コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsDisableOCSPEndpointCheck' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsDisableOCSPEndpointCheck=true';
$client = MongoDB\Client($uri);

注意

tlsDisableOCSPEndpointCheckオプションがtrueに設定されている場合でも、 PHPライブラリはサーバーの証明書にステープリングされた OCSP 応答を検証します。

OCSP を使用する代わりに、 PHPライブラリに対して 指示を使用して、CA によって公開された証明書失効リスト(CRL)とサーバーの証明書を照合できます。 そのためには、CRL のファイルパスにcrl_fileオプションを設定します。 次のコード例に示すように、 MongoDB\ClientコンストラクターのdriverOptionsパラメーターにこのオプションを含めます。

<?php
$uri = 'mongodb://<hostname>:<port>';
$uriOptions = ['tls' => true];
$driverOptions = ['crl_file' => '/path/to/file.pem'];
$client = new MongoDB\Client($uri, $uriOptions, $driverOptions);

Tip

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

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

これは、MongoDB\Client コンストラクターの uriOptions パラメーターを使用する方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCertificateKeyFile' => '/path/to/client.pem',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem';
$client = MongoDB\Client($uri);

重要

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

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

証明書ファイル内の秘密キーが暗号化されている場合は、 tlsCertificateKeyFilePasswordオプションを使用してパスワードを入力する必要があります。 これは、MongoDB\Client コンストラクターの uriOptions パラメーターを使用する方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsCertificateKeyFile' => '/path/to/client.pem',
'tlsCertificateKeyFilePassword' => '<passphrase>',
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=/path/to/client.pem&tlsCertificateKeyFilePassword=<passphrase>';
$client = MongoDB\Client($uri);

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

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

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

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

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

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

注意

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

安全でない TLS を有効にするには、 tlsInsecure接続オプションをtrueに設定します。 これは、MongoDB\Client コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsInsecure' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true';
$client = MongoDB\Client($uri);

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

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsAllowInvalidCertificates' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidCertificates=true';
$client = MongoDB\Client($uri);

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

$uri = 'mongodb://<hostname>:<port>';
$options = [
'tls' => true,
'tlsAllowInvalidHostnames' => true,
];
$client = new MongoDB\Client($uri, $options);
$uri = 'mongodb://<hostname>:<port>/?tls=true&tlsAllowInvalidHostnames=true';
$client = MongoDB\Client($uri);

警告

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

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

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

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