Overview
このガイドでは、 .NETフレームワーク の基礎となる TLS/SSL サポートを使用して、TLS/SSL セキュリティプロトコルでMongoDBインスタンスに接続する方法を学習できます。TLS/SSL を使用するように接続を構成するには、接続文字列 または MongoClientSettings のいずれかで TLS/SSL 設定を有効にします。
重要
TLS 1.2
.NET/ C#ドライバーは TLS 1.2 以上のみをサポートしています。
TLS の有効化
デフォルトでは、MongoDB インスタンスに接続するときに TLS は無効になっています。 MongoDBインスタンスへの接続に TLS を有効にするには、MongoClientSettings オブジェクトの プロパティを使用する方法と、 接続stringのパラメーターを使用する方法の 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#ドライバーは、 .NETフレームワークと.NET標準の両方における SslStreamクラスのデフォルトの動作であるため、デフォルトでは失効をチェックしません。
オペレーティング システムによる失効チェック
.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 をサポートします。
注意
Let's Encrypt OCSP の廃止
Let's Encrypt は新しい証明書の OCSP サポートを終了しました。Let's Encrypt が発行した新しい証明書に OCSP 応答者 URL が含まれていない場合があります。OCSP 失効チェックは、証明書に OCSP URI が含まれている場合にのみ発生するため、OCSP URL がないことは予想され、MongoDB 配置に必ずしも問題があることを意味しません。
API ドキュメント
このガイドで説明した接続オプションの詳細については、次の API ドキュメントを参照してください。