AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

TLS による X.509 認証

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クラスターに接続している場合にのみ、このオプションを接続文字列のプレフィックスに含めます。 MongoClientSettingsオブジェクトを使用している場合は、SchemeプロパティをConnectionStringScheme.MongoDBPlusSrv に設定することで srv形式を指定できます。+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 証明書を使用するには、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>

次のコード例に示すように、X509Certificate2.CreateFromPem() メソッドを使用して .pem形式の証明書を直接提供できます。

var certPem = File.ReadAllText("client.crt");
var keyPem = File.ReadAllText("client.key");
var rsa = RSA.Create();
rsa.ImportFromEncryptedPem(keyPem, "<password>");
var cert = X509Certificate2.CreateFromPem(certPem);
var clientCertificate = cert.CopyWithPrivateKey(rsa);

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>"]),
Scheme = ConnectionStringScheme.MongoDBPlusSrv // Needed when connecting to MongoDB Atlas
};

オペレーティング システムとして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));
}

このページで使用されているMongoDB のメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。

このページで使用されている.NET型の詳細については、次の MSDN ドキュメントを参照してください。