Docs Menu
Docs Home
/ / /
Go Driver
/ /

TLS の有効化と構成

項目一覧

  • Overview
  • TLS の有効化
  • 証明書の構成
  • クライアントでの証明書の参照
  • 詳細情報
  • API ドキュメント

このガイドでは、TLS プロトコルを使用して MongoDB 配置への接続を保護する方法を学習できます。 TLS を使用するように接続を構成するには、 TLS オプションを有効にし、クライアントを作成するときに検証用の証明書を提供します。

このガイドには、次のセクションが含まれています。

  • TLSを有効にする では、接続で TLS を有効にする方法について説明します。

  • 「証明書の構成」では、TLS を構成するために必要な証明書について説明します。

  • クライアントでの参照証明書では、TLS オプションを構成するための Config構造体を作成する方法の例が紹介されています。

  • 追加情報では、このガイドで言及されている型とメソッドのリソースとAPIドキュメントへのリンクを提供します

Tip

次のいずれかの方法で、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インスタンスを作成します。

  1. 証明書ファイルパスを参照するための変数を作成します

  2. x509.NewCertPool()メソッドを使用して CA ファイル プールを作成し、CA ファイルの内容を追加します

  3. tls.LoadX509KeyPair()メソッドを使用してクライアント証明書ファイルを読み込みます

  4. Config構造体をインスタンス化し、 フィールドと フィールドを設定しますRootCAsCertificates

  5. ConfigインスタンスをSetTLSConfig()メソッドに渡して、 ClientOptionsTLSConfigフィールドを設定します

// Enable TLS on a connection by using the Go driver
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>"
// 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)
// Connects to MongoDB with TLS enabled
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ドキュメントを参照してください。

戻る

ネットワーク圧縮