Docs Menu
Docs Home
/ / /
Node.js
/ /

接続での TLS の有効化

項目一覧

  • Overview
  • TLS の有効化
  • 証明書の構成
  • クライアントでの証明書の参照
  • 証明書を保存するための SecureContext オブジェクトの作成
  • 証明書ファイルパスの指定
  • 証明書を保存するためのバッファ オブジェクトの作成
  • SecureContext の例
  • 詳細情報
  • API ドキュメント

このガイドでは、TLS セキュリティ プロトコルを使用して MongoDB インスタンスに接続する方法を学習できます。

TLS を使用するように接続を構成するには、TLS オプションを有効にし、検証用の証明書を提供します。

Tip

MongoDB インスタンスへの接続で TLS を有効にするには、次の方法があります。

  • MongoClientOptionsオブジェクトで tlsオプションをtrueに設定する

  • 接続stringで tls オプションを true に設定する

MongoClientOptionsオブジェクトでtlstrueに設定すると、 MongoClientインスタンスは TLS に接続できます。

const client = new MongoClient(uri, { tls: true });

接続stringで tls オプションを true に設定すると、MongoClient インスタンスは TLS に接続できます。

const uri = "mongodb://<hostname>:<port>?tls=true";
const client = new MongoClient(uri, myClientSettings);

注意

MongoDBに接続するときに 接続stringで +srv 変更を指定して DNS SRV レコードを使用する場合は、接続で TLS がデフォルトで有効になります。 これを無効にするには、接続stringまたは MongoClientOptions オブジェクトで tls または ssl パラメータの値を false に設定します。

DNS シードリストを使用する場合の接続動作の詳細については、サーバー マニュアルの「 SRV 接続形式」セクションを参照してください。

tlsクライアント オプションに加えて、ドライバーには接続で TLS を構成するための追加オプションが用意されています。 テスト目的では、 tlsAllowInvalidHostnamestlsAllowInvalidCertificatestlsInsecureクライアント オプションを設定できます。

tlsAllowInvalidHostnamesオプションをtrueに設定するとホスト名検証が無効になり、 tlsAllowInvalidCertificatestrueに設定すると証明書の検証が無効になります。 tlsInsecureオプションをtrueに設定すると、証明書とホスト名の両方の検証が無効になります。

警告

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

クライアント オプションの完全なリストについては、「 接続オプション 」を参照してください。

TLS 要求を正常に開始するには、アプリケーションが暗号化証明書を参照して ID を証明する必要があります。 TLS を使用して MongoDB に接続するには、証明書を PEM ファイルとして保存する必要があります。

重要

本番環境で使用する場合、MongoDB の配置には、同一の認証局によって生成および署名された有効な証明書を使用する必要があります。 テストには、自己署名証明書を使用できます。

次のリストでは、TLS との接続を確立するために必要なコンポーネントについて説明します。

TLS コンポーネント
説明
認証局(CA)
TLS 接続を行う場合、信頼する 1 つ以上の証明書機関。
クライアント証明書
暗号化されたネットワーク接続を確立するためにアプリケーションの ID をサーバーが確認できるようにするデジタル証明書とキー。
証明書鍵
クライアント証明書秘密キー ファイル。 このキーは、多くの場合、証明書ファイル自体に含まれています。
パスフレーズ
プライベートクライアントキーが暗号化されている場合、復号化するためのパスワード。

クライアントが接続する前にサーバーが証明書を検証できるように、 MongoClientOptionsオブジェクトで証明書を参照する必要があります。 証明書は、次の方法で参照できます。

  • 証明書を保存するためのSecureContextオブジェクトの作成(推奨)

  • 証明書を指すファイルパス文字列を指定する

  • 証明書を保存するためのBufferオブジェクトの作成

TLS 接続を構成するには、 secureContextオプションを使用することを推奨します。 SecureContextオブジェクトは Node.js のネイティブであり、すべての TLS オプションを単一の再利用可能なオブジェクトに保持できます。

SecureContextオブジェクトを作成するには、 tlsモジュールからcreateSecureContext()メソッドをインポートします。 次に、 createSecureContext()メソッドを呼び出し、オプション パラメータで証明書の内容を渡します。 このメソッドは、SecureContext オブジェクトで使用できるMongoClientOptions オブジェクトを返します。

次のコードは、 SecureContextオブジェクトを作成し、それをクライアントに渡す方法を示しています。

// Create a SecureContext object
const secureContext = tls.createSecureContext({
ca: fs.readFileSync(`<path to CA certificate>`),
cert: fs.readFileSync(`<path to public client certificate>`),
key: fs.readFileSync(`<path to private client key>`),
});
// Pass the SecureContext as a client option
const client = new MongoClient(uri, { tls: true, secureContext });

createSecureContext()メソッドとtls パッケージの詳細については、 Node.js TLS API ドキュメントを参照してください。

SecureContextオブジェクトを使用する実行可能な例については、「 SecureContext の例え 」を参照してください。

TLS に接続しているときに証明書を取得するためのクライアント オプションとして証明書のファイルパスを含めることができます。

次のコードは、 MongoClientで証明書ファイルパスをオプションとして指定する方法を示しています。

// Pass filepaths as client options
const client = new MongoClient(uri, {
tls: true,
tlsCAFile: `<path to CA certificate>`,
tlsCertificateFile: `<path to public client certificate>`,
tlsCertificateKeyFile: `<path to private client key>`,
});

TLS に接続するには、クライアント オプションで証明書ファイルの内容をBufferオブジェクトとして渡します。

次のコードは、証明書ファイルの内容を読み取り、結果のBufferオブジェクトをMongoClientのオプションとして渡す方法を示しています。

// Read file contents
const ca = fs.readFileSync(`<path to CA certificate>`);
const cert = fs.readFileSync(`<path to public client certificate>`);
const key = fs.readFileSync(`<path to private client key>`);
// Pass Buffers as client options
const client = new MongoClient(uri, { tls: true, ca, cert, key });

この例では、 SecureContextオブジェクトと TLS オプションを含むMongoClientインスタンスを作成する方法を示します。 この例では MongoDB に接続し、検索クエリを実行します。

import { MongoClient } from "mongodb";
import * as fs from "fs";
import * as tls from "tls";
// Replace the uri string with your connection string.
const uri = "<connection uri>";
// Replace the filepaths with your certificate filepaths.
const secureContext = tls.createSecureContext({
ca: fs.readFileSync(`<path to CA certificate>`),
cert: fs.readFileSync(`<path to public client certificate>`),
key: fs.readFileSync(`<path to private client key>`),
});
// Create a client with the secureContext option
const client = new MongoClient(uri, { tls: true, secureContext });
async function run() {
try {
const db = client.db("myDB");
const myColl = db.collection("myColl");
const doc = await myColl.findOne({});
console.log(doc);
} finally {
await client.close();
}
}
run().catch(console.dir);

接続で TLS を有効にする方法の詳細については、次のサーバー マニュアル ドキュメントを参照してください。

戻る

ネットワーク圧縮