Docs Menu
Docs Home
/ / /
Scala
/

TLS(전송 계층 보안) 구성

이 페이지의 내용

  • 개요
  • TLS 활성화
  • 인증서 구성
  • JVM 보안 저장소 구성
  • JVM 키 저장소 구성
  • 클라이언트별 신뢰 저장소 및 키 저장소 구성
  • 호스트 이름 확인 사용 안 함
  • TLS 1.2에 대한 연결 제한
  • SSLContext로 구성 사용자 지정
  • 온라인 인증서 상태 프로토콜(OCSP)
  • 클라이언트 중심 OCSP
  • OCSP 스테이플링
  • API 문서

이 가이드 에서는 TLS(전송 계층 보안) 프로토콜 사용하여 MongoDB deployment 에 대한 연결을 보호하는 방법을 학습 수 있습니다.

연결에 TLS를 활성화 하면 스칼라 운전자 다음 작업을 수행합니다.

  • TLS를 사용하여 MongoDB deployment에 연결

  • 배포서버의 인증서를 확인합니다.

TLS용으로 MongoDB deployment 구성하는 방법을 학습 MongoDB Server 매뉴얼의TLS 구성 가이드 참조하세요.

참고

이 페이지에서는 TLS/SSL에 대한 사전 지식이 있고 유효한 인증서에 액세스 가정합니다. TLS/SSL, PKI(공개 키 인프라) 인증서 및 인증 기관(CA)에 대한 전체 설명은 이 문서의 범위를 벗어납니다. TLS에 대해 자세히 학습 전송 계층 보안에 대한 Wikipedia 항목을 참조하세요.

다음과 같은 방법으로 MongoDB deployment 에 대한 연결에 TLS를 활성화 할 수 있습니다.

  • MongoClientSettings 인스턴스 만들 때 SslSettings.Builder 클래스의 enabled() 메서드 사용

  • 연결 URI에 tls 매개변수를 설정합니다.

MongoClientSettings 또는 Connection URI 탭 선택하여 TLS를 활성화하는 해당 코드를 확인합니다.

val tlsUri = "mongodb://localhost:27017/"
val tlsSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(tlsUri))
.applyToSslSettings(builder => builder.enabled(true))
.build()
val tlsClient1 = MongoClient(tlsSettings)
val tlsClient2 = MongoClient("mongodb://localhost:27017/?tls=true")

연결 string 에 SRV 연결 형식을 지정하는 +srv 수정이 포함된 경우 기본적으로 연결에서 TLS가 활성화됩니다.

SRV 연결 형식에 학습 보려면 MongoDB Server 설명서에서 SRV 연결 형식 을 참조하세요.

참고

이 섹션의 지침은 Oracle JDK 설명서를 기반으로 합니다. JDK 또는 사용자 지정 TLS/SSL 구현 에는 적용 않을 수 있습니다.

TLS 요청을 시작하는 스칼라 애플리케이션은 애플리케이션의 ID를 증명하고 스칼라 애플리케이션 상호 작용하는 다른 애플리케이션을 확인하는 암호화 인증서에 액세스 해야 합니다. 다음과 같은 방법으로 애플리케이션 에서 이러한 인증서에 대한 액세스 구성할 수 있습니다.

  • JVM 신뢰 저장 및 JVM 키 저장 사용

  • 클라이언트별 신뢰 저장 및 키 저장 사용

JVM 신뢰 저장 스칼라 애플리케이션 상호 작용하는 다른 애플리케이션을 안전하게 식별하는 인증서를 저장합니다. 이러한 인증서를 사용하면 사용자의 애플리케이션 다른 애플리케이션 에 대한 연결이 진짜이고 제3자의 변조로부터 안전하다는 것을 증명할 수 있습니다.

