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_TLSCAFILE | tlsCAFile | 信頼できると見なされる 1 つの証明機関または複数の証明機関のバンドル。 |
MONGOC_URI_TLSALLOWINVALIDCERTIFICATES | tlsAllowInvalidCertificates | 証明書検証エラー(例: 信頼されていない発行者、期限切れなど)。 |
MONGOC_URI_TLSALLOWINVALIDHOSTNAMES | tlsAllowInvalidHostnames | 証明書のホスト名検証を無視します(例: 有効な証明書を使用しているが、別のホスト名に対して発行された中間者) |
MONGOC_URI_TLSINSECURE | tlsInsecure | {true|false} は、安全でない TLS オプションを使用する必要があるかどうかを示します。 現在のところ、これは MONGOC_URI_TLSALLOINIDCERTICATES と MONGOC_URI_TLSALLOINIDHOSTNAMES を意味します。 |
MONGOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK | tlsdisablecertificatelinkingcheck | {true|false} は、失効チェック(CRL / OCSP)を無効にする必要があるかどうかを示します。 |
MONGOC_URI_TLSDISABLEOCSPENDPOINTCHECK | tlsdisableocspendpointCheck | {true|false} は、OCSP 応答がステープリングされていない場合に OCSP レスポンダー エンドポイントを要求してはなりません。 |
mongoc_ssl_opt_t による構成
Alternatively, the mongoc_ssl_opt_t struct may be used to configure TLS with mongoc_client_set_ssl_opts or mongoc_client_pool_set_ssl_opts. Most of the configurable options can be set using the Connection String URI.
mongoc_ssl_opt_t key | URI キー |
---|---|
pem_file | tlsClientCertificateKeyFile |
pem_pwd | tlsClientCertificateKeyPassword |
ca_file | tlsCAFile |
weekly_cert_validation | tlsAllowInvalidCertificates |
allow_invalid_hostname | tlsAllowInvalidHostnames |
The only exclusions are crl_file
and ca_dir
. Those may only be set with 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 でフィールド と を使用して上書きできます。
The Online Certificate Status Protocol (OCSP) (see RFC 6960) is fully supported when using OpenSSL 1.0.1+ with the following notes:
When a
crl_file
is set with mongoc_ssl_opt_t, and thecrl_file
revokes the server's certificate, the certificate is considered revoked (even if the certificate has a valid stapled OCSP response)
LibreSSL / libtls
MongoDB C ドライバーは、 openssl
でコンパイルするように構成されている場合に、OpenSSL 互換性チェックを使用して LiveSSL をサポートします。 また、 libressl
で構築するように構成された場合、新しいlibtls
ライブラリもサポートされます。
When compiled against the Windows native libraries, the crl_file
option of a mongoc_ssl_opt_t is not supported, and will issue an error if used.
tlsDisableOCSPEndpointCheck
とtlsDisableCertificateRevocationCheck
を設定しても効果はありません。
The Online Certificate Status Protocol (OCSP) (see RFC 6960) is partially supported with the following notes:
The Must-Staple extension (see RFC 7633) is ignored. Connection may continue if a
must-staple 証明書には、ステープリングされた応答なしで表示されます(クライアントが OCSP レスポンダから取り消された応答を受信した場合を除く)。
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。
Windows のネイティブ TLS サポート(セキュア チャネル)
MongoDB C ドライバーは、Windows のネイティブ TLS ライブラリ(セキュア チャネル、Schannel)とそのネイティブの暗号化ライブラリ(暗号化 API: 次の生成、または CNG)をサポートしています。
When compiled against the Windows native libraries, the ca_dir
option of a mongoc_ssl_opt_t is not supported, and will issue an error if used.
暗号化された PEM ファイル(例: tlsCertificateKeyPassword
の設定)もサポートされていないため、ロードしようとするとエラーが発生します。
tlsCAFile
が設定されている場合、ドライバーは提供された認証局によって発行されたサーバー証明書のみを許可します。 tlsCAFile
が設定されていない場合、ドライバーはSystem Local Machine Root
証明書ストアを使用して証明機関を検索し、提供された証明書を確認します。
When crl_file
is set with mongoc_ssl_opt_t, the driver will import the revocation list to the System Local Machine Root
certificate store.
tlsDisableOCSPEndpointCheck
を設定しても効果はありません。
The Online Certificate Status Protocol (OCSP) (see RFC 6960) is partially supported with the following notes:
The Must-Staple extension (see RFC 7633) is ignored. Connection may continue if a Must-Staple certificate is presented with no stapled response (unless the client receives a revoked response from an OCSP responder).
When a
crl_file
is set with mongoc_ssl_opt_t, and thecrl_file
revokes the server's certificate, the OCSP response takes precedence. E.g. if the server presents a certificate with a valid stapled OCSP response, the certificate is considered valid even if thecrl_file
marks it as revoked.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
を設定しても効果はありません。
The Online Certificate Status Protocol (OCSP) (see RFC 6960) is partially supported with the following notes.
The Must-Staple extension (see RFC 7633) is ignored. Connection may continue if a Must-Staple certificate is presented with no stapled response (unless the client receives a revoked response from an OCSP responder).
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。