TLS 활성화 및 구성
개요
이 가이드에서는 TLS 프로토콜을 사용하여 MongoDB deployment에 대한 연결을 보호하는 방법을 배울 수 있습니다. TLS를 사용하도록 연결을 구성하려면 클라이언트를 생성할 때 TLS 옵션을 활성화하고 유효성 검사를 위해 인증서를 제공합니다.
이 가이드에는 다음 섹션이 포함되어 있습니다.
TLS 활성화 는 연결에서 TLS를 활성화 하는 방법을 설명합니다.
인증서 구성에서는 TLS를 구성하는 데 필요한 인증서를 설명합니다.
클라이언트의 참조 인증서는 TLS 옵션을 구성하기 위해
Config
구조체를 만드는 방법의 예시 를 제공합니다.추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.
팁
TLS에 대한 자세한 내용은 전송 계층 보안에 대한 Wikipedia 항목을 참조하세요.
TLS 활성화
다음 방법 중 하나를 사용하여 MongoDB 인스턴스에 대한 연결에서 TLS를 활성화할 수 있습니다.
연결 문자열에서
tls
옵션을true
(으)로 설정인스턴스를 만들 때 빈
Config
구조체를 메서드에 전달하기SetTLSConfig()
ClientOptions
다음 Connection String 및 ClientOptions 탭에서 선택하여 해당 코드 샘플을 확인합니다.
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)
참고
연결 문자열이 mongodb+srv
접두사를 포함하여 DNS SRV 레코드를 사용하는 경우 연결에서 기본적으로 TLS가 사용하도록 설정됩니다.
클라이언트 옵션의 전체 목록은 연결 옵션을 참조하세요.
인증서 구성
TLS 요청을 성공적으로 시작하려면 애플리케이션에서 ID를 증명하는 암호화 인증서를 제시해야 합니다. 연결 시 TLS를 활성화하려면 애플리케이션의 인증서를 PEM 파일로 저장해야 합니다.
중요
프로덕션 용도의 경우 MongoDB deployment에서 동일한 인증 기관에서 생성하고 서명한 유효한 인증서를 사용하는 것이 좋습니다. 테스트를 위해 배포에서 자체 서명된 인증서를 사용할 수 있습니다.
다음 목록에서는 TLS 사용 연결을 설정하기 위해 클라이언트가 제시해야 하는 구성 요소에 대해 설명합니다.
TLS 구성 요소 | 설명 |
---|---|
인증 기관(CA) | TLS 연결을 만들 때 신뢰할 수 있는 하나 인증 기관입니다. |
클라이언트 인증서 | 서버가 애플리케이션의 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 문서를 참조하세요.