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