x.509
Overview
X.509 認証メカニズムでは、サーバーとクライアントは TLS プロトコルを使用して X.509 公開鍵証明書を交換します。このメカニズムを使用して、 MongoDB Atlas、 MongoDB Enterprise Advanced、 MongoDB Community Edition を認証できます。
Tip
X.509 メカニズム
.NET/ C#ドライバーで TLS/SSL を使用する方法については、「 TLS/SSL 」を参照してください。
X.509 証明書の詳細については、 MongoDB Serverマニュアルの X.509 を参照してください。
コード プレースホルダー
このページのコード例では、次のプレースホルダーを使用します。
+srv
: MongoDB Atlasクラスターに接続している場合にのみ、このオプションを接続文字列のプレフィックスに含めます。+srv
オプションの詳細については、 MongoDB Serverマニュアルの「 接続文字列形式 」を参照してください。<hostname>
: MongoDBデプロイのネットワーク アドレス。<port>
: MongoDBデプロイのポート番号。このパラメーターを省略すると、ドライバーはデフォルトのポート番号(27017
)を使用します。 MongoDB Atlasクラスターに接続する場合、ポート番号は必要ありません。<X.509 certificate username>
: X. 509 証明書に関連付けられたユーザー名のユーザー名。ユーザー名名は、証明書の識別サブジェクト名と一致する必要があります。このパラメータを省略すると、 MongoDBデプロイは X. 509 証明書からユーザー名を推論します。<path to X.509 certificate>
: X. 509 証明書ファイルへのパス。<X.509 certificate password>
: X.509 証明書のパスワード。
このページのコード例を使用するには、これらのプレースホルダーを独自の値に置き換えます。
アプリケーションでの X.509 認証の使用
認証に X.509 証明書を使用するには、MongoClientSettings
オブジェクトを使用して X. 証明書と証明書のパスワードを指定する必要があります。証明書は PKCS509 #12 (.p12
)形式を使用する必要があります。
Tip
.pem を .p12 に変換する
証明書で PEM( .pem
)形式が使用されている場合は、.p12
形式に変換する必要があります。証明書を変換するには、次のコード例に示すように、openssl
コマンドライン ツールを使用します。
openssl pkcs12 -export -out <.p12 file> -inkey <private key file> -in <.pem file>
openssl-pkcs12
の詳細については、 OpenSSL ドキュメント を参照してください。
また、認証メカニズムとして MONGODB-X509
を指定し、認証ソースとして $external
を指定する必要があります。これらのオプションは接続文字列内、または MongoCredential
オブジェクトを使用して指定できます。対応する構文を確認するには、 Connection String タブまたは MongoCredentialタブを選択します。
var connectionString = "mongodb[+srv]://<hostname>[:<port>]/?authSource=$external&authMechanism=MONGODB-X509"; var settings = MongoClientSettings.FromConnectionString(connectionString); settings.UseTls = true; settings.SslSettings = new SslSettings { ClientCertificates = new List<X509Certificate>() { new X509Certificate2("<path to X.509 certificate>", "<X.509 certificate password>") } };
var credential = MongoCredential.CreateMongoX509Credential("<X.509 certificate username>"); var settings = new MongoClientSettings { Credential = credential, SslSettings = new SslSettings { ClientCertificates = new List<X509Certificate>() { new X509Certificate2("<path to X.509 certificate>", "<X.509 certificate password>") }, }, UseTls = true, Server = new MongoServerAddress("<hostname>"[, "<port>"]), };
トラブルシューティング
オペレーティング システムとしてWindowsを使用している場合、 .NET/ C#ドライバーがメモリ内で X.509
認証を見つけられない問題が発生する可能性があります。このエラーには、次のエラー メッセージが表示されます。
No credentials are available in the security package
この問題を解決するには、次のコードをアプリケーションに追加します。このコードは、アプリケーションに必要な X.509
証明書を生成し、ディスクに保存します。
using (X509Certificate2 certWithKey = certOnly.CopyWithPrivateKey(key)) { return new X509Certificate2(certWithKey.Export(X509ContentType.Pkcs12)); }
API ドキュメント
このページで使用されているMongoDBのメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。
このページで使用されている.NET型の詳細については、次の MSDN ドキュメントを参照してください。