Docs Menu
Docs Home
/ / /
Scala
/

トランスポート層セキュリティ (TLS) の構成

項目一覧

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

このガイドでは、TLS(Transport Layer Security)プロトコルを使用してMongoDBデプロイへの接続を保護する方法を説明します。

接続に TLS を有効にすると、 Scalaドライバーは次のアクションを実行します。

  • TLS を使用して MongoDB 配置に接続

  • 配置の証明書を検証します

TLS 用のMongoDBデプロイの構成方法については、 MongoDB Serverマニュアルの TLS 構成ガイドを参照してください。

注意

このページでは、TLS/SSL に関する事前の知識と、有効な証明書にアクセスすることを前提としています。 TLS/SSL、PKI(公開鍵基盤)証明書、認証局(CA)の詳細な説明は、このドキュメントの範囲外です。 TLS の詳細については、 Wikipedia の トランスポート層セキュリティ に関するエントリを参照してください。

MongoDBデプロイへの接続に TLS を有効にするには、次の方法があります。

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

  • 接続 URI で tls パラメータを設定する

TLS を有効にする対応するコードを確認するには、MongoClientSettings または Connection URIタブを選択します。

val tlsUri = "mongodb://localhost:27017/"
val tlsSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(tlsUri))
.applyToSslSettings(builder => builder.enabled(true))
.build()
val tlsClient1 = MongoClient(tlsSettings)
val tlsClient2 = MongoClient("mongodb://localhost:27017/?tls=true")

Tip

接続stringに SRV 接続形式を指定する +srv の変更が含まれている場合、接続では TLS はデフォルトで有効になります。

SRV 接続形式の詳細については、 MongoDB Serverのドキュメントの「 SRV 接続形式 」を参照してください。

注意

これらのセクションの手順は、 Oracle JDK のドキュメントに基づいています。 JDK またはカスタム TLS/SSL実装には適用されない可能性があります。

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

  • JVMトラスト ストアとJVMキー ストアの使用

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

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

Javaランタイム環境(JRE)は、署名機関からの一般的に使用される公開証明書を含むデフォルトの証明書ストアを提供します。 MongoDBデプロイで、 JRE のデフォルトの証明書ストアに存在しない認証局によって署名された証明書を使用する場合、アプリケーションはTLS 要求を開始するために次のシステム プロパティを構成する必要があります。

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

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

上記のプロパティを定義するには、 keytoolコマンドラインツールを使用できます。次の例では、 keytoolコマンドを実行して、認証局ファイルパス、トラスト ストア パス、トラスト ストア パスワードを指定します。

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

注意

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

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

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

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

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

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

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

SSLContextインスタンスを使用するようにクライアントを構成する例については、このガイドの「 SSLContext を使用した構成のカスタマイズ 」セクションを参照してください。

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

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

  • 接続 URI で tlsAllowInvalidHostnames パラメータを設定する

ホスト名検証を無効にする対応するコードを確認するには、MongoClientSettings タブまたは Connection URIタブを選択します。

val invalidHostUri = "mongodb://localhost:27017/"
val invalidHostSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(invalidHostUri))
.applyToSslSettings(builder => builder
.enabled(true)
.invalidHostNameAllowed(true)
)
.build()
val invalidHostClient1 = MongoClient(invalidHostSettings)
val invalidHostClient2 = MongoClient("mongodb://localhost:27017/?tls=true&tlsAllowInvalidHostnames=true")

警告

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

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

注意

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

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

val sslContext = SSLContext.getDefault()
val contextSettings = MongoClientSettings.builder()
.applyToSslSettings(builder => builder
.enabled(true)
.context(sslContext)
)
.build()
val mongoClient = MongoClient(contextSettings);

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

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

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

  • クライアント駆動型 OCSP

  • OCSP ステープル

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

注意

Scalaドライバーは、アプリケーション用に構成された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ドキュメントを参照してください。

戻る

接続ターゲットの選択