JRE( Java Runtime Environment)는 서명 기관에서 일반적으로 사용하는 공용 인증서를 포함하는 기본값 인증서 저장 제공합니다. MongoDB deployment JRE의 기본값 인증서 저장 에 없는 기관에서 서명한 인증서를 사용하는 경우 애플리케이션 다음 시스템 속성을 구성하여 TLS 요청을 시작해야 합니다.

  • javax.net.ssl.trustStore: 서명 기관의 인증서가 포함된 신뢰 저장 의 경로

  • javax.net.ssl.trustStorePassword: javax.net.ssl.trustStore 속성 으로 정의된 신뢰 저장 액세스 위한 비밀번호입니다.

keytool 명령줄 도구를 사용하여 앞의 속성을 정의할 수 있습니다. 다음 예시 keytool 명령을 실행하여 인증 기관 파일 경로, 신뢰 저장 경로 및 신뢰 저장 비밀번호를 지정합니다.

keytool -importcert -trustcacerts -file <path to certificate authority file>
-keystore <path to trust store> -storepass <trust store password>

참고

기본적으로 MongoDB 인스턴스는 클라이언트 인증서 유효성 검사를 수행하지 않습니다. 클라이언트 인증서의 유효성을 검사하도록 MongoDB 인스턴스를 구성한 경우 키 저장소를 구성해야 합니다.

TLS 요청을 시작하는 애플리케이션 은 다음 JVM 시스템 속성을 설정하다 하여 클라이언트 가 MongoDB 서버 에 TLS 인증서를 제공하도록 해야 합니다.

  • javax.net.ssl.keyStore: 클라이언트의 TLS/SSL 인증서가 포함된 키 저장 의 경로

  • javax.net.ssl.keyStorePassword: 다음에 정의된 키 저장 액세스 위한 비밀번호입니다. javax.net.ssl.keyStore

keytool 을 사용하여 키 저장 를 만들 수 있습니다. 또는 openssl 명령줄 도구.

TLS를 사용하도록 스칼라 애플리케이션 구성하는 방법에 대해 자세히 학습 Java 언어 문서에서 JSSE 참조 가이드를 참조하세요.

SSLContext 클래스의 init() 메서드를 사용하여 클라이언트별 신뢰 저장 및 키 저장 를 구성할 수 있습니다.

인스턴스 사용하도록 클라이언트 구성하는 예시 SSLContext 보려면 이 가이드 의 SSLContext를 사용한 구성 사용자 지정 섹션을 참조하세요.

기본값 으로 운전자 서버의 TLS 인증서에 포함된 호스트 이름이 MongoClient 구성 시 제공된 호스트 이름과 일치하는지 확인합니다. 다음과 같은 방법으로 호스트 이름 확인을 비활성화할 수 있습니다.

  • MongoClientSettings 인스턴스 만들 때 SslSettings.Builder 클래스의 invalidHostNameAllowed() 메서드 사용

  • 연결 URI에 tlsAllowInvalidHostnames 매개변수를 설정합니다.

MongoClientSettings 또는 Connection URI 탭 선택하여 호스트 이름 확인을 비활성화하는 해당 코드를 확인합니다.

val invalidHostUri = "mongodb://localhost:27017/"
val invalidHostSettings = MongoClientSettings.builder()
.applyConnectionString(ConnectionString(invalidHostUri))
.applyToSslSettings(builder => builder
.enabled(true)
.invalidHostNameAllowed(true)
)
.build()
val invalidHostClient1 = MongoClient(invalidHostSettings)
val invalidHostClient2 = MongoClient("mongodb://localhost:27017/?tls=true&tlsAllowInvalidHostnames=true")

경고

호스트 이름 확인을 비활성화하면 애플리케이션 이 안전하지 않고 만료된 인증서와 유효한 클라이언트 인스턴스로 가장하는 외부 프로세스에 잠재적으로 취약해집니다.

애플리케이션이 TLS 1.2 프로토콜만 사용하도록 제한하려면 jdk.tls.client.protocols 시스템 속성을 "TLSv1.2" 로 설정합니다.

