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 또는 mongoc_client_pool_set_ssl_opts로 TLS를 구성할 수 있습니다. 대부분의 구성 가능한 옵션은 연결 문자열 URI를 사용하여 설정할 수 있습니다.
mongoc_ssl_opt_t key | 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 라이브러리인 보안 전송에 연결합니다.WINDOWSWindows의 네이티브 TLS 라이브러리인 보안 채널에 대한 링크입니다.OPENSSLOpenSSL(libssl)에 대한 링크입니다. 선택적 설치 경로는OPENSSL_ROOT으로 지정할 수 있습니다.LIBRESSLLibreSSL의 libtls에 대한 링크입니다. (LibreSSL의 호환되는 libssl은OPENSSL을(를) 설정하여 연결할 수 있습니다).OFFTLS 지원 을 비활성화합니다.
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 옵션을 설정하거나 mongoc_ssl_opt_t의 ca_file 및 ca_dir 필드를 사용하여 재정의할 수 있습니다.
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 인증서 저장 를 사용하여 인증 기관을 조회하여 제공된 인증서를 확인합니다.
When crl_file 가 mongoc_ssl_opt_t 로 설정하다 되면 운전자 해지 목록을 System Local Machine Root 인증서 저장 로 가져옵니다.
tlsDisableOCSPEndpointCheck 을(를) 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)(RFC 6960 참조)은 다음 참고 사항과 함께 부분적으로 지원됩니다.
필수 스테이플 확장( RFC 7633 참조)은 무시됩니다. 필수 필수 인증서에 스테이플 처리된 응답이 없는 경우( 클라이언트 OCSP 응답자로부터 해지된 응답을 받지 않는 한) 연결이 계속될 수 있습니다.
mongoc_ssl_opt_t로 가 설정하다
crl_filecrl_file되고 가 서버의 인증서를 해지하면 OCSP 응답이 우선합니다. 예를 들어 서버 유효한 스테이플 OCSP 응답이 포함된 인증서를 제공하는 경우crl_file에서 해지됨으로 표시하더라도 인증서는 유효한 것으로 간주됩니다.필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.
macOS/Darwin의 네이티브 TLS 지원(보안 전송)
MongoDB C 드라이버는 Darwin(OS X, macOS, iOS 등) 네이티브 TLS 라이브러리(Secure Transport) 및 네이티브 암호화 라이브러리(Common Crypto, 또는 CC)를 지원합니다.
보안 전송에 대해 컴파일할 때는 mongoc_ssl_opt_t 의 ca_dir 및 crl_file 옵션이 지원되지 않습니다. 둘 중 하나를 사용하면 오류가 발생합니다.
tlsCAFile 설정하다 하면 운전자 는 제공된 기관에서 발급한 서버 인증서만 허용합니다. tlsCAFile 이(가) 설정하다 되지 않으면 운전자 는 현재 잠금 해제된 키체인의 인증 기관을 사용합니다.
tlsDisableOCSPEndpointCheck 및 tlsDisableCertificateRevocationCheck 를 설정해도 아무런 효과가 없습니다.
온라인 인증서 상태 프로토콜(OCSP)(RFC 6960 참조)은 다음 참고 사항을 통해 부분적으로 지원됩니다.
필수 스테이플 확장( RFC 7633 참조)은 무시됩니다. 필수 필수 인증서에 스테이플 처리된 응답이 없는 경우( 클라이언트 OCSP 응답자로부터 해지된 응답을 받지 않는 한) 연결이 계속될 수 있습니다.
필수 필수 인증서가 스테이플 응답 없이 제시되고 OCSP 응답자가 다운된 경우 연결이 계속됩니다.