TLS の構成
項目一覧
URI オプションによる構成
URI に tls=true
を含めて TLS を有効にします。
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);
次の URI オプションを使用して、TLS をさらに構成できます。
定数 | キー | 説明 |
---|---|---|
MONGOC_URI_TLS | tls | {true|false} は、TLS を使用する必要があるかどうかを示します。 |
MONGOC_URI_TLSCERTIFICATEKEYFILE | tlscertificatekeyfile | PEM 形式の秘密キーへのパス。その公開証明書が末尾に連結されています。 |
MONGOC_URI_TLSCERTIFICATEKEYFILEPASSWORD | tlsCertificatekeypassword | 暗号化された秘密キーのロックを解除するために使用するパスワード(存在する場合)。 |
MONGOC_URI_TLSC ファイル | tlsCAFile | 信頼できると見なされる 1 つの証明機関または複数の証明機関のバンドル。 |
があります。 | tlsAllowInvalidCertificates | 証明書検証エラー(例: 信頼されていない発行者、期限切れなど)。 |
MONGOC_URI_TLSALLOINVALIDHOSTNAMES | tlsAllowInvalidHostnames | 証明書のホスト名検証を無視します(例: 有効な証明書を使用しているが、別のホスト名に対して発行された中間者) |
MONGOC_URI_TLSINSECURE | tlsInsecure | {true|false} は、安全でない TLS オプションを使用する必要があるかどうかを示します。 現在のところ、これは MONGOC_URI_TLSALLOINIDCERTICATES と MONGOC_URI_TLSALLOINIDHOSTNAMES を意味します。 |
があります。 | tlsdisablecertificatelinkingcheck | {true|false} は、失効チェック(CRL / OCSP)を無効にする必要があるかどうかを示します。 |
MONGOC_URI_TLSDISABLEOCSPENDPOINTCHECK | tlsdisableocspendpointCheck | {true|false} は、OCSP 応答がステープリングされていない場合に OCSP レスポンダー エンドポイントを要求してはなりません。 |
mongoc_ssl_opt_t による構成
あるいは、 mongoc_ssl_opt_t 構造体は、 mongoc_client_set_ssl_opts で TLS を構成するために使用できます または mongoc_client_Pool_set_ssl_opts 。構成可能なオプションのほとんどは、接続string URI を使用して設定できます。
mongoc_ssl_opt_t キー | URI キー |
---|---|
pem_file | tlsClientCertificateKeyFile |
pem_pwd | tlsClientCertificateKeyPassword |
ca_file | tlsCAFile |
weekly_cert_validation | tlsAllowInvalidCertificates |
allow_invalid_hostname | tlsAllowInvalidHostnames |
除外は、 crl_file
とca_dir
のみです。 これらは mongoc_ssl_opt_t でのみ設定できます。
クライアント認証
TLS を有効にして MongoDB を起動すると、クライアントはデフォルトで、 --tlsCAFile
で指定された認証局、またはサーバー上で使用されているネイティブ証明書ストアによって信頼されている認証局によって発行されたクライアント証明書を提供する必要があります。
クライアント証明書を提供するには、URI のtlsCertificateKeyFile
を PEM で保護された証明書ファイルに設定します。
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);
サーバー証明書の検証
MongoDB C ドライバーは、設定された認証局によって発行された、ホスト名の検証、有効期限など、サーバー証明書の有効性を自動的に確認します。
この動作をオーバーライドするには、ホスト名の検証、OCSP エンドポイント失効チェック、失効チェックを完全に無効にして、無効な証明書を許可します。
この動作は、それぞれtlsAllowInvalidHostnames
、 tlsDisableOCSPEndpointCheck
、 tlsDisableCertificateRevocationCheck
、 tlsAllowInvalidCertificates
オプションを使用して制御されます。 デフォルトでは、すべてがfalse
に設定されています。
これらのデフォルトを変更すると、クライアントが中間者攻撃( tlsAllowInvalidHostnames
が設定されている場合)、無効な証明書( tlsAllowInvalidCertificates
が設定されている場合)、証明書が失効する可能性があるドキュメント( tlsDisableOCSPEndpointCheck
またはtlsDisableCertificateRevocationCheck
が設定されています)。
サポートされているライブラリ
デフォルトでは、libmongoc はサポートされている TLS ライブラリを検索し、TLS サポートを有効にします。 これは、CMK フラグENABLE_SSL
によって制御され、デフォルトではAUTO
に設定されています。 有効な値は以下のとおりです。
AUTO
デフォルトの動作。 システムのネイティブ TLS ライブラリにリンクするか、OpenSSL を見つけてみてください。DARWIN
macOS のネイティブ TLS ライブラリであるセキュア トランスポートへのリンク。WINDOWS
Windows のネイティブ TLS ライブラリであるセキュア チャネルへのリンク。OPENSSL
OpenSSL(libssl)へのリンク。OPENSSL_ROOT
を使用して任意のインストール パスを指定できます。LIBRESSL
LiveSSL の libbs へのリンク。 (libreSSL の互換性のあるlibsl は、OPENSSL
を設定することで にリンクできます)。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 でフィールド と を使用して上書きできます。
オンライン証明書ステータスプロトコル (OCSP)( RFC6960 を参照 )は、 OpenSSL1 を使用する場合、完全にサポートされています。0 。1 +次の注釈付き。
が
crl_file
mongoc_ssl_opt_t で設定されている場合 、およびcrl_file
がサーバーの証明書を取り消すと、証明書は失効したと見なされます(証明書に有効なステープリングされた OCSP 応答がある場合でも)
LibreSSL / libtls
MongoDB C ドライバーは、 openssl
でコンパイルするように構成されている場合に、OpenSSL 互換性チェックを使用して LiveSSL をサポートします。 また、 libressl
で構築するように構成された場合、新しいlibtls
ライブラリもサポートされます。
Windows ネイティブ ライブラリに対してコンパイルされた場合、crl_file
mongoc_ssl_opt_t の オプション はサポートされていないため、使用した場合はエラーが発生します。
tlsDisableOCSPEndpointCheck
とtlsDisableCertificateRevocationCheck
を設定しても効果はありません。
オンライン証明書ステータスプロトコル (OCSP)( RFC6960 を参照 )は、次の注釈で部分的にサポートされています。
must-staple 拡張機能( RFC7633 を参照 )は無視されます。次の場合に接続が続行されることがあります:
must-staple 証明書には、ステープリングされた応答なしで表示されます(クライアントが OCSP レスポンダから取り消された応答を受信した場合を除く)。
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。
Windows のネイティブ TLS サポート(セキュア チャネル)
MongoDB C ドライバーは、Windows のネイティブ TLS ライブラリ(セキュア チャネル、Schannel)とそのネイティブの暗号化ライブラリ(暗号化 API: 次の生成、または CNG)をサポートしています。
Windows ネイティブ ライブラリに対してコンパイルされた場合、ca_dir
mongoc_ssl_opt_t の オプション はサポートされていないため、使用した場合はエラーが発生します。
暗号化された PEM ファイル(例: tlsCertificateKeyPassword
の設定)もサポートされていないため、ロードしようとするとエラーが発生します。
tlsCAFile
が設定されている場合、ドライバーは提供された認証局によって発行されたサーバー証明書のみを許可します。 tlsCAFile
が設定されていない場合、ドライバーはSystem Local Machine Root
証明書ストアを使用して証明機関を検索し、提供された証明書を確認します。
crl_file
が mongoc_ssl_opt_t で設定されている場合 の場合、ドライバーは失効リストをSystem Local Machine Root
証明書ストアにインポートします。
tlsDisableOCSPEndpointCheck
を設定しても効果はありません。
オンライン証明書ステータスプロトコル (OCSP)( RFC6960 を参照 )は、次の注釈で部分的にサポートされています。
must-staple 拡張機能( RFC7633 を参照 )は無視されます。must-staple 証明書にステープリングされた応答がない場合でも、接続が続行される可能性があります(クライアントが OCSP レスポンダから失効応答を受け取った場合を除く)。
が
crl_file
mongoc_ssl_opt_t で設定されている場合 、およびcrl_file
がサーバーの証明書を取り消すと、OCSP 応答が優先されます。たとえば、サーバーが有効なステープリングされた OCSP 応答を含む証明書を提示した場合、crl_file
が証明書を失効としてマークしていても、その証明書は有効であると見なされます。must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。
macOS / Darwin でのネイティブ TLS サポート(セキュア トランスポート)
MongoDB C ドライバーは、Darwin(OS X、macOS、iOS など)のネイティブ TLS ライブラリ(セキュア トランスポート)とそのネイティブの暗号化ライブラリ(Common Crypto、または CC)をサポートしています。
セキュア トランスポートに対してコンパイルされると、ca_dir
crl_file
mongoc_ssl_opt_t の オプションと オプションは はサポートされていません。どちらが使用されている場合は、 エラーが発行されます。
tlsCAFile
が設定されている場合、ドライバーは提供された認証局によって発行されたサーバー証明書のみを許可します。 tlsCAFile
が設定されていない場合、ドライバーは現在ロックされていないキーチェーンの証明機関を使用します。
tlsDisableOCSPEndpointCheck
とtlsDisableCertificateRevocationCheck
を設定しても効果はありません。
オンライン証明書ステータスプロトコル (OCSP)( RFC6960 を参照 )は、次のメモで部分的にサポートされています。
must-staple 拡張機能( RFC7633 を参照 )は無視されます。must-staple 証明書にステープリングされた応答がない場合でも、接続が続行される可能性があります(クライアントが OCSP レスポンダから失効応答を受け取った場合を除く)。
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。