Docs Menu
Docs Home
/ / /
Go 드라이버
/ /

TLS 사용 및 구성

이 페이지의 내용

  • 개요
  • TLS 활성화
  • 인증서 구성
  • 클라이언트의 참조 인증서
  • 예제
  • 추가 정보
  • API 문서

이 가이드에서는 TLS 프로토콜을 사용하여 MongoDB deployment에 대한 연결을 보호하는 방법을 배울 수 있습니다. TLS를 사용하도록 연결을 구성하려면 클라이언트를 생성할 때 TLS 옵션을 활성화하고 유효성 검사를 위해 인증서를 제공합니다.

이 가이드에는 다음 섹션이 포함되어 있습니다.

  • TLS 활성화에서 연결에서 TLS를 활성화하는 방법을 설명합니다.

  • 인증서 구성에서는 TLS를 구성하는 데 필요한 인증서를 설명합니다.

  • 클라이언트의 참조 인증서는 TLS 옵션을 구성하기 위해 Config 구조체를 만드는 방법의 예를 제공합니다.

  • 추가 정보에서 이 가이드에 언급된 유형 및 메소드에 대한 리소스 및 API 문서 링크를 찾을 수 있습니다.

TLS에 대한 자세한 내용은 전송 계층 보안에 대한 Wikipedia 항목을 참조하세요.

다음 방법 중 하나를 사용하여 MongoDB 인스턴스에 대한 연결에서 TLS를 활성화할 수 있습니다.

  • 연결 문자열에서 tls 옵션을 true(으)로 설정

  • 인스턴스를 만들 때 빈 Config 구조체를 메서드에 전달하기 SetTLSConfig() ClientOptions

다음 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)

참고

연결 문자열이 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/tlscrypto/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() 메서드에 전달하여 ClientOptions인스턴스의 TLSConfig 필드를 설정합니다.

// 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 문서를 참조하세요.

돌아가기

네트워크 압축