AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
MongoDB Branding Shape
Click here >
Docs Menu

接続での TLS/SSL の有効化

このガイドでは、 Kotlin Syncドライバー を使用してMongoDBに接続するときに TLS セキュリティプロトコルを使用する方法を学習できます。

MongoDB インスタンスへの接続で TLS を有効にするには、次の方法があります。

  • 接続stringでの tls パラメータの設定

  • MongoClientSettingsインスタンスの作成時にSslSettings.Builderクラスのenabled()メソッドを使用

注意

DNS シードリスト プロトコルが TLS を有効にする

接続stringの mongodb+srv プレフィックスで示される DNS シードリスト プロトコルを使用して接続する場合、ドライバーは TLS を自動的に有効にします。

DNS シードリストを使用する場合の接続動作の詳細については、サーバー マニュアルの接続文字列ガイドの「 SRV 接続形式」セクションを参照してください。

接続stringを使用して接続で TLS を有効にするには、次のコードに示すように、オプション パラメータで tls オプションを true に設定し、そのstringを MongoClient.create() に渡します。

val mongoClient = MongoClient.create("mongodb+srv://<db_username>:<db_password>@<cluster_url>/?tls=true")

MongoClientSettingsインスタンス内で TLS を有効にするには、 applyToSslSettings()ビルダー メソッドを使用します。 次のコードに示すように、 SslSettings.Builderブロックでenabledプロパティをtrueに設定します。

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
}
.build()
val mongoClient = MongoClient.create(settings)

注意

TLS のデバッグ

TLS 接続の設定に問題が発生した場合は、-Djavax.net.debug=all システムプロパティを使用して有効なログステートメントを表示できます。詳細については、 Java言語ドキュメントの「 SSL/TLS 接続のデバッグ 」を参照してください。

TLS 要求を開始する Kotlin アプリケーションは、アプリケーションの ID を証明し、 Kotlin アプリケーションが対話する他のアプリケーションを検証する暗号化証明書にアクセスする必要があります。 アプリケーション内でこれらの証明書へのアクセスを次の方法で構成できます。

  • JVM 信頼ストアと JVM キー ストアの使用

  • クライアント固有のトラスト ストアとキー ストアの使用

注意

デフォルトでは 、JRE には let の暗号化 などの署名機関からの一般的に使用される多数の公開証明書が含まれています。その結果、 信頼ストアを構成せずに TLS が有効になっているMongoDB Atlasインスタンス、または JRE のデフォルトの証明書ストアで認証局によって証明書が署名されているその他のサーバーに接続するときに TLS を有効にできます。

JVM 信頼ストアには、 Kotlin アプリケーションが対話する他のアプリケーションを安全に識別する証明書が保存されます。 これらの証明書を使用することで、アプリケーションは別のアプリケーションへの接続が本物であり、第三者による改ざんから安全であることを証明できます。

MongoDB インスタンスが、JRE のデフォルトの証明書ストアに存在しない認証局によって署名された証明書を使用する場合、アプリケーションは TLS 要求を開始するために次のシステム プロパティを構成する必要があります。

  • javax.net.ssl.trustStore: クライアントの TLS 証明書を含むトラスト ストアへのパス

  • javax.net.ssl.trustStorePassword: 次の場所で定義されたトラスト ストアにアクセスするためのパスワード: javax.net.ssl.trustStore

これらのプロパティにより、アプリケーションは接続された MongoDB インスタンスによって提示される TLS 証明書を検証できるようになります。

次のターミナルコマンドに示すように、JDK から keytoolコマンドラインツールを使用してトラスト ストアを作成できます。

keytool -importcert -trustcacerts -file <path to certificate authority file>
-keystore <path to trust store> -storepass <password>

注意

デフォルトでは、MongoDB インスタンスはクライアント証明書の検証を実行しません。MongoDB インスタンスをクライアント証明書を検証するように構成した場合は、キー ストアを構成する必要があります。

TLS 要求を開始するアプリケーションは、クライアントが MongoDB サーバーに TLS 証明書を提示するように、次の JVM システム プロパティを設定する必要があります。

  • javax.net.ssl.keyStore: クライアントの TLS/SSL 証明書を含むキーストアへのパス

  • javax.net.ssl.keyStorePassword: で定義されたキー ストアにアクセスするためのパスワード javax.net.ssl.keyStore

keytool または Openssl コマンドラインツールを使用して、キー ストアを作成できます。

TLS を使用してKotlinアプリケーションを構成する方法の詳細については、 Java言語ドキュメントのJSSE リファレンス ガイドを参照してください。

