Overview
このガイドでは、TLS プロトコルを使用して MongoDB 配置への接続を保護する方法を学習できます。 TLS を使用するように接続を構成するには、 TLS オプションを有効にし、クライアントを作成するときに検証用の証明書を提供します。
このガイドには、次のセクションが含まれています。
TLSを有効にする では、接続で TLS を有効にする方法について説明します。
「証明書の構成」では、TLS を構成するために必要な証明書について説明します。
クライアントでの参照証明書では、TLS オプションを構成するための
tls.Config
構造体を作成する方法の例が紹介されています。追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します
Tip
TLS の詳細については、 Wikipedia の トランスポート層セキュリティ に関するエントリを参照してください。
TLS の有効化
次のいずれかの方法で、MongoDB インスタンスへの接続で TLS を有効にできます。
接続stringで
tls
オプションをtrue
に設定するClientOptions
インスタンスの作成時に空のtls.Config
構造体をSetTLSConfig()
メソッドに渡す
Connection StringClientOptions次の タブと タブから選択すると、対応するコード サンプルが表示されます。
注意
MongoDBに接続するときに 接続stringで +srv
変更を指定して DNS SRV レコードを使用する場合は、接続で TLS がデフォルトで有効になります。 これを無効にするには、接続stringまたは ClientOptions
オブジェクトで tls
または ssl
パラメータの値を false
に設定します。
DNS シードリストを使用する場合の接続動作の詳細については、 MongoDB Serverの SRV 接続形式 セクションを参照してください。
クライアントオプションの完全なリストを表示するには、接続オプションの指定ガイドを参照してください。
証明書の構成
TLS 要求を正常に開始するには、アプリケーションが ID を証明するために暗号化証明書を提示する必要があります。 接続時に TLS を有効にするには、アプリケーションの証明書が PEM ファイルとして保存されている必要があります。
重要
本番環境で有効な証明書を使用する
実稼働環境で使用する場合は、MongoDB の配置に、同一の認証局によって生成および署名された有効な証明書を使用することをお勧めします。 テスト用に、配置は自己署名証明書を使用できます。
次のリストでは、TLS 対応接続を確立するためにクライアントが提示する必要があるコンポーネントを説明します。
TLS コンポーネント | 説明 |
---|---|
認証局(CA) | TLS 接続を行う場合、信頼する 1 つ以上の証明書機関。 |
クライアント証明書 | 暗号化されたネットワーク接続を確立するためにアプリケーションの ID をサーバーが確認できるようにするデジタル証明書。 |
証明書鍵 | クライアント証明書秘密キー ファイル。 このキーは、多くの場合、証明書ファイル自体に含まれています。 |
パスフレーズ | プライベートクライアントキーが暗号化されている場合、復号化するためのパスワード。 |
クライアントでの証明書の参照
クライアントが接続する前にサーバーが証明書を検証できるように、ClientOptions
オブジェクトで証明書を参照必要があります。
TLS 接続を構成するには、ClientOptions
インスタンスの TLSConfig
フィールドをtls.Config
構造体に設定することをお勧めします。tls.Config
構造体はGoのネイティブであり、すべての TLS オプションを単一の 再利用可能なオブジェクトに保持できます。
tls.Config
インスタンスを作成するには、crypto/tls
パッケージと crypto/x509
パッケージをインポートします。次に、次のセクションに示すように、tls.Config
構造体インスタンスを作成し、構成に関連する構造体フィールドを設定します。
tls.Config
構造体の詳細については、 tls.Config API ドキュメントを参照してください。
例
この例では、次のアクションを実行して、TLS が有効になっているtls.Config
インスタンスとClient
インスタンスを作成します。
証明書ファイルパスを参照するための変数を作成します
x509.NewCertPool()
メソッドを使用して CA ファイル プールを作成し、CA ファイルの内容を追加しますtls.LoadX509KeyPair()
メソッドを使用してクライアント証明書ファイルを読み込みますtls.Config
構造体をインスタンス化し、 フィールドと フィールドを設定しますRootCAs
Certificates
tls.Config
インスタンスをSetTLSConfig()
メソッドに渡して、ClientOptions
のTLSConfig
フィールドを設定します
caFile := "<path to CA certificate>" certFile := "<path to public client certificate>" keyFile := "<path to private client key>" // Loads CA certificate file caCert, err := os.ReadFile(caFile) if err != nil { panic(err) } caCertPool := x509.NewCertPool() if ok := caCertPool.AppendCertsFromPEM(caCert); !ok { panic("Error: CA file must be in PEM format") } // Loads client certificate files cert, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { panic(err) } // Instantiates a Config instance tlsConfig := &tls.Config{ RootCAs: caCertPool, Certificates: []tls.Certificate{cert}, } uri := "<connection string>" // Sets TLS options in options instance opts := options.Client().ApplyURI(uri).SetTLSConfig(tlsConfig)
安全でないオプション
tls.Config
インスタンス内で、接続上で TLS を構成するための任意のフィールドを設定できます。 テスト目的では、 InsecureSkipVerify
フィールドをtrue
に設定できます。
警告
InsecureSkipVerify
フィールドをtrue
に設定すると、証明書とホスト名の両方の検証が無効になります。
実稼働環境でこのオプションを指定すると、アプリケーションは安全でなくなり、有効なクライアントインスタンスとみなされる有効なクライアントインスタンスや期限切れの証明書や外部プロセスに対して脆弱になる可能性があります。
詳細情報
接続で TLS を有効にする方法の詳細については、 MongoDB Serverマニュアルの次のドキュメントを参照してください。
API ドキュメント
このガイドで言及されているメソッドとタイプの詳細については、次のAPIドキュメントを参照してください。