참고

Java 8 이전의 Java 런타임 환경(JRE)은 업데이트 릴리스에서 TLS 1.2 프로토콜 만 활성화했습니다. JRE에서 TLS 1.2 프로토콜 활성화하지 않은 경우, TLS 1.2을 사용하려면 이후 출시하다 로 업그레이드 .

TLS 구성에 사용자 지정이 필요한 경우 MongoClient 객체 의 sslContext 속성 설정하다 수 있습니다. 다음 코드에 표시된 대로 SSLContext 객체 applyToSslSettings() 차단 의 context() 메서드 빌더에 전달합니다.

val sslContext = SSLContext.getDefault()
val contextSettings = MongoClientSettings.builder()
.applyToSslSettings(builder => builder
.enabled(true)
.context(sslContext)
)
.build()
val mongoClient = MongoClient(contextSettings);

클래스에 대한 자세한 내용은 SSLContext SSL 컨텍스트에대한 API 설명서를 참조하세요.

OCSP는 X.509 인증서가 해지되었는지 확인하는 데 사용되는 표준입니다. 인증 기관(CA)은 만료 시간 전에 X.509 인증서를 CRL(인증서 해지 목록)에 추가하여 인증서를 무효화할 수 있습니다. 클라이언트 TLS 핸드셰이크 중에 X.509 인증서를 보내면 CA의 해지 서버 CRL을 확인하여 good, revoked 또는 unknown 상태를 반환합니다.

이 드라이버는 다음과 같은 OCSP 변형을 지원합니다:

  • 클라이언트 중심 OCSP

  • OCSP 스테이플링

다음 섹션에서는 이러한 변형에 대해 설명하고 애플리케이션 에서 이를 활성화 방법을 보여줍니다.

참고

스칼라 운전자 특정 MongoClient 인스턴스 에 대해 재정의할 수 없는 애플리케이션 에 대해 구성된 JVM 인수를 사용합니다.

클라이언트 기반 OCSP에서 클라이언트 서버 로부터 인증서를 받고 OCSP 요청 통해 이 인증서를 OCSP 응답자에게 보냅니다. OCSP 응답자는 CA를 통해 인증서의 상태를 확인하고 인증서의 유효성에 대한 보고서를 클라이언트 에 보냅니다.

애플리케이션에 대해 클라이언트 기반 OCSP를 활성화하려면 다음 JVM 시스템 속성을 설정합니다.

속성
설명

com.sun.net.ssl.checkRevocation

해지 확인을 활성화하려면 이 속성을 true로 설정합니다.

ocsp.enable

클라이언트 기반 OCSP를 활성화하려면 이 속성을 true로 설정하세요.

경고

OCSP 응답자를 사용할 수 없는 경우 JDK에서 제공하는 TLS 지원은 '강력한 실패(hard fail)'를 보고합니다. 이는 MongoDB Shell 및 일부 다른 드라이버의 '약한 실패(soft fail)' 동작과는 다릅니다.

OCSP 스테이플링은 서버 CA에서 서명된 인증서를 가져와 클라이언트 에 대한 타임스탬프가 지정된 OCSP 응답에 포함해야 하는 메커니즘입니다.

애플리케이션에 대해 OCSP 스테이플링을 활성화하려면 다음 JVM 시스템 속성을 설정합니다.

속성
설명

com.sun.net.ssl.checkRevocation

해지 확인을 활성화하려면 이 속성을 true로 설정합니다.

jdk.tls.client.enableStatusRequestExtension

Set this property to true to enable OCSP stapling.

If unset or set to false, the connection can proceed regardless of the presence or status of the certificate revocation response.

OCSP에 대해 자세히 학습 다음 리소스를 참조하세요.

이 가이드 에 설명된 유형에 대한 자세한 내용은 다음 API 문서를 참조하세요.

돌아가기

연결 대상 선택