Docs Menu
Docs Home
/ / /
Kotlin Sync ドライバー
/

接続での TLS の有効化

項目一覧

  • Overview
  • TLS の有効化
  • 証明書の構成
  • JVM トラスト ストアを構成する
  • JVM キー ストアを構成する
  • クライアント固有の信頼ストアとキー ストアを構成する
  • ホスト名検証を無効化する
  • TLS 1.2 への接続のみを制限する
  • Java SE SSLContext を介して TLS 構成をカスタマイズする
  • オンライン証明書ステータスプロトコル (OCSP)
  • クライアント駆動型 OCSP
  • OCSP ステープル
  • API ドキュメント

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

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

  • 接続 での {0 パラメータの設定tlsstring

  • 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システム プロパティを使用して有効なログ ステートメントを表示できます。 「 SSL/TLS 接続のデバッグ 」を参照してください。 詳細については、Java 言語ドキュメントを参照してください。

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 -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

次のキー ツール を使用してキー ストアを作成できます: または Opensl コマンドライン ツール。

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

クライアント固有のトラスト ストアとキー ストアを構成するには、 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 MongoClientSSLContext を渡すことで、context() の プロパティを設定できます オブジェクトをapplyToSslSettings() ブロック内の メソッド ビルダに渡すようにします。

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

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

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
Set this property to true to enable OCSP stapling.

If unset or set to false, the connection can proceed regardless of the presence or status of the certificate revocation response.

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

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

戻る

接続オプション