接続での TLS の有効化
Overview
このガイドでは、 .NETフレームワークの基礎となる TLS/SSL サポートを使用して、 TLS/SSL セキュリティプロトコルを使用してMongoDBインスタンスに接続する方法を説明します。TLS/SSL を使用するように接続を構成するには、 string接続文字列または MongoClientSettings のいずれかで TLS/SSL 設定を有効にします。
TLS の有効化
デフォルトでは、MongoDB インスタンスに接続するときに TLS は無効になっています。 インスタンスへの接続に TLSMongoDB MongoClientSettings
stringを有効にするには、{0 オブジェクトの プロパティを使用する方法と、 接続 のパラメーターを使用する方法の 2 通りがあります。
注意
DNS シードリスト プロトコルを使用して接続する場合、ドライバーはデフォルトで TLS/SSL を有効にします。 これを無効にするには、接続stringまたは MongoClientSettings
インスタンスで tls
または ssl
パラメータの値を false
に設定します。
DNS シードリストを使用する場合の接続動作の詳細については、サーバー マニュアルの「 SRV 接続形式」セクションを参照してください。
MongoClientSettings
オブジェクトで TLS を有効にするには、 UseTls
プロパティをtrue
に設定します。
var settings = new MongoClientSettings { UseTls = true }; var client = new MongoClient(settings);
接続文字列 を使用して TLS を有効にするには、MongoClient
コンストラクターに渡される接続string string 、パラメーター tls
に true
の値を割り当てます。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true");
クライアント証明書の構成
MongoClientSettings
を使用して X.509 証明書を構成できます。 次のコード サンプルでは、パスワードmySuperSecretPassword
で保護されているclient.p12
という名前の証明書ファイルを使用して新しい X.509 証明書オブジェクトを作成します。 次に、コードはこの証明書をMongoClientSettings
のSslSettings.ClientCertificates
配列に追加します。
var cert = new X509Certificate2("client.p12", "mySuperSecretPassword"); var settings = new MongoClientSettings { SslSettings = new SslSettings { ClientCertificates = new[] { cert } }, UseTls = true };
重要
パスワードを使用して証明書をロードする場合、証明書オブジェクトには秘密キーが含まれている必要があります。 含めない場合、証明書はサーバーに渡されません。
AllowInsecureTls
TLS が有効になっている場合、.NET/C# ドライバーはサーバーが提示した証明書を自動的に検証します。 コードをテストするときは、証明書の検証を無効にできます。 これは安全でない TLS と呼ばれます。
安全でない TLS を使用する場合、唯一の要件はサーバーが X.509 証明書を提示することです。 次のいずれかに当てはまる場合でも、ドライバーは証明書を受け入れます。
サーバーのホスト名と証明書のサブジェクト名(またはサブジェクトの別名)が一致しません。
証明書の有効期限が切れているか、まだ有効ではありません。
証明書のチェーン内に信頼できるルート証明書がありません。
証明書の目的がサーバー識別には無効です。
安全でない TLS を許可するには、MongoClientSettings
オブジェクトの プロパティを使用する方法と、 接続stringのパラメーターを使用する方法の 2 通りがあります。
MongoClientSettings
オブジェクトで安全でない TLS を許可するには、 AllowInsecureTls
プロパティをtrue
に設定します。
var settings = new MongoClientSettings { UseTls = true, AllowInsecureTls = true }; var client = new MongoClient(settings);
接続stringを使用して安全でない TLS を許可するには、接続stringパラメータ tlsInsecure
に true
の値を割り当てます。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsInsecure=true");
警告
本番環境では常にこのオプションをfalse
に設定してください。 セキュリティ上の理由から、サーバー証明書が適切に検証されていることが重要です。
証明書の失効を確認する
X.509 証明書が信頼できなくなった場合、つまり秘密キーが侵害された場合、証明機関は証明書を取り消します。
デフォルトでは、.NET/C# ドライバーは接続前にサーバーの証明書が失効しているかどうかを確認しません。 失効チェックは、MongoClientSettings
または接続stringを使用して有効にできます。
MongoClientSettings
を使用して失効チェックを有効にするには、 SslSettings.CheckCertificateRevocation
をtrue
に設定します。
var settings = new MongoClientSettings { SslSettings = new SslSettings { CheckCertificateRevocation = true }, UseTls = true };
接続stringを使用して失効チェックを有効にするには、接続stringパラメータ tlsDisableCertificateRevocationCheck
に false
の値を割り当てます。
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");
注意
.NET/C#SslStream
ドライバーはデフォルトでは失効をチェックしません。これは .NET フレームワーク における クラスのデフォルトの動作であるためです。 .NET 標準
オペレーティング システムによる失効チェック
.NET/C# ドライバーは、Windows、macOS、および Linux で異なる方法で次の失効チェック メカニズムをサポートします。
オンライン証明書ステータスプロトコル (OCSP) 、失効をチェックするための一般的なメカニズム
OCSP ステープリング 、サーバーが証明書とともにクライアントへのタイムスタンプ付きの OCSP 応答を含めるメカニズム
証明書失効リスト(CRL)、 、OCSP の代替手段
Windows
Windows では、.NET/C# ドライバーは、.NET フレームワークと .NET Core の両方で、OCSP、OCSP ステープリング、および OCSP なしの CRL をサポートしています。
警告
Windows では、OCSP レスポンダーが利用できない場合、.NET/C# ドライバーは「ハード フェイル」を報告し、TLS ハンドシェイクをキャンセルします。 他のオペレーティングシステムとドライバーは「ソフト フェイル」を報告し、接続を続行します。
MacOS
macOS では、.NET/C# ドライバーは OCSP および OCSP ステープリングをサポートしています。
.NET Core 2.0 以降、ドライバーは OCSP を持たないCRL をサポートしていません。
Linux
Linux では、.NET/C# ドライバーは OCSP、OCSP ステープリング、および OCSP なしの CRL をサポートします。
API ドキュメント
このガイドで説明した接続オプションの詳細については、次の API ドキュメントを参照してください。