Docs Menu
Docs Home
/ / /
Ruby ドライバー
/

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

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

TLS を使用してMongoDBデプロイに接続するには、次の手順を実行する必要があります。

  • Mongo::Client で TLS 接続を有効にします。

  • クライアント TLS 証明書を指定します。

  • サーバーの TLS 証明書を検証するための証明機関(CA)証明書を指定します。

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

注意

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

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

  • 新しい Mongo:Clientオブジェクトで、ssl オプションを true に設定します。

  • 接続文字列で tls オプションを true に設定します。

注意

SSL 命名規則

Rubyドライバー v2.6 以降でサポートされているすべてのMongoDB Serverバージョンは TLS のみを実装します。 2.6 と は SSL を使用しません。

過去の理由で、 Rubyドライバーは TLS オプションの前に tls ではなく ssl を付けます。Rubyドライバー バージョン 3.0 以降では、 Rubyオプション名に tls プレフィックスが使用されます。

証明書を構成するには、次のオプションを指定する必要があります。

  • ssl_cert: MongoDBデプロイへの接続を検証するために使用される証明ファイル。

  • ssl_key: MongoDBデプロイへの接続を確認するために使用される秘密キーファイル。

  • ssl_ca_cert: MongoDBデプロイからクライアントに渡された証明書を検証するために使用される連結された CA 証明書を含むファイル。このオプションに値を指定しない場合、ドライバーはデフォルトのシステム ルート証明書ストアを信頼アンカーとして使用します。

次の例では 、TLS 証明書と対応する秘密キーが別々のファイルに提供されています。

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.crt',
ssl_key: 'path/to/client.key',
ssl_ca_cert: 'path/to/ca.crt'
)

単一のファイルで TLS 証明書と秘密キーの両方を指定できますが、証明書と秘密キーオプションの両方を指定する必要があります。次の例では、TLS 証明書と秘密キーの両方が同じ client.pemファイルで定義されています。

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_cert: 'path/to/client.pem',
ssl_key: 'path/to/client.pem',
ssl_ca_cert: 'path/to/ca.crt',
)

証明書を構成するには、次の URI オプションを指定する必要があります。

  • tlsCertificateKeyFile: MongoDBデプロイへの接続を検証するために使用される証明書とキーファイルを含むファイル。

  • tlsCAFile: MongoDBデプロイからクライアントに渡された証明書を検証するために使用される連結された CA 証明書を含むファイル。このオプションに値を指定しない場合、ドライバーはデフォルトのシステム ルート証明書ストアを信頼アンカーとして使用します。

client = Mongo::Client.new(
"mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCAFile=path%2fto%2fca.crt")

証明書と鍵を含むファイルの拡張子は通常、``.ct`` または .pem です。

URI オプション値はパーセント エンコードされる必要があります。これは、例パス内のスラッシュ(/)に適用され、%2f としてエンコードされます。

Rubyドライバーには、異なるデータ型またはオブジェクト型で TLS 証明書、キー、CA 証明書を指定するための複数のオプションが用意されています。

TLS 証明書を指定するには、次のいずれかのオプションを指定できます。

オプション名
データ/オブジェクト タイプを受け入れ
説明

:ssl_cert

String

MongoDBデプロイへの接続を検証するために使用される証明ファイルのパス。

:ssl_cert_object

OpenSSL::X509::Certificate

MongoDBデプロイへの接続を検証するために使用される証明書オブジェクト。

:ssl_cert_string

String

MongoDBデプロイへの接続を検証するために使用される PEM でエンコードされた証明書を含む string 。

TLS秘密キーを指定するには、次のいずれかのオプションを指定できます。

オプション名
データ/オブジェクト タイプを受け入れ
説明

:ssl_key

String

MongoDBデプロイへの接続を確認するために使用される秘密キーファイルのパス。

:ssl_key_object

OpenSSL::PKey

MongoDBデプロイへの接続を検証するために使用される秘密キーオブジェクト。

:ssl_key_pass_phrase

String

秘密キーのパスフレーズ。

:ssl_key_string

