TLS(전송 계층 보안) 구성
이 페이지의 내용
개요
이 가이드 에서는 TLS 사용 방법을 학습 수 있습니다. 프로토콜 을 사용하여 MongoDB deployment 에 대한 연결을 보호합니다.
연결에 TLS를 활성화 하면 C 운전자 는 다음 작업을 수행합니다.
TLS를 사용하여 MongoDB deployment에 연결
배포서버의 인증서를 확인합니다.
인증서가 배포를 인증하는지 확인합니다.
TLS를 위해 MongoDB deployment 를 구성하는 방법을 학습 보려면 MongoDB Server 매뉴얼의 TLS 구성 가이드 를 참조하세요.
참고
TLS/SSL, PKI(공개 키 인프라) 인증서 및 인증 기관(CA)에 대한 전체 설명은 이 문서의 범위를 벗어납니다. 이 페이지에서는 TLS/SSL에 대한 사전 지식이 있고 유효한 인증서에 액세스할 수 있다고 가정합니다.
TLS 활성화
다음과 같은 방법으로 MongoDB 인스턴스에 대한 연결에서 TLS를 활성화할 수 있습니다:
연결 string에서
tls
매개변수 설정mongoc_uri_set_option_as_bool()
함수를 설정하다 하여MONGOC_URI_TLS
연결 옵션을true
(으)로 설정합니다.
mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true"); // Do database work here mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017"); mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true); mongoc_client_t *client = mongoc_client_new_from_uri (uri); // Do database work here mongoc_client_destroy (client); mongoc_uri_destroy (uri);
팁
연결 string 에 SRV 연결 형식을 지정하는 +srv
수정이 포함된 경우 기본적으로 연결에서 TLS가 활성화됩니다.
SRV 연결 형식에 학습 보려면 MongoDB Server 설명서에서 SRV 연결 형식 을 참조하세요.
CA 파일 지정
TLS를 활성화한 상태에서 MongoDB deployment 서버에 연결하는 경우, 배포서버 서버에서는 기본값 클라이언트 가 인증 기관에서 발급한 클라이언트 인증서 또는 서버 에서 사용 중인 네이티브 인증서 저장 가 신뢰하는 기관을 제공해야 합니다.
다음과 같은 방법으로 클라이언트 인증서를 제공할 수 있습니다.
연결 문자열 의
tlscertificatekeyfile
매개 변수를 루트 인증서 체인이 포함된.pem
파일 로 설정mongoc_uri_set_option_as_utf8()
함수를 설정하다 하여MONGOC_URI_TLSCERTIFICATEKEYFILE
옵션을 루트 인증서 체인이 포함된.pem
파일 로 설정합니다.
mongoc_client_t *client = mongoc_client_new ("mongodb+srv://<db_username>:<db_password>@<hostname>/?tls=true&tlscertificatekeyfile=/path/to/certs/client-certificate.pem"); // Do database work here mongoc_client_destroy (client);
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost:27017"); mongoc_uri_set_option_as_bool (uri, MONGOC_URI_TLS, true); mongoc_uri_set_option_as_utf8 (uri, MONGOC_URI_TLSCERTIFICATEKEYFILE, "/path/to/client-certificate.pem"); mongoc_client_t *client = mongoc_client_new_from_uri (uri); // Do database work here mongoc_client_destroy (client); mongoc_uri_destroy (uri);
MongoDB Server 인증서 확인
MongoDB C 드라이버 는 구성된 인증 기관에서 발급한 서버 인증서의 유효성을 자동으로 확인합니다. 운전자 는 호스트 이름 유효성 검사 및 해지 확인도 수행합니다.
이 동작을 덮어쓰려면 호스트 이름 유효성 검사, OCSP 엔드포인트 해지 확인, 모든 해지 확인, 유효하지 않은 인증서 허용을 비활성화할 수 있습니다.
이 동작은 tlsAllowInvalidHostnames
, tlsDisableOCSPEndpointCheck
, tlsDisableCertificateRevocationCheck
및 tlsAllowInvalidCertificates
옵션을 사용하여 제어합니다. 기본값 으로 모두 false
로 설정하다 됩니다.
클라이언트 가 다음과 같은 보안 위험에 노출될 수 있으므로 이러한 기본값을 변경하지 않는 것이 좋습니다.
이(가)
tlsAllowInvalidHostnames
설정하다 경우 중간자 공격유효하지 않은 인증서,
tlsAllowInvalidCertificates
이 설정하다 경우tlsDisableOCSPEndpointCheck
또는tlsDisableCertificateRevocationCheck
이 설정하다 경우 잠재적으로 해지된 인증서
지원되는 라이브러리
기본값 으로 libmongoc은 지원되는 TLS 라이브러리를 찾고 TLS 지원 을 활성화 하려고 시도합니다. 이는 기본값 AUTO
로 설정하다 되는 cmake 플래그 ENABLE_SSL
에 의해 제어됩니다. 이 플래그는 다음 값을 허용합니다.
AUTO
: 시스템의 네이티브 TLS 라이브러리에 연결하거나 OpenSSL을 찾으려고 시도합니다. 이 값이 기본값 입니다.OPENSSL
: OpenSSL(libssl)에 대한 링크입니다. 선택적 설치 경로는OPENSSL_ROOT
으로 지정할 수 있습니다.LIBRESSL
(사용 중단됨): LibreSSL의 libtls에 대한 링크입니다.OPENSSL
을(를) 설정하여 LibreSSL의 호환되는 libssl에 연결할 수 있습니다.WINDOWS
: Windows 의 네이티브 TLS 라이브러리인 보안 채널에 대한 링크입니다.DARWIN
: macOS의 네이티브 TLS 라이브러리인 보안 전송에 대한 링크입니다.OFF
: TLS 지원 을 비활성화합니다.
OpenSSL
MongoDB C 드라이버 는 Linux 및 Unix 플랫폼(macOS 제외)에서 OpenSSL을 사용합니다. 업계 권장사항 사항 및 일부 규정에서는 TLS 1.1 이상을 사용해야 하며, 이를 위해서는 OpenSSL 1.0.1 이상이 필요합니다. 다음 명령을 사용하여 OpenSSL 버전을 확인합니다.
openssl version
시스템의 OpenSSL이 최신 버전(1.0.1 이상)인지 확인하거나, 다음 명령을 사용하여 비시스템 경로에 최신 버전을 설치하고 이에 따라 빌드 합니다.
cmake -DOPENSSL_ROOT_DIR=/absolute/path/to/openssl
OpenSSL에 대해 컴파일할 때 운전자 는 배포판에 구성된 대로 시스템 기본값 인증서 저장 를 로드하려고 시도합니다. 이는 tlsCAFile
URI 옵션을 설정하거나 ca_file
ca_dir
mongoc_ssl_opt_t 의및 필드를 사용하여 재정의할 수 있습니다.
OpenSSL +를 사용할 때 온라인 인증서 상태 프로토콜(OCSP)이 완벽하게 1.0.1지원됩니다. 그러나 가 crl_file
mongoc_ssl_opt_t와 함께 설정하다 되고 crl_file
가 서버의 인증서를 해지하는 경우, 인증서에 유효한 스테이플 OCSP 응답이 있더라도 인증서가 해지된 것으로 간주됩니다.
팁
OCSP에 대한 자세한 내용은 RFC 6960 를 참조하세요.
LibreSSL / libtls (사용 중단됨)
MongoDB C 드라이버 는 openssl
에 대해 컴파일하도록 구성된 경우 OpenSSL 호환성 검사를 사용하여 LibreSSL을 지원합니다. 또한 libressl
에 대해 빌드 하도록 구성된 경우 새로운 libtls
라이브러리를 지원합니다.
LibreSSL로 컴파일할 때 crl_file
mongoc_ssl_opt_t의 옵션은 지원되지 않으며, 사용하면 오류가 발생합니다. 및 tlsDisableOCSPEndpointCheck
설정은 tlsDisableCertificateRevocationCheck
효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)은 다음과 같은 참고 사항과 함께 부분적으로 지원됩니다.
필수 스테이플 확장(RFC 7633 참조)은 무시됩니다.
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
클라이언트 가 OCSP 응답자로부터 취소된 응답을 받으면 연결이 계속되지 않습니다.
팁
OCSP에 대한 자세한 내용은 RFC 6960 를 참조하세요.
Windows 의 네이티브 TLS 지원(보안 채널)
MongoDB C 드라이버 는 Windows 네이티브 TLS 라이브러리(보안 채널 또는 SChannel)와 해당 네이티브 암호화 라이브러리(Cryptgraphy API: Next Generation, 또는 CNG)를 지원합니다.
Windows 네이티브 라이브러리에 대해 컴파일할 때 ca_dir
mongoc_ssl_opt_t의 옵션은 지원되지 않으며 사용하면 오류가 발생합니다.
tlsCertificateKeyPassword
URI 옵션을 사용하여 설정하다 한 암호화된 PEM 파일도 지원되지 않으며, 이를 로드하려고 할 때 오류가 발생합니다.
tlsCAFile
을(를) 설정하다 하면 운전자 는 제공된 하나 이상의 기관에서 발급한 서버 인증서만 허용합니다. tlsCAFile
이(가) 설정하다 되지 않은 경우 운전자 는 System Local Machine Root
인증서 저장 를 사용하여 인증 기관을 조회하여 제공된 인증서를 확인합니다.
crl_file
가 mongoc_ssl_opt_t 로 설정하다 경우 , 운전자 는 해지 목록을 System Local Machine Root
인증서 저장 로 가져옵니다.
tlsDisableOCSPEndpointCheck
을(를) 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)은 다음과 같은 참고 사항과 함께 부분적으로 지원됩니다.
필수 스테이플 확장(RFC 7633 참조)은 무시됩니다.
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
클라이언트 가 OCSP 응답자로부터 취소된 응답을 받으면 연결이 계속되지 않습니다.
mongoc_ssl_opt_t로 가
crl_file
설정하다 되고 가crl_file
서버의 인증서를 해지하면 OCSP 응답이 우선합니다. 예를 예시, 서버 가 유효한 스테이플 OCSP 응답이 포함된 인증서를 제공하는 경우 에서 인증서를 해지됨으로 표시하더라도 인증서는 유효한crl_file
것으로 간주됩니다.
팁
OCSP에 대한 자세한 내용은 RFC 6960 를 참조하세요.
macOS/Darwin의 네이티브 TLS 지원(보안 전송)
MongoDB C 드라이버 는 Darwin 네이티브 TLS 라이브러리와 네이티브 암호화 라이브러리인 Common Crypto를 모두 지원합니다.
보안 전송에 대해 컴파일할 때 ca_dir
crl_file
mongoc_ssl_opt_t 의 및 옵션은 는 지원되지 않습니다. 둘 중 하나를 사용하면 오류가 발생합니다.
tlsCAFile
설정하다 하면 운전자 는 제공된 기관에서 발급한 서버 인증서만 허용합니다. tlsCAFile
이(가) 설정하다 되지 않으면 운전자 는 잠금 해제된 키체인의 인증 기관을 사용합니다.
보안 전송에 대해 컴파일할 때는 tlsDisableOCSPEndpointCheck
및 tlsDisableCertificateRevocationCheck
를 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)은 다음 참고 사항을 통해 부분적으로 지원됩니다.
필수 스테이플 확장(RFC 7633 참조)은 무시됩니다.
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
클라이언트 가 OCSP 응답자로부터 취소된 응답을 받으면 연결이 계속되지 않습니다.
팁
OCSP에 대한 자세한 내용은 RFC 6960 를 참조하세요.
API 문서
이 가이드 에 언급된 객체 및 함수에 대한 자세한 내용은 다음 API 문서를 참조하세요.