TLS 구성
이 페이지의 내용
URI 옵션이 있는 구성
URI에 tls=true
를 포함하여 TLS를 사용하도록 설정합니다.
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);
다음 URI 옵션을 사용하여 TLS를 추가로 구성할 수 있습니다.
상수 | 키 | 설명 |
---|---|---|
MongOC_URI_TLS | TLS | {true|false}는 TLS를 사용해야 하는지 여부를 나타냅니다. |
MONGOC_URI_TLSCERTIFICATEKEYFILE | tlscertificatekeyfile | 공개 인증서가 끝에 연결된 PEM 형식의 비공개 키의 경로입니다. |
MONGOC_URI_TLSCERTIFICATEKEYFILEPASSWORD | tlscertificatekeypassword | 암호화됨 비공개 키의 잠금을 해제하는 데 사용할 비밀번호(있는 경우)입니다. |
MongOC_URI_TLSCAFILE | tlsCAFile | 신뢰할 수 있는 것으로 간주되어야 하는 인증 기관 한 개 또는 번들입니다. |
MongOC_URI_TLSALLOWINVALIDCERTIFICATES | tlsAllowInvalidCertificates | 인증서 확인 오류 수락 및 무시(예: 신뢰할 수 없는 발급자, 만료 등) |
MongOC_URI_TLSALLOWINVALIDHOSTNAMES | tlsAllowInvalidHostnames | 인증서의 호스트 이름 확인을 무시합니다(예: 중간자(Man In The Middle), 유효한 인증서를 사용하지만 다른 호스트 이름으로 발급됨) |
MongOC_URI_TLSINSECURE | tlsInsecure | {true|false}는 안전하지 않은 TLS 옵션을 사용해야 하는지 여부를 나타냅니다. 현재 이는 MongOC_URI_TLSALLOWINVALIDCERTIFICATES 및 MongOC_URI_TLSALLOWINVALIDHOSTNAMES를 의미합니다. |
MongOC_URI_TLSDISABLECERTIFICATEREVOCATIONCHECK | tlsdisablecertificatereventioncheck | {true|false}는 철회 확인(CRL / OCSP)을 비활성화할지 여부를 나타냅니다. |
MongOC_URI_TLSDISABLEOCSPENDPOINTCHECK | tlsdisableocspendpointcheck | {true|false}는 OCSP 응답이 스테이플링되지 않은 경우 OCSP 응답자 엔드포인트를 요청하지 않아야 하는지 여부를 나타냅니다. |
mongoc_ssl_opt_t를 사용한 구성
또는mongoc_ssl_opt_t 구조체를 사용하여 mongoc_client_set_ssl_opts 로 TLS를 구성할 수 있습니다. 또는 mongoc_client_pool_set_ssl_opts . 대부분의 구성 가능한 옵션은 연결 string URI를 사용하여 설정하다 수 있습니다.
mongoc_ssl_opt_t 키 | URI 키 |
---|---|
pem_file | tlsClientCertificateKeyFile |
pem_pwd | tlsClientCertificateKeyPassword |
ca_file | tlsCAFile |
weak_cert_validation | tlsAllowInvalidCertificates |
allow_invalid_hostname | tlsAllowInvalidHostnames |
유일한 예외는 crl_file
및 ca_dir
입니다. 이는 mongoc_ssl_opt_t 로만 설정하다 수 있습니다.
클라이언트 인증
TLS가 활성화된 상태에서 MongoDB 를 시작하는 경우, 기본값 클라이언트 는 --tlsCAFile
에서 지정한 인증 기관에서 발급한 클라이언트 인증서 또는 서버 에서 사용 중인 네이티브 인증서 저장 가 신뢰하는 기관을 제공해야 합니다.
클라이언트 인증서를 제공하려면 URI의 tlsCertificateKeyFile
를 PEM 아머드 인증서 파일 로 설정하다 합니다.
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);
MongoDB Server 인증서 확인
MongoDB C 드라이버 는 구성된 인증 기관에서 발급한 서버 인증서의 유효성 검사, 호스트 이름 유효성 검사 및 만료를 자동으로 확인합니다.
이 동작을 덮어쓰려면 호스트 이름 유효성 검사, OCSP 엔드포인트 해지 확인, 해지 확인을 완전히 비활성화하고 유효하지 않은 인증서를 허용할 수 있습니다.
이 동작은 tlsAllowInvalidHostnames
, tlsDisableOCSPEndpointCheck
, tlsDisableCertificateRevocationCheck
및 tlsAllowInvalidCertificates
옵션을 각각 사용하여 제어합니다. 기본적으로 모두 false
로 설정됩니다.
이러한 기본값을 변경하는 것은 클라이언트 가 중간자 공격( tlsAllowInvalidHostnames
이 설정하다 경우), 유효하지 않은 인증서( tlsAllowInvalidCertificates
가 설정하다 경우) 또는 잠재적으로 해지된 인증서( tlsDisableOCSPEndpointCheck
또는 tlsDisableCertificateRevocationCheck
2}의 경우)에 노출될 수 있으므로 권장되지 않습니다. 이 설정하다).
지원되는 라이브러리
기본값 으로 libmongoc은 지원되는 TLS 라이브러리를 찾고 TLS 지원 을 활성화 하려고 시도합니다. 이는 기본값 AUTO
로 설정하다 되는 cmake 플래그 ENABLE_SSL
에 의해 제어됩니다. 유효한 값은 다음과 같습니다.
AUTO
기본값 동작. 시스템의 네이티브 TLS 라이브러리에 연결하거나 OpenSSL을 찾습니다.DARWIN
링크를 macOS의 네이티브 TLS 라이브러리인 보안 전송에 연결합니다.WINDOWS
Windows의 네이티브 TLS 라이브러리인 보안 채널에 대한 링크입니다.OPENSSL
OpenSSL(libssl)에 대한 링크입니다. 선택적 설치 경로는OPENSSL_ROOT
으로 지정할 수 있습니다.LIBRESSL
LibreSSL의 libtls에 대한 링크입니다. (LibreSSL의 호환되는 libssl은OPENSSL
을(를) 설정하여 연결할 수 있습니다).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 의및 필드를 사용하여 재정의할 수 있습니다.
온라인 인증서 상태 프로토콜(OCSP)(참조 RFC 6960)는 OpenSSL 를 사용할 때 완전히 1 지원됩니다.0.1+ 다음 메모와 함께:
가
crl_file
mongoc_ssl_opt_t 로 설정하다crl_file
경우 가 서버의 인증서를 해지하면 인증서가 해지된 것으로 간주됩니다(인증서에 유효한 스테이플링된 OCSP 응답이 있더라도).
LibreSSL / libtls
MongoDB C 드라이버 는 openssl
에 대해 컴파일하도록 구성된 경우 OpenSSL 호환성 검사를 사용하여 LibreSSL을 지원합니다. 또한 libressl
에 대해 빌드 하도록 구성된 경우 새로운 libtls
라이브러리를 지원합니다.
Windows 네이티브 라이브러리에 대해 컴파일할 때 crl_file
옵션은 mongoc_ssl_opt_t 은(는) 지원되지 않으며 사용하면 오류가 발생합니다.
tlsDisableOCSPEndpointCheck
및 tlsDisableCertificateRevocationCheck
를 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)(참조 RFC 6960)은 다음 참고 사항과 함께 부분적으로 지원됩니다.
필수 스테이플 확장(참조 RFC 7633)는 무시됩니다. 다음과 같은 경우 연결이 계속될 수 있습니다.
필수 필수 인증서는 스테이플링된 응답 없이 제공됩니다( 클라이언트 가 OCSP 응답자로부터 해지된 응답을 받지 않는 경우).
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
Windows 의 네이티브 TLS 지원(보안 채널)
MongoDB C 드라이버 는 Windows 네이티브 TLS 라이브러리(보안 채널 또는 SChannel) 및 해당 네이티브 암호화 라이브러리(Cryptgraphy API: Next Generation, 또는 CNG)를 지원합니다.
Windows 네이티브 라이브러리에 대해 컴파일할 때 ca_dir
옵션은 mongoc_ssl_opt_t 은(는) 지원되지 않으며 사용하면 오류가 발생합니다.
암호화된 PEM 파일(예: tlsCertificateKeyPassword
설정)도 지원되지 않으며, 이를 로드하려고 하면 오류가 발생합니다.
tlsCAFile
설정하다 하면 운전자 는 제공된 기관에서 발급한 서버 인증서만 허용합니다. tlsCAFile
이(가) 설정하다 되지 않은 경우 운전자 는 System Local Machine Root
인증서 저장 를 사용하여 인증 기관을 조회하여 제공된 인증서를 확인합니다.
crl_file
가 mongoc_ssl_opt_t 로 설정하다 경우 , 운전자 는 해지 목록을 System Local Machine Root
인증서 저장 로 가져옵니다.
tlsDisableOCSPEndpointCheck
을(를) 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)(참조 RFC 6960)은 다음 참고 사항과 함께 부분적으로 지원됩니다.
필수 스테이플 확장(참조 RFC 7633)는 무시됩니다. 필수 필수 인증서에 스테이플된 응답이 없는 경우( 클라이언트 가 OCSP 응답자로부터 해지된 응답을 받지 않는 한) 연결이 계속될 수 있습니다.
가
crl_file
mongoc_ssl_opt_t 로 설정하다crl_file
경우 가 서버의 인증서를 해지하면 OCSP 응답이 우선합니다. 예를 들어 서버 가 유효한 스테이플링된 OCSP 응답이 포함된 인증서를 제공하는 경우crl_file
에서 인증서를 해지됨으로 표시하더라도 인증서는 유효한 것으로 간주됩니다.필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
macOS/Darwin의 네이티브 TLS 지원(보안 전송)
MongoDB C 드라이버는 Darwin(OS X, macOS, iOS 등) 네이티브 TLS 라이브러리(Secure Transport) 및 네이티브 암호화 라이브러리(Common Crypto, 또는 CC)를 지원합니다.
보안 전송에 대해 컴파일할 때 ca_dir
crl_file
mongoc_ssl_opt_t 의 및 옵션은 는 지원되지 않습니다. 둘 중 하나를 사용하면 오류가 발생합니다.
tlsCAFile
설정하다 하면 운전자 는 제공된 기관에서 발급한 서버 인증서만 허용합니다. tlsCAFile
이(가) 설정하다 되지 않으면 운전자 는 현재 잠금 해제된 키체인의 인증 기관을 사용합니다.
tlsDisableOCSPEndpointCheck
및 tlsDisableCertificateRevocationCheck
를 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)(참조 RFC 6960)는 다음 참고 사항으로 부분적으로 지원됩니다.
필수 스테이플 확장(참조 RFC 7633)는 무시됩니다. 필수 필수 인증서에 스테이플된 응답이 없는 경우( 클라이언트 가 OCSP 응답자로부터 해지된 응답을 받지 않는 한) 연결이 계속될 수 있습니다.
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.