接続での TLS の有効化
項目一覧
Overview
このガイドでは、TLS セキュリティ プロトコルを使用して MongoDB インスタンスに接続する方法を学習できます。
TLS を使用するように接続を構成するには、TLS オプションを有効にし、検証用の証明書を提供します。
Tip
TLS の詳細については、 Wikipedia の トランスポート層セキュリティ に関するエントリを参照してください。
TLS の有効化
MongoDB インスタンスへの接続で TLS を有効にするには、次の方法があります。
MongoClientOptions
オブジェクトでtls
オプションをtrue
に設定する接続stringで
tls
オプションをtrue
に設定する
MongoClientOptions
オブジェクトでtls
をtrue
に設定すると、 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 を構成するための追加オプションが用意されています。 テスト目的では、 tlsAllowInvalidHostnames
、 tlsAllowInvalidCertificates
、 tlsInsecure
クライアント オプションを設定できます。
tlsAllowInvalidHostnames
オプションをtrue
に設定するとホスト名検証が無効になり、 tlsAllowInvalidCertificates
をtrue
に設定すると証明書の検証が無効になります。 tlsInsecure
オプションをtrue
に設定すると、証明書とホスト名の両方の検証が無効になります。
警告
実稼働環境でこれらのオプションのいずれかを指定すると、アプリケーションは安全でなくなり、期限切れの証明書や有効なクライアントインスタンスをみなした外部プロセスに対して脆弱になる可能性があります。
クライアント オプションの完全なリストについては、「 接続オプション 」を参照してください。
証明書の構成
TLS 要求を正常に開始するには、アプリケーションが暗号化証明書を参照して ID を証明する必要があります。 TLS を使用して MongoDB に接続するには、証明書を PEM ファイルとして保存する必要があります。
重要
本番環境で使用する場合、MongoDB の配置には、同一の認証局によって生成および署名された有効な証明書を使用する必要があります。 テストには、自己署名証明書を使用できます。
次のリストでは、TLS との接続を確立するために必要なコンポーネントについて説明します。
TLS コンポーネント | 説明 |
---|---|
認証局(CA) | TLS 接続を行う場合、信頼する 1 つ以上の証明書機関。 |
クライアント証明書 | 暗号化されたネットワーク接続を確立するためにアプリケーションの ID をサーバーが確認できるようにするデジタル証明書とキー。 |
証明書鍵 | クライアント証明書秘密キー ファイル。 このキーは、多くの場合、証明書ファイル自体に含まれています。 |
パスフレーズ | プライベートクライアントキーが暗号化されている場合、復号化するためのパスワード。 |
Tip
PEM 形式の詳細については、 Wikipedia の プライバシーが強化されたメール に関するエントリを参照してください。
クライアントでの証明書の参照
クライアントが接続する前にサーバーが証明書を検証できるように、 MongoClientOptions
オブジェクトで証明書を参照する必要があります。 証明書は、次の方法で参照できます。
証明書を保存するための
SecureContext
オブジェクトの作成(推奨)証明書を指すファイルパス文字列を指定する
証明書を保存するための
Buffer
オブジェクトの作成
証明書を保存するための SecureContext オブジェクトの作成
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 の例
この例では、 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 を有効にする方法の詳細については、次のサーバー マニュアル ドキュメントを参照してください。