Overview
このガイドでは、TLSプロトコルを使用してMongoDBデプロイへの接続を保護する方法を説明します。
接続に TLS を有効にすると、 Cドライバーは次のアクションを実行します。
TLS を使用して MongoDB 配置に接続
配置の証明書を検証します
証明書が配置を認証することを確認する
MongoDBTLS 用の 配置の構成方法については、 マニュアルの「 TLS 構成ガイド MongoDB Server」を参照してください。
注意
TLS/SSL、PKI(公開鍵基盤)証明書、認証局(CA)の詳細な説明は、このドキュメントの範囲外です。 このページでは、TLS/SSL に関する事前の知識と、有効な証明書にアクセスすることを前提としています。
TLS の有効化
MongoDB インスタンスへの接続で TLS を有効にするには、次の方法があります。
接続stringでの
tlsパラメータの設定mongoc_uri_set_option_as_bool()関数を使用して、MONGOC_URI_TLS接続オプションをtrueに設定
クライアント証明書の指定
TLS を有効にしてMongoDBデプロイに接続する場合、配置ではデフォルトで、クライアントが認証局、またはサーバー上で使用されているネイティブ証明書ストアによって信頼されているクライアント証明書を提供する必要があります。
クライアント証明書は、次の方法で提供できます。
ルート証明書チェーンを含む
.pemファイルに接続文字列のtlsCertificateKeyFileパラメータを設定するmongoc_uri_set_option_as_utf8()関数を使用して、ルート証明書チェーンを含む.pemファイルにMONGOC_URI_TLSCERTIFICATEKEYFILEオプションを設定します
サーバー証明書の検証
MongoDB Cドライバーは、構成された証明機関によって発行されたサーバー証明書の有効性を自動的に検証します。 ドライバーはホスト名の検証と失効チェックも実行します。
この動作をオーバーライドするには、ホスト名の検証、OCSP エンドポイント失効チェック、すべての失効チェックを無効にして、無効な証明書を許可します。
この動作は、tlsAllowInvalidHostnames、tlsDisableOCSPEndpointCheck、tlsDisableCertificateRevocationCheck、tlsAllowInvalidCertificates オプションを使用して制御されます。 デフォルトでは、すべてが false に設定されています。
クライアントが次のセキュリティ上のリスクにつながる可能性があるため、これらのデフォルトを変更することは推奨されません。
tlsAllowInvalidCertificatesが設定されている場合、無効な証明書tlsDisableOCSPEndpointCheckまたはtlsDisableCertificateRevocationCheckが設定されている場合、証明書を失効させる可能性があります
注意
Let's Encrypt OCSP の廃止
Let's Encrypt は新しい証明書の OCSP サポートを終了しました。Let's Encrypt が発行した新しい証明書に OCSP 応答者 URL が含まれていない場合があります。OCSP 失効チェックは、証明書に OCSP URI が含まれている場合にのみ発生するため、OCSP URL がないことは予想され、MongoDB 配置に必ずしも問題があることを意味しません。
サポートされているライブラリ
デフォルトでは 、libmongoc はサポートされている TLS ライブラリを検索し、TLS サポートを有効にします。 これは、CMK フラグ ENABLE_SSL によって制御されます。このフラグはデフォルトで AUTO に設定されています。 このフラグは、次の値を受け入れます。
AUTO: システムのネイティブ TLS ライブラリにリンクするか、OpenSSL を検索しようとします。 これはデフォルト値です。OPENSSL: OpenSSL(libsl)へのリンク。OPENSSL_ROOTを使用して任意のインストール パスを指定できます。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 オプションを設定するか、mongoc_ssl_opt_t でフィールド ca_file と ca_dir を使用して上書きできます。
OpenSSL 1.0.1+ を使用することで、オンライン証明書ステータス プロトコル(OCSP)が完全にサポートされます。ただし、crl_file が mongoc_ssl_opt_t で設定されており、crl_file がサーバーの証明書を取り消すと、証明書にステープリングされた OCSP 応答が有効であっても、証明書は失効したと見なされます。
Tip
OCSP の詳細については、RFC 6960 を参照してください。
Windows のネイティブ TLS サポート(セキュア チャネル)
MongoDB Cドライバーは、 Windows のネイティブ TLS ライブラリ(セキュア チャネル、Schannel)とそのネイティブ暗号化ライブラリ(暗号化API: 次の生成、または CNG)をサポートしています。
Windowsネイティブ ライブラリに対してコンパイルされた場合、ca_dir mongoc_ssl_opt_t の オプションはサポートされておらず、使用された場合はエラーが発生します。tlsCertificateKeyPassword URI オプションを使用して設定された暗号化された PEM ファイルもサポートされておらず、ロードしようとするとエラーが発生します。
tlsCertificateKeyFile URI オプションは、 PKCS#8 または PKCS#1形式でエンコードされた証明書を参照できます。Cドライバーのバージョン 2.1.0 以降、ドライバーは秘密キーを永続キーとしてインポートし、最新の署名アルゴリズムをサポートします。以前のバージョンでは、ドライバーはキーをエフェメラルとしてインポートしていました。インポートされたキーの管理の詳細については、インポートされたキーの管理を参照してください。
tlsCAFile が設定されている場合、ドライバーは証明機関ファイルをSystem Local Machine Root 証明書ストアにインポートします。tlsCAFile が設定されていない場合、ドライバーは System Local Machine Root 証明書ストアを使用して証明機関のファイルを検索し、提供された証明書を確認します。
crl_file が mongoc_ssl_opt_t で設定されている場合、ドライバーは失効リストを System Local Machine Root 証明書ストアにインポートします。tlsDisableOCSPEndpointCheck を設定しても効果はありません。
オンライン証明書ステータスプロトコル(OCSP)は、次の注意事項で部分的にサポートされています。
must-staple 拡張機能(RFC 7633 を参照)は無視されます。
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます。
クライアントがOCSP レスポンダーから取り消し応答を受信した場合、接続は継続されません。
crl_fileが mongoc_ssl_opt_t で設定されており、crl_fileによってサーバーの証明書が取り消されている場合は、OCSP 応答が優先されます。例、サーバーが有効なステープリングされた OCSP 応答を含む証明書を提示した場合、crl_fileが証明書を失効としてマークしていても、その証明書は有効であると見なされます。
Tip
OCSP の詳細については、RFC 6960 を参照してください。
インポートされたキーの管理
Cドライバーは、PKCS#8 キーを CNG KSP にインポートする: Microsoft Software Key Storage Provider と、PKCS#1 キーをレガシーCSP にインポートする: Microsoft Enhanced Cryptographic Provider v1.0。キーのインポートの詳細については、 Microsoftドキュメントの「 キーのストレージと取得 」を参照してください。
キーをインポートした後、キー名とプロバイダーの計算、キーの表示、またはキーの削除が必要になる場合があります。次の PowerShell コードは、キー名とプロバイダーを計算します。
$cert = "client.pem" # Compute the SHA256 fingerprint: $fingerprint = (openssl x509 -in $cert -noout -fingerprint -sha256) -replace 'SHA256 Fingerprint=', '' -replace ':', '' if (Select-String -Path $cert -Pattern '-----BEGIN RSA PRIVATE KEY-----' -Quiet) { # Key name for PKCS#1 key: $key_name = "libmongoc-$fingerprint-pkcs1" $csp = "Microsoft Enhanced Cryptographic Provider v1.0" } elseif (Select-String -Path $cert -Pattern '-----BEGIN PRIVATE KEY-----' -Quiet) { # Key name for PKCS#8 key: $key_name = "libmongoc-$fingerprint-pkcs8" $csp = "Microsoft Software Key Storage Provider" } else { Write-Output "Unexpected PEM format for $cert" }
次の PowerShell コードには、 キーの詳細が表示されます。
certutil -user -csp $csp -key $key_name
次の PowerShell コードは キーを削除します。
certutil -user -csp $csp -key $key_name
macOS / Darwin でのネイティブ TLS サポート(セキュア トランスポート)
MongoDB Cドライバーは、Darwin ネイティブ TLS ライブラリとそのネイティブ暗号化ライブラリである Common Crypto の両方をサポートしています。
セキュア トランスポートに対してコンパイルされた場合、 mongoc_ssl_opt_t の ca_dir オプションと crl_file オプションはサポートされません。どちらが使用されている場合は、 エラーが発行されます。
tlsCAFile が設定されている場合、ドライバーは提供された認証局によって発行されたサーバー証明書のみを許可します。 tlsCAFile が設定されていない場合、ドライバーはロックされていないキーチェーンの証明機関を使用します。
tlsDisableOCSPEndpointCheck と tlsDisableCertificateRevocationCheck を設定しても、セキュア トランスポートでコンパイルする場合、効果はありません。
オンライン証明書ステータスプロトコル(OCSP)は、次の注意事項で部分的にサポートされています。
must-staple 拡張機能(RFC 7633 を参照)は無視されます
must-staple 証明書がステープリングされた応答なしで提示され、 OCSP レスポンダーがダウンしても接続は継続されます
クライアントがOCSP レスポンダから取り消された応答を受信した場合、接続は継続されません
Tip
OCSP の詳細については、RFC 6960 を参照してください。
API ドキュメント
このガイドで言及されているオブジェクトと関数の詳細については、次のAPIドキュメントを参照してください。