クライアント固有のトラスト ストアとキー ストアを構成するには、 SSLContextクラスのinit()メソッドを使用します。

このガイドの「Java SE SSLContext を介して TLS 構成をカスタマイズする 」セクションで、 SSLContextインスタンスを使用するようにクライアントを構成する方法の例を確認します。

デフォルトでは、ドライバーはサーバーの TLS 証明書に含まれるホスト名がMongoClientの構築時に指定されたホスト名と一致することを確認します。 アプリケーションのホスト名検証を無効にするには、 applytoSslSettings()ビルダー ブロックでビルダーのinvalidHostNameAllowedプロパティをtrueに設定します。

val settings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString("<connection string URI>"))
.applyToSslSettings { builder ->
builder.enabled(true)
builder.invalidHostNameAllowed(true)
}
.build()
val mongoClient = MongoClient.create(settings);

警告

ホスト名検証を無効にすると、アプリケーションは安全でなくなり、有効なクライアントインスタンスとみなされる期限切れの証明書や外部プロセスに対して脆弱になる可能性があります。

アプリケーションが TLS 1.2プロトコルのみを使用するように制限するには、 jdk.tls.client.protocolsシステム プロパティを"TLSv1.2"に設定します。

注意

Java 8 以前の Java ランタイム環境(JRE)では、アップデート リリースでのみ TLS 1.2 プロトコルが有効になっていました。JRE で TLS 1.2 プロトコルが有効になっていない場合は、TLS 1.2 を使用して接続できるように、新しいリリースにアップグレードしてください。

TLS 構成をカスタマイズする必要がある場合は、sslContext ブロックのMongoClient メソッド ビルダに SSLContextオブジェクトを渡すことで、 の プロパティを設定できます。context()applyToSslSettings()

val sslContext = SSLContext.getDefault()
val settings = MongoClientSettings.builder()
.applyToSslSettings { builder ->
builder.enabled(true)
builder.context(sslContext)
}
.build()
val mongoClient = MongoClient.create(settings);

SSLContextクラスの詳細については、SSL コンテキストのAPIドキュメントを参照してください。

OCSP は、X. 509証明書が失効しているかどうかを確認するために使用される標準です。 証明機関は、有効期限が切れる前に X. 509証明書を証明書失効リスト(CRL)に追加して、証明書を無効にすることができます。 クライアントが TLS ハンドシェイク中に X. 509証明書を送信すると、CA の失効サーバーは CRL をチェックし、 goodrevoked 、またはunknownのステータスを返します。

ドライバーは、OCSP の次のバリエーションをサポートします。

  • クライアント駆動型 OCSP

  • OCSP ステープル

次のセクションでは、それらの違いと、アプリケーションでそれらを有効にする方法について説明します。

注意

Kotlin Sync ドライバーは、アプリケーション用に構成された JVM 引数を使用するため、特定のMongoClientインスタンスに対してオーバーライドすることはできません。

クライアント駆動型 OCSP では、クライアントはサーバーから証明書を受信した後、OCSP 要求で証明書を OCSP レスポンダーに送信します。OCSP レスポンダは、証明機関(CA)を使用して証明書のステータスを確認し、クライアントに送信された応答で証明書が有効かどうかを報告します。

アプリケーションでクライアント駆動型 OCSP を有効にするには、次の JVM システム プロパティを設定します。

プロパティ

com.sun.net.ssl.checkRevocation

失効チェックを有効にするには、このプロパティを true に設定します。

ocsp.enable

クライアント駆動型 OCSP を有効にするには、このプロパティを true に設定します。

警告

OCSP レスポンダーが利用できない場合、JDK によって提供される TLS サポートは「ハード フェイル」を報告します。これは、MongoDB Shell や他のドライバーの「ソフト フェイル」動作とは異なります。

OCSP ステープリングは、サーバーが証明機関(CA)から署名された証明書を取得し、それをクライアントへのタイムスタンプ付きの OCSP 応答に含める必要があるメカニズムです。

アプリケーションで OCSP ステープルを有効にするには、次の JVM システム プロパティを設定します。

プロパティ
説明

com.sun.net.ssl.checkRevocation

失効チェックを有効にするには、このプロパティを true に設定します。

jdk.tls.client.enableStatusRequestExtension

OCSP ステープルを有効にするには、このプロパティを に設定します。設定されていない場合、またはtrue

falseに設定されている場合は、証明書失効応答の有無や状態に関係なく、接続を続行できます。

OCSP の詳細については、次のリソースを参照してください。

このガイドで説明したメソッドやタイプの詳細については、次の API ドキュメントを参照してください。