개요
이 가이드 에서는 TLS(전송 계층 보안) 프로토콜 사용하여 MongoDB deployment 에 대한 연결을 보호하는 방법을 학습 수 있습니다.
TLS를 사용하여 MongoDB deployment 에 연결하려면 다음 단계를 수행해야 합니다.
Mongo::Client
에서 TLS 연결을 활성화합니다.클라이언트 TLS 인증서를 지정합니다.
서버의 TLS 인증서를 확인하려면 인증 기관(CA) 인증서를 지정하세요.
TLS용으로 MongoDB deployment 구성하는 방법을 학습 MongoDB Server 매뉴얼의TLS 구성 가이드 참조하세요.
참고
이 페이지에서는 TLS/SSL에 대한 사전 지식이 있고 유효한 인증서에 액세스 가정합니다. TLS/SSL, PKI(공개 키 인프라) 인증서 및 CA에 대한 전체 설명은 이 문서의 범위를 벗어납니다. TLS에 대해 자세히 학습 전송 계층 보안에대한 Wikipedia 항목을 참조하세요.
TLS 활성화
다음과 같은 방법으로 MongoDB deployment 에 대한 연결에 TLS를 활성화 할 수 있습니다.
새
Mongo:Client
객체 에서ssl
옵션을true
로 설정합니다.연결 문자열 에서
tls
옵션을true
로 설정합니다.
참고
SSL 명명 규칙
Ruby 운전자 v2.6 이상에서 지원되는 모든 MongoDB Server 버전은 TLS만 구현 . 2.6 이며 SSL을 사용하지 않습니다.
역사적 이유로 Ruby 운전자 TLS 옵션에 tls
대신 ssl
접두사를 붙입니다. Ruby 운전자 버전 3.0 이상에서는 Ruby 옵션 이름에 tls
접두사를 사용합니다.
인증서를 구성하려면 다음 옵션을 지정해야 합니다.
ssl_cert
: MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 인증서 파일 .ssl_key
: MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 비공개 키 파일입니다.ssl_ca_cert
: MongoDB deployment 에서 클라이언트 로 전달된 인증서의 유효성을 검사하는 데 사용되는 연결된 CA 인증서가 포함된 파일 입니다. 이 옵션의 값을 지정하지 않으면 운전자 기본값 시스템 루트 인증서 저장 신뢰 앵커로 사용합니다.
다음 예시 에서는 TLS 인증서와 해당 비공개 키가 별도의 파일에 제공됩니다.
client = Mongo::Client.new(["<hostname>:<port>"], ssl: true, ssl_cert: 'path/to/client.crt', ssl_key: 'path/to/client.key', ssl_ca_cert: 'path/to/ca.crt' )
단일 파일 에 TLS 인증서와 비공개 키를 모두 지정할 수 있지만 인증서와 비공개 키 옵션은 모두 지정해야 합니다. 다음 예시 에서는 TLS 인증서와 비공개 키가 모두 동일한 client.pem
파일 에 정의되어 있습니다.
client = Mongo::Client.new(["<hostname>:<port>"], ssl: true, ssl_cert: 'path/to/client.pem', ssl_key: 'path/to/client.pem', ssl_ca_cert: 'path/to/ca.crt', )
인증서를 구성하려면 다음 URI 옵션을 지정해야 합니다.
tlsCertificateKeyFile
: MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 인증서 및 키 파일이 포함된 파일 입니다.tlsCAFile
: MongoDB deployment 에서 클라이언트 로 전달된 인증서의 유효성을 검사하는 데 사용되는 연결된 CA 인증서가 포함된 파일 입니다. 이 옵션의 값을 지정하지 않으면 운전자 기본값 시스템 루트 인증서 저장 신뢰 앵커로 사용합니다.
client = Mongo::Client.new( "mongodb://<hostname>:<port>/?tls=true&tlsCertificateKeyFile=path%2fto%2fclient.pem&tlsCAFile=path%2fto%2fca.crt")
인증서와 키가 포함된 파일 확장자는 일반적으로 ``.crt`` 또는 .pem
입니다.
URI 옵션 값은 퍼센트 인코딩되어야 합니다. 이는 예시 들어 %2f
로 인코딩된 경로의 슬래시(/)에 적용됩니다.
클라이언트 TLS 인증서 지정
Ruby 운전자 다양한 데이터 또는 객체 유형으로 TLS 인증서, 키, CA 인증서를 지정할 수 있는 여러 옵션을 제공합니다.
TLS 인증서
다음 옵션 중 하나를 제공하여 TLS 인증서를 지정할 수 있습니다.
옵션 이름 | 허용되는 데이터/객체 유형 | 설명 |
---|---|---|
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 인증서 파일 경로입니다. |
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 인증서 객체 . |
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 PEM 인코딩 인증서가 포함된 문자열입니다. |
TLS 비공개 키
다음 옵션 중 하나를 제공하여 TLS 비공개 키를 지정할 수 있습니다.
옵션 이름 | 허용되는 데이터/객체 유형 | 설명 |
---|---|---|
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 비공개 키 파일 경로입니다. |
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 비공개 키 객체 . |
|
| 비공개 키의 암호입니다. |
|
| MongoDB deployment 에 대한 연결을 확인하는 데 사용되는 PEM 인코딩된 비공개 키가 포함된 문자열입니다. |
TLS CA 인증서
다음 옵션 중 하나를 제공하여 TLS CA 인증서를 지정할 수 있습니다.
옵션 이름 | 허용되는 데이터/객체 유형 | 설명 |
---|---|---|
|
| MongoDB deployment 에서 클라이언트 로 전달된 인증서의 유효성을 검사하는 데 사용되는 연결된 CA 인증서가 포함된 파일 경로입니다. |
|
| MongoDB deployment 에서 클라이언트 로 전달된 인증서의 유효성을 검사하는 데 사용되는 CA 인증서를 나타내는 객체 배열 . |
|
| MongoDB deployment 에서 클라이언트 로 전달된 인증서의 유효성을 검사하는 데 사용되는 PEM 인코딩 CA 인증서 1개가 포함된 문자열입니다. |
TLS 컨텍스트 수정
TLS 구성에 사용자 지정이 필요한 경우 네이티브 Ruby Proc
객체 Mongo.tls_context_hooks
배열 에 추가하여 TLS 컨텍스트 훅을 설정하다 수 있습니다. Mongo::Client
인스턴스를 생성하기 전에 Proc
객체 배열 에 추가합니다.
다음 코드 예시 AES256-SHA 암호를 TLS에 사용할 수 있는 유일한 암호로 활성화합니다.
Mongo.tls_context_hooks.push( Proc.new { |context| context.ciphers = ["AES256-SHA"] } )
Ruby 운전자 TLS 컨텍스트 옵션은 SSL의 네이티브 Ruby 처리를 기반으로 합니다. 사용 가능한 TLS 컨텍스트 옵션에 대해 자세히 학습하려면 SSLContext.에 대한 Ruby 설명서를 참조하세요.
OCSP 검증
서버 에서 제공한 인증서에 OCSP 엔드포인트 URI가 포함된 경우 운전자 인증서의 유효성을 확인하기 위해 기본값 으로 지정된 엔드포인트에 온라인 인증서 상태 프로토콜(OCSP) 요청 발행합니다.
OCSP 엔드포인트 검사를 비활성화하려면 클라이언트 생성할 때 :ssl_verify_ocsp_endpoint
Ruby 옵션을 false
로 설정하다 하거나 tlsDisableOCSPEndpointCheck
URI 옵션을 true
로 설정하다 .
참고
JRuby는 OCSP 검증을 지원하지 않습니다.
JRuby는 OCSP 엔드포인트 URI를 올바르게 노출하지 않기 때문에 기본 애플리케이션 JRuby에서 실행될 때 운전자 OCSP 엔드포인트를 확인하지 않습니다.
안전하지 않은 TLS 허용
TLS가 활성화되면 Ruby 운전자 서버 제공하는 인증서를 자동으로 확인합니다. 코드를 테스트할 때 이 확인을 비활성화할 수 있습니다. 이를 안전하지 않은 TLS라고 합니다.
안전하지 않은 TLS를 사용하도록 설정하면 운전자 는 서버 가 X.509 인증서를 제시하기만 하면 됩니다. 운전자 는 다음 중 하나에 해당하는 경우에도 인증서를 수락합니다.
서버의 호스트 이름과 인증서의 주체 이름(또는 주체 대체 이름)이 일치하지 않는 경우
인증서가 만료되었거나 아직 유효하지 않습니다.
인증서의 체인에 신뢰할 수 있는 루트 인증서가 없는 경우
인증서 용도가 서버 식별에 유효하지 않은 경우
참고
안전하지 않은 TLS가 활성화된 경우에도 클라이언트와 서버 간의 통신은 TLS로 암호화됩니다.
안전하지 않은 TLS를 활성화 하려면 sslVerify
클라이언트 옵션 또는 tlsInsecure
URI 옵션을 true
(으)로 설정하다 .
client = Mongo::Client.new(["<hostname>:<port>"], ssl: true, ssl_verify: false )
client = Mongo::Client.new('mongodb://<hostname>:<port>/?tls=true&tlsInsecure=true')
마찬가지로 다음 옵션을 설정하다 인증서 또는 호스트 이름에 대한 확인을 비활성화할 수 있습니다.
ssl_verify_certificate
: 옵션을false
로 설정하여 인증서 유효성 검사 비활성화합니다.ssl_verify_hostname
: 옵션을false
로 설정하여 호스트 이름 확인을 비활성화합니다.
tlsAllowInvalidCertificates
: 옵션을true
로 설정하여 인증서 유효성 검사 비활성화합니다.tlsAllowInvalidHostnames
: 옵션을true
로 설정하여 호스트 이름 유효성 검사 비활성화합니다.
경고
프로덕션에서 안전하지 않은 TLS 사용 금지
프로덕션 환경에서는 안전하지 않은 TLS를 항상 비활성화하세요.
프로덕션 환경에서 안전하지 않은 TLS를 활성화하면 애플리케이션 안전하지 않고 만료된 인증서 및 유효한 클라이언트 인스턴스로 가장하는 외부 프로세스에 잠재적으로 취약해집니다.
API 문서
이 가이드 에 설명된 유형 및 메서드에 대한 자세한 내용은 다음 API 문서를 참조하세요.