トランスポート層セキュリティ (TLS) の構成
項目一覧
Overview
このガイドでは、 TLS の使用方法を説明します。 プロトコルを使用して、 MongoDBデプロイへの接続を保護します。
接続に TLS を有効にすると、 Cドライバーは次のアクションを実行します。
TLS を使用して MongoDB 配置に接続
配置の証明書を検証します
証明書が配置を認証することを確認する
MongoDBTLS 用の 配置の構成方法については、 マニュアルの「 TLS 構成ガイド MongoDB Server」を参照してください。
注意
TLS/SSL、PKI(公開鍵基盤)証明書、認証局(CA)の詳細な説明は、このドキュメントの範囲外です。 このページでは、TLS/SSL に関する事前の知識と、有効な証明書にアクセスすることを前提としています。
TLS の有効化
MongoDB インスタンスへの接続で TLS を有効にするには、次の方法があります。
接続 での {0 パラメータの設定
tls
stringmongoc_uri_set_option_as_bool()
関数を使用して、MONGOC_URI_TLS
接続オプションをtrue
に設定
mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true"); // Do database work here mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017"); mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true); mongoc_client_t *client = mongoc_client_new_from_uri (uri); // Do database work here mongoc_client_destroy (client); mongoc_uri_destroy (uri);
Specify a CA File
TLS を有効にしてMongoDBデプロイに接続する場合、配置ではデフォルトで、クライアントが認証局、またはサーバー上で使用されているネイティブ証明書ストアによって信頼されているクライアント証明書を提供する必要があります。
クライアント証明書は、次の方法で提供できます。
ルート証明書チェーンを含む
.pem
ファイルに接続文字列のtlscertificatekeyfile
パラメータを設定するmongoc_uri_set_option_as_utf8()
関数を使用して、ルート証明書チェーンを含む.pem
ファイルにMONGOC_URI_TLSCERTIFICATEKEYFILE
オプションを設定します
mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true&tlscertificatekeyfile=/path/to/certs/client-certificate.pem"); // Do database work here mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017"); mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true); mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "/path/to/client-certificate.pem"); mongoc_client_t *client = mongoc_client_new_from_uri (uri); // Do database work here mongoc_client_destroy (client); mongoc_uri_destroy (uri);
サーバー証明書の検証
MongoDB Cドライバーは、構成された証明機関によって発行されたサーバー証明書の有効性を自動的に検証します。ドライバーはホスト名の検証と失効チェックも実行します。
この動作をオーバーライドするには、ホスト名の検証、OCSP エンドポイント失効チェック、すべての失効チェックを無効にして、無効な証明書を許可します。
この動作は、tlsAllowInvalidHostnames
、tlsDisableOCSPEndpointCheck
、tlsDisableCertificateRevocationCheck
、tlsAllowInvalidCertificates
オプションを使用して制御されます。デフォルトでは、すべてが false
に設定されています。
クライアントが次のセキュリティ上のリスクにつながる可能性があるため、これらのデフォルトを変更することは推奨されません。
サポートされているライブラリ
デフォルトでは 、libmongoc はサポートされている TLS ライブラリを検索し、TLS サポートを有効にします。これは、CMK フラグ ENABLE_SSL
によって制御されています。このフラグはデフォルトで AUTO
に設定されています。このフラグは、次の値を受け入れます。
AUTO
: システムのネイティブ TLS ライブラリにリンクするか、OpenSSL を検索しようとします。これはデフォルト値です。OPENSSL
: OpenSSL(libsl)へのリンク。OPENSSL_ROOT
を使用して任意のインストール パスを指定できます。LIBRESSL
(非推奨):libreSSL の libbs へのリンク。OPENSSL
を設定すると、libreSSL の互換性のある libbsl にリンクできます。WINDOWS
: Windowsのネイティブ TLS ライブラリであるセキュア チャネルへのリンク。DARWIN
: macOS のネイティブ TLS ライブラリであるセキュア トランスポートへのリンク。OFF
: TLS サポートを無効にします。
OpenSSL
MongoDB Cドライバーは、 Linuxおよび UNIX プラットフォーム(macOS 以外)で OpenSSL を使用します。業界のベストプラクティスと一部の規制では、TLS 1.1 以降の使用が必要であり、少なくとも OpenSSL 1.0.1 が必要です。 OpenSSL のバージョンを確認するには、次のコマンドを使用します。
openssl version
システムの OpenSSL が最新バージョン(少なくとも 1.0.1 )であることを確認するか、次のコマンドを使用して最新バージョンを非システム パスにインストールし、そのバージョンに対して を構築します。
cmake -DOPENSSL_ROOT_DIR=/absolute/path/to/openssl
OpenSSL に対してコンパイルすると、ドライバーはディストリビューションによって構成されたシステムのデフォルトの証明書ストアのロードを試行します。 これは、tlsCAFile
URI オプションを設定するか、ca_file
ca_dir
mongoc_ssl_opt_t でフィールド と を使用して上書きできます。
OpenSSL + を使用する場合、オンライン証明書ステータス プロトコル (OCSP) が完全にサポートされます。ただし、 が1.0.1crl_file
mongoc_ssl_opt_t で設定されており、 がサーバーの証明書を取り消すと、証明書にステープリングされたcrl_file
OCSP 応答が有効であっても、証明書は失効したと見なされます。
Tip
OCSP の詳細については、 RFC6960 を参照してください。
libreSSL /libitls(非推奨)
MongoDB C ドライバーは、 openssl
でコンパイルするように構成されている場合に、OpenSSL 互換性チェックを使用して LiveSSL をサポートします。 また、 libressl
で構築するように構成された場合、新しいlibtls
ライブラリもサポートされます。
LiveSSL でコンパイルされた場合、crl_file
mongoc_ssl_opt_t の オプションはサポートされておらず、使用された場合はエラーが発生します。 とtlsDisableOCSPEndpointCheck
tlsDisableCertificateRevocationCheck
を設定しても効果はありません。
オンライン証明書ステータスプロトコル(OCSP)は、次の注意事項で部分的にサポートされています。
must-staple 拡張機能(RFC7633 を参照)は無視されます
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます
クライアントが OCSP レスポンダから取り消された応答を受信した場合、接続は継続されません
Tip
OCSP の詳細については、 RFC6960 を参照してください。
Windows のネイティブ TLS サポート(セキュア チャネル)
MongoDB Cドライバーは、 Windowsのネイティブ TLS ライブラリ(セキュア チャネル、Schannel)とそのネイティブ暗号化ライブラリ(暗号化API: 次の生成、または CNG)をサポートしています。
Windowsネイティブ ライブラリに対してコンパイルされた場合、ca_dir
mongoc_ssl_opt_t の オプションはサポートされておらず、使用された場合はエラーが発生します。
tlsCertificateKeyPassword
URI オプションを使用して設定された暗号化された PEM ファイルもサポートされていないため、ロードしようとするとエラーが発生します。
tlsCAFile
が設定されている場合、ドライバーは提供された 1 つ以上の認証局が発行したサーバー証明書のみを許可します。 tlsCAFile
が設定されていない場合、ドライバーは System Local Machine Root
証明書ストアを使用して証明機関を検索し、提供された証明書を確認します。
crl_file
が mongoc_ssl_opt_t で設定されている場合 の場合、ドライバーは失効リストをSystem Local Machine Root
証明書ストアにインポートします。
tlsDisableOCSPEndpointCheck
を設定しても効果はありません。
オンライン証明書ステータスプロトコル(OCSP)は、次の注意事項で部分的にサポートされています。
must-staple 拡張機能( RFC7633 を参照)は無視されます。
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。
クライアントが OCSP レスポンダーから取り消し応答を受信した場合、接続は継続されません。
が
crl_file
mongoc_ssl_opt_t で設定されており、crl_file
によってサーバーの証明書が取り消されている場合は、OCSP 応答が優先されます。例、サーバーが有効なステープリングされた OCSP 応答を含む証明書を提示した場合、crl_file
が証明書を失効としてマークしていても、その証明書は有効であると見なされます。
Tip
OCSP の詳細については、 RFC6960 を参照してください。
macOS / Darwin でのネイティブ TLS サポート(セキュア トランスポート)
MongoDB Cドライバーは、Darwin ネイティブ TLS ライブラリとそのネイティブ暗号化ライブラリである Common Crypto の両方をサポートしています。
セキュア トランスポートに対してコンパイルされると、ca_dir
crl_file
mongoc_ssl_opt_t の オプションと オプションは はサポートされていません。どちらが使用されている場合は、 エラーが発行されます。
tlsCAFile
が設定されている場合、ドライバーは提供された認証局によって発行されたサーバー証明書のみを許可します。 tlsCAFile
が設定されていない場合、ドライバーはロックされていないキーチェーンの証明機関を使用します。
tlsDisableOCSPEndpointCheck
と tlsDisableCertificateRevocationCheck
を設定しても、セキュア トランスポートでコンパイルする場合、効果はありません。
オンライン証明書ステータスプロトコル(OCSP)は、次の注意事項で部分的にサポートされています。
must-staple 拡張機能(RFC7633 を参照)は無視されます
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます
クライアントが OCSP レスポンダから取り消された応答を受信した場合、接続は継続されません
Tip
OCSP の詳細については、 RFC6960 を参照してください。
API ドキュメント
このガイドで言及されているオブジェクトと関数の詳細については、次のAPIドキュメントを参照してください。