TLS(전송 계층 보안) 구성
이 페이지의 내용
개요
이 가이드 에서는 TLS(전송 계층 보안) 프로토콜 사용하여 MongoDB deployment 에 대한 연결을 보호하는 방법을 학습 수 있습니다.
연결에 TLS를 활성화 하면 스칼라 운전자 다음 작업을 수행합니다.
TLS를 사용하여 MongoDB deployment에 연결
배포서버의 인증서를 확인합니다.
TLS용으로 MongoDB deployment 구성하는 방법을 학습 MongoDB Server 매뉴얼의TLS 구성 가이드 참조하세요.
참고
이 페이지에서는 TLS/SSL에 대한 사전 지식이 있고 유효한 인증서에 액세스 가정합니다. TLS/SSL, PKI(공개 키 인프라) 인증서 및 인증 기관(CA)에 대한 전체 설명은 이 문서의 범위를 벗어납니다. TLS에 대해 자세히 학습 전송 계층 보안에 대한 Wikipedia 항목을 참조하세요.
TLS 활성화
다음과 같은 방법으로 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 보안 저장소 구성
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>
JVM 키 저장소 구성
참고
기본적으로 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에 대한 연결 제한
애플리케이션이 TLS 1.2 프로토콜만 사용하도록 제한하려면 jdk.tls.client.protocols
시스템 속성을 "TLSv1.2"
로 설정합니다.
참고
Java 8 이전의 Java 런타임 환경(JRE)은 업데이트 릴리스에서 TLS 1.2 프로토콜 만 활성화했습니다. JRE에서 TLS 1.2 프로토콜 활성화하지 않은 경우, TLS 1.2을 사용하려면 이후 출시하다 로 업그레이드 .
SSLContext로 구성 사용자 지정
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)
OCSP는 X.509 인증서가 해지되었는지 확인하는 데 사용되는 표준입니다. 인증 기관(CA)은 만료 시간 전에 X.509 인증서를 CRL(인증서 해지 목록)에 추가하여 인증서를 무효화할 수 있습니다. 클라이언트 TLS 핸드셰이크 중에 X.509 인증서를 보내면 CA의 해지 서버 CRL을 확인하여 good
, revoked
또는 unknown
상태를 반환합니다.
이 드라이버는 다음과 같은 OCSP 변형을 지원합니다:
클라이언트 중심 OCSP
OCSP 스테이플링
다음 섹션에서는 이러한 변형에 대해 설명하고 애플리케이션 에서 이를 활성화 방법을 보여줍니다.
참고
스칼라 운전자 특정 MongoClient
인스턴스 에 대해 재정의할 수 없는 애플리케이션 에 대해 구성된 JVM 인수를 사용합니다.
클라이언트 중심 OCSP
클라이언트 기반 OCSP에서 클라이언트 서버 로부터 인증서를 받고 OCSP 요청 통해 이 인증서를 OCSP 응답자에게 보냅니다. OCSP 응답자는 CA를 통해 인증서의 상태를 확인하고 인증서의 유효성에 대한 보고서를 클라이언트 에 보냅니다.
애플리케이션에 대해 클라이언트 기반 OCSP를 활성화하려면 다음 JVM 시스템 속성을 설정합니다.
속성 | 설명 |
---|---|
| 해지 확인을 활성화하려면 이 속성을 |
| 클라이언트 기반 OCSP를 활성화하려면 이 속성을 |
경고
OCSP 응답자를 사용할 수 없는 경우 JDK에서 제공하는 TLS 지원은 '강력한 실패(hard fail)'를 보고합니다. 이는 MongoDB Shell 및 일부 다른 드라이버의 '약한 실패(soft fail)' 동작과는 다릅니다.
OCSP 스테이플링
OCSP 스테이플링은 서버 CA에서 서명된 인증서를 가져와 클라이언트 에 대한 타임스탬프가 지정된 OCSP 응답에 포함해야 하는 메커니즘입니다.
애플리케이션에 대해 OCSP 스테이플링을 활성화하려면 다음 JVM 시스템 속성을 설정합니다.
속성 | 설명 |
---|---|
| 해지 확인을 활성화하려면 이 속성을 |
| 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 문서
이 가이드 에 설명된 유형에 대한 자세한 내용은 다음 API 문서를 참조하세요.