String

MongoDBデプロイへの接続を検証するために使用される PEM でエンコードされた秘密キーを含む string 。

TLS CA 証明書を指定するには、次のいずれかのオプションを指定できます。

オプション名
データ/オブジェクト タイプを受け入れ
説明

:ssl_ca_cert

String

MongoDBデプロイからクライアントに渡された証明書を検証するために使用される連結された CA 証明書を含むファイルパス。

:ssl_ca_cert_object

Array<OpenSSL::X509::Certificate>

MongoDBデプロイからクライアントに渡された証明書を検証するために使用される CA 証明書を表すオブジェクトの配列。

:ssl_ca_cert_string

String

MongoDBデプロイからクライアントに渡された証明書を検証するために使用される 1 つの PEM でエンコードされた CA 証明書を含む string 。

TLS 構成をカスタマイズする必要がある場合は、ネイティブRuby Procオブジェクトを Mongo.tls_context_hooks 配列に追加することで TLS コンテキスト フックを設定できます。Mongo::Client インスタンスを作成する前に、Procオブジェクトを配列に追加してください。

次のコード例では、TLS で使用される唯一の暗号として AES256-SHA 暗号を有効にします。

Mongo.tls_context_hooks.push(
Proc.new { |context|
context.ciphers = ["AES256-SHA"]
}
)

Rubyドライバー TLS コンテキスト オプションは、SSL のネイティブRuby処理に基づいています。利用可能な TLS コンテキスト オプションの詳細については、SSLContext のRubyドキュメントを参照してください。

サーバーによって提供された証明書に OCSP エンドポイント URI が含まれている場合、ドライバーはデフォルトで指定されたエンドポイントに OCSP(Online Certificate Status Protocol、オンライン証明書ステータス プロトコル)リクエストを発行して、証明書の有効性を確認します。

OCSP エンドポイント チェックを無効にするには、クライアントの作成時に :ssl_verify_ocsp_endpoint Rubyオプションを false に設定するか、tlsDisableOCSPEndpointCheck URI オプションを true に設定します。

注意

JRuby は OCSP 検証をサポートしていません

JRuby は OCSP エンドポイント URI を正しく公開しないため、ドライバーは基礎となるアプリケーションが JRuby で実行される場合、OCSP エンドポイントをチェックしません。

TLS が有効になっている場合、 Rubyドライバーはサーバーが提示した証明書を自動的に検証します。コードをテストするときは、この検証を無効にできます。これは安全でない TLSと呼ばれます。

安全でない TLS が有効になっている場合、ドライバーは X. 509証明書の提示のみを必要としサーバー。 次のいずれかに当てはまる場合でも、ドライバーは証明書を受け入れます。

  • サーバーのホスト名と証明書のサブジェクト名(またはサブジェクトの別名)が一致しません。

  • 証明書の有効期限が切れているか、まだ有効ではありません。

  • 証明書のチェーン内に信頼できるルート証明書がありません。

  • 証明書の目的がサーバー識別には無効です。

注意

安全でない TLS が有効になっている場合でも、クライアントとサーバー間の通信は TLS で暗号化されます。

安全でない TLS を有効にするには、sslVerifyクライアントオプションまたは tlsInsecure URI オプションを true に設定します。

client = Mongo::Client.new(["<hostname>:<port>"],
ssl: true,
ssl_verify: false
)
client = Mongo::Client.new('mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true')

同様に、次のオプションを設定して、証明書またはホスト名の検証を無効にすることもできます。

  • ssl_verify_certificate: オプションを false に設定して、証明書の検証を無効にします。

  • ssl_verify_hostname: オプションを false に設定して、ホスト名検証を無効にします。

  • tlsAllowInvalidCertificates: オプションを true に設定して、証明書の検証を無効にします。

  • tlsAllowInvalidHostnames: オプションを true に設定して、ホスト名の検証を無効にします。

警告

本番環境では安全でない TLS を使用しないでください

本番環境では安全でない TLS は常に無効にしてください。

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

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

戻る

Kerberos (GSSAPI)

項目一覧