Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/ / /
Scala ドライバー
/ /

TLS/SSL

By default, the driver supports TLS/SSL connections to MongoDB servers using the underlying support for TLS/SSL provided by the JDK. This can be changed by utilizing the extensibility of the Java SE API.

TLS/SSL を使用するようにドライバーを構成するには、 ConnectionStringまたはMongoClientSettingsインスタンスでオプションを指定します。

次のインポート ステートメントを含めます。

import org.mongodb.scala._

ConnectionString で TLS/SSL を指定するには、 接続stringの一部として ssl=true を指定します。

val mongoClient: MongoClient = MongoClient("mongodb://localhost/?ssl=true")

次のインポート ステートメントを含めます。

import org.mongodb.scala._

MongoClientSettingsインスタンスで TLS/SSL を指定するには、 enabledプロパティをtrueに設定します。

val settings = MongoClientSettings.builder()
.applyToSslSettings((builder: SslSettings.Builder) => builder.enabled(true))
.build()
val client = MongoClient(settings)

次のインポート ステートメントを含めます。

import javax.net.ssl.SSLContext

MongoClientSettingsjavax.net.ssl.SSLContextを指定するには、 sslContextプロパティを設定します。

val sslContext: SSLContext = ...
val settings = MongoClientSettings.builder()
.applyToSslSettings((builder: SslSettings.Builder) => {
builder.enabled(true)
builder.context(sslContext)
})
.build()
val client = MongoClient(settings)

デフォルトでは、ドライバーはサーバーの SSL 証明書に含まれるホスト名がMongoClientの構築時に指定されたホスト名と一致することを確認します。

アプリケーションでホスト名検証を無効にする必要がある場合は、 MongoClientSettingsでこれを明示的に指定する必要があります。

val settings = MongoClientSettings.builder()
.applyToSslSettings((builder: SslSettings.Builder) => {
builder.enabled(true)
builder.invalidHostNameAllowed(true)
})
.build()

This section is based on the documentation for Oracle JDK, so some parts may be inapplicable to your JDK or the custom TLS/SSL implementation that you use.

javax.net.ssl.SSLContext.init(KeyManager[] km, TrustManager[] tm, SecureRandom random)を使用してクライアントに固有のトラスト ストアとキー ストアを構成することも、JVM のデフォルトのものを設定することもできます。

一般的なアプリケーションでは、サーバーによって提示された TLS/SSL 証明書をクライアントが検証できるようにするために、いくつかの JVM システム プロパティを設定する必要があります。

  • javax.net.ssl.trustStore: 署名機関の証明書を含むトラスト ストアへのパス

  • javax.net.ssl.trustStorePassword: このトラスト ストアにアクセスするためのパスワード

信頼ストアは通常、JDK の一部として提供されるkeytoolコマンドライン プログラムを使用して作成されます。

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

一般的なアプリケーションでは、クライアントが MongoDB サーバーに TLS/SSL クライアント証明書を提示するようにするために、いくつかの JVM システム プロパティも設定する必要があります。

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

  • javax.net.ssl.keyStorePassword: このキー ストアにアクセスするためのパスワード

キー ストアは通常、keytool またはopenssl コマンドライン プログラムを使用して作成されます。例、クライアント証明書とその秘密キー を含むファイルがあり、 PKCS #12 形式でキー ストアを作成する場合は、次のコマンドを実行できます。

openssl pkcs12 -export -in <path to client certificate & private key file>
-out <path to key store> -passout pass:<trust store password>

TLS/SSL 用のJavaアプリケーション構成の詳細については、 JSSE リファレンス ガイド を参照してください。

アプリケーションによっては、TLS 1.2プロトコルのみを強制したい場合があります。 これを行うには、 jdk.tls.client.protocolsシステム プロパティをTLSv1.2に設定します。

Java 8が開始する前の Java ランタイム環境では、前のセクションに示されているように、後の更新でのみ TLS 1.2プロトコルが有効になっていました。 Java 8より前の Java ランタイム環境で TLS 1.2プロトコルの使用を強制するようにするには、アップデートで TLS 1.2が有効になっていることを確認します。

注意

ドライバーは、個別のMongoClient単位でデフォルトで OCSP を有効にすることはできません。

クライアント駆動型 OCSP を有効にするには、アプリケーションで次の JVM システムとセキュリティ プロパティを設定する必要があります。

  • com.sun.net.ssl.checkRevocation: trueに設定すると、このシステム プロパティは失効チェックを有効にします。

  • ocsp.enable: trueに設定すると、このセキュリティ プロパティはクライアント駆動型 OCSP を有効にします

クライアント駆動型 OCSP を使用するようにアプリケーションを構成するには、TLS を使用してサーバーに接続するようにアプリケーションがすでに設定されている必要があります。 クライアント駆動型 OCSP を有効にするには、これらのシステム プロパティを設定する必要があります。

注意

JDK によって提供される TLS のサポートでは、 mongoshや「ソフト フェイル」動作を使用するドライバーとは対照的に、OCSP レスポンダーが使用できない場合に「ハード フェイル」動作が利用されます。

重要

TLS 1.3プロトコルを使用する Java ランタイム環境で OCSP ステープリングを使用している場合、次の例外が発生する可能性があります(Java 11以降では、デフォルトで TLS 1.3が使用されます)。

javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request

この例外は、Java 11以上の TLS 1.3の既知の問題によるものです。 TLS 1.3プロトコルで動作する Java ランタイム環境を使用する場合にこの例外を回避するには、アプリケーションに TLS 1.2プロトコルを使用するように強制します。 これを行うには、 jdk.tls.client.protocolsシステム プロパティをTLSv1.2に設定します。

OCSP ステープリングを設定するには、アプリケーションでいくつかの JVM システム プロパティを設定する必要があります。

  • jdk.tls.client.enableStatusRequestExtension: true (デフォルト値)に設定すると、OCSP ステープルが有効になります。

  • com.sun.net.ssl.checkRevocation: trueに設定すると、失効チェックが有効になります。 このプロパティがtrueに設定されていない場合は、失効情報の有無や状態に関係なく、接続の続行が許可されます。

OCSP ステープリングを使用するようにアプリケーションを構成するには、アプリケーションが TLS を使用してサーバーに接続するようにすでに設定されている必要があり、サーバーは TLS ハンドシェイクの一部として返される証明書への OCSP 応答をステープリングするように設定されている必要があります。

OCSP を使用してJavaアプリケーションを構成する方法の詳細については、 Javaドキュメントの 「クライアント駆動型 OCSP および OCSP ステープリング」 を参照してください。

戻る

MongoDB に接続する

項目一覧