문서 메뉴
문서 홈
/ / /
Rust 드라이버
/ /

TLS 사용 및 구성

이 페이지의 내용

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

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

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

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

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

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

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

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

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

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

  • ClientOptions 인스턴스의 tls 필드를 빈 TlsOptions 구조체가 있는 Tls::Enabled 변형으로 설정하고 해당 옵션을 사용하여 Client 을 인스턴스화합니다.

다음 Connection StringClientOptions 탭에서 선택하여 해당 코드 샘플을 확인합니다.

let uri = "mongodb://<hostname>:<port>?tls=true"
let client = Client::with_uri_str(uri).await?;
let uri = "<connection string>"
let mut client_options = ClientOptions::parse_async(uri).await?;
let tls_opts = TlsOptions::builder().build();
client_options.tls = Some(Tls::Enabled(tls_opts));
let client = Client::with_options(client_options)?;

참고

연결 문자열이 mongodb+srv 접두사를 포함하여 DNS SRV 레코드를 사용하는 경우 연결에서 기본적으로 TLS가 사용하도록 설정됩니다.

클라이언트 옵션의 전체 목록은 연결 옵션 가이드를 참조하세요.

TLS 요청을 성공적으로 시작하려면 애플리케이션에서 ID를 증명하는 암호화 인증서를 제시해야 합니다. MongoDB deployment에 연결할 때 TLS를 활성화하려면 애플리케이션의 인증서를 PEM(프라이버시 강화 메일) 파일로 저장해야 합니다. PEM 파일 형식은 암호화 인증서의 container 형식입니다.

중요

프로덕션 용도의 경우 MongoDB deployment에서 동일한 인증 기관에서 생성하고 서명한 유효한 인증서를 사용하는 것이 좋습니다. 테스트를 위해 배포에서 자체 서명된 인증서를 사용할 수 있습니다.

다음 목록에서는 TLS 사용 연결을 설정하기 위해 클라이언트가 제시해야 하는 구성 요소에 대해 설명합니다.

TLS 구성 요소
설명
인증 기관(CA)
TLS 연결 시 신뢰할 수 있는 하나 이상의 인증 기관
클라이언트 인증서
서버가 암호화된 네트워크 연결을 설정하기 위해 애플리케이션의 ID를 확인할 수 있도록 하는 디지털 인증서
인증서 키
클라이언트 인증서 비공개 키 파일(종종 인증서 파일 자체에 포함됨)
암호 구문
개인 클라이언트 키가 암호화된 경우 해독을 위한 비밀번호

클라이언트가 연결되기 전에 서버에서 인증서를 검증할 수 있도록 TlsOptions 구조체의 인증서를 참고해야 합니다.

먼저 인증서 파일 경로를 PathBuf 유형으로 변환해야 하므로 이 유형을 std::path 모듈에서 가져와야 합니다. 그런 다음 TlsOptions 구조체의 빌더 함수를 호출하여 ca_file_pathcert_key_file_path 필드를 인증서 파일 경로로 설정합니다.

TlsOptions 인스턴스 내에서 선택적 필드를 설정하여 연결에서 TLS를 구성할 수 있습니다. 테스트 목적으로 allow_invalid_certificatesallow_invalid_hostnames 필드를 설정할 수 있습니다.

allow_invalid_certificates 옵션을 true로 설정하면 호스트 이름 확인이 비활성화되며, allow_invalid_hostnamestrue로 설정하면 인증서 유효성 검사가 비활성화됩니다.

경고

프로덕션 환경에서 이러한 옵션 중 하나를 지정하면 애플리케이션이 안전하지 않고 만료된 인증서 및 유효한 클라이언트 인스턴스로 가장하는 외부 프로세스에 잠재적으로 취약해집니다.

이 예시에서는 다음 조치를 수행하여 TLS에 대해 구성된 TlsOptions 인스턴스와 Client 인스턴스를 생성합니다.

  1. PathBuf 인스턴스에서 인증서 파일 경로를 참고 변수를 생성합니다.

  2. TlsOptions 구조체를 인스턴스화하고 ca_file_pathcert_key_file_path 필드를 관련 파일 경로로 설정합니다.

  3. TlsOptions 인스턴스를 Tls 열거형의 Enabled 변형에 전달합니다.

  4. ClientOptions 구조체의 tls 필드를 TlsOptions 인스턴스가 포함된 Tls::Enabled 변형으로 설정합니다.

  5. 이러한 옵션을 사용하여 Client 인스턴스를 만듭니다.

use std::path::PathBuf;
use mongodb::{ options::{ ClientOptions, TlsOptions, Tls }, Client };
#[tokio::main]
async fn main() -> mongodb::error::Result<()> {
let uri = "<connection string>";
let mut client_options = ClientOptions::parse_async(uri).await?;
let ca_file = PathBuf::from(r"<path to CA certificate>");
let key_file = PathBuf::from(r"<path to client certificate>");
let tls_opts = TlsOptions::builder()
.ca_file_path(ca_file)
.cert_key_file_path(key_file)
.build();
client_options.tls = Some(Tls::Enabled(tls_opts));
let _client = Client::with_options(client_options)?;
Ok(())
}

연결에서 TLS를 활성화하는 방법에 대해 자세히 알아보려면 다음 서버 매뉴얼 문서를 참조하세요.

이 가이드에 언급된 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

네트워크 압축