연결에서 TLS 활성화
이 페이지의 내용
개요
이 가이드 에서는 TLS 를 사용하는 방법을 학습 수 있습니다. 코틀린 동기 (Kotlin Sync) 운전자 를 사용하여 MongoDB 에 연결할 때 보안 프로토콜 을 사용합니다.
TLS 활성화
다음과 같은 방법으로 MongoDB 인스턴스에 대한 연결에서 TLS를 활성화할 수 있습니다:
연결 string에서
tls
매개변수 설정MongoClientSettings
인스턴스 를 만들 때SslSettings.Builder
클래스의enabled()
메서드 사용
참고
DNS 시드 목록 프로토콜로 TLS 지원
연결 string 에 mongodb+srv
접두사로 표시된 DNS 시드 목록 프로토콜 을 사용하여 연결하는 경우 운전자 가 자동으로 TLS를 활성화합니다.
DNS 시드 목록을 사용할 때 연결 동작에 학습 보려면 서버 매뉴얼의 연결 문자열 가이드 에서 SRV 연결 형식 섹션을 참조하세요.
연결 string 을 사용하여 연결에서 TLS를 활성화 하도록 설정하다 하려면 다음 코드와 같이 옵션 매개변수에서 tls
옵션을 true
로 설정하고 string 을 MongoClient.create()
에 전달합니다.
val mongoClient = MongoClient.create("mongodb+srv://<db_username>:<db_password>@<cluster_url>/?tls=true")
MongoClientSettings
인스턴스 내에서 TLS를 활성화 하려면 applyToSslSettings()
빌더 메서드를 사용합니다. 다음 코드에 표시된 대로 SslSettings.Builder
차단 에서 enabled
속성 을 true
로 설정합니다.
val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("<connection string URI>")) .applyToSslSettings { builder -> builder.enabled(true) } .build() val mongoClient = MongoClient.create(settings)
참고
TLS 디버깅
TLS 연결을 설정하는 데 문제가 있는 경우 -Djavax.net.debug=all
시스템 속성 을 사용하여 유용한 로그 문을 볼 수 있습니다. SSL/TLS 연결 디버깅을 참조하세요. 자세한 내용은 Java 언어 설명서를 참조하세요.
인증서 구성
TLS 요청을 시작하는 코틀린( 코틀린 (Kotlin) ) 애플리케이션은 애플리케이션의 ID를 증명하고 코틀린( 코틀린 (Kotlin) ) 애플리케이션 이 상호 작용하는 다른 애플리케이션을 확인하는 암호화 인증서에 액세스 해야 합니다. 다음과 같은 방법으로 애플리케이션 에서 이러한 인증서에 액세스 를 구성할 수 있습니다.
JVM 신뢰 저장 및 JVM 키 저장
클라이언트별 신뢰 저장 및 키 저장
JVM 보안 저장소 구성
참고
기본값 JRE에는 Let's Encrypt 와 같은 서명 기관에서 일반적으로 사용하는 여러 공용 인증서가 포함되어 있습니다. . 따라서 MongoDB Atlas 인스턴스 또는 JRE의 기본값 인증서 저장 에 있는 기관에서 인증서를 서명한 다른 서버 에 연결할 때 TLS를 활성화 할 수 있으며, 신뢰 저장 를 구성하지 않고도 TLS를 활성화할 수 있습니다.
JVM 신뢰 저장 는 코틀린( 코틀린 (Kotlin) ) 애플리케이션 이 상호 작용하는 다른 애플리케이션을 안전하게 식별하는 인증서를 저장합니다. 이러한 인증서를 사용하면 사용자의 애플리케이션 은 다른 애플리케이션 에 대한 연결이 진짜이고 제3자의 변조로부터 안전하다는 것을 증명할 수 있습니다.
MongoDB 인스턴스 가 JRE의 기본값 인증서 저장 에 없는 기관에서 서명한 인증서를 사용하는 경우, 애플리케이션 에서 TLS 요청을 시작하려면 다음 시스템 속성을 구성해야 합니다.
javax.net.ssl.trustStore
: 클라이언트의 TLS 인증서가 포함된 신뢰 저장 의 경로javax.net.ssl.trustStorePassword
: 다음에 정의된 신뢰 저장 에 액세스 하기 위한 비밀번호javax.net.ssl.trustStore
이러한 속성을 사용하면 애플리케이션 이 연결된 MongoDB 인스턴스 에서 제공하는 TLS 인증서의 유효성을 검사할 수 있습니다.
keytool 을 사용하여 신뢰 저장 를 만들 수 있습니다. 다음 터미널 명령에 표시된 대로 JDK에서 명령줄 도구를 실행합니다.
keytool -importcert -trustcacerts -file <path to certificate authority file> -keystore <path to trust store> -storepass <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를 사용하도록 코틀린( 코틀린 (Kotlin) ) 애플리케이션 을 구성하는 방법에 학습 보려면 JSSE 참조 가이드 를 참조하세요. Java 언어 문서에서 확인 가능합니다.
클라이언트별 신뢰 저장소 및 키 저장소 구성
SSLContext
클래스의 init()
메서드를 사용하여 클라이언트별 신뢰 저장 및 키 저장 를 구성할 수 있습니다.
이 가이드 의 Java SE SSLContext 섹션을 통해 TLS 구성 사용자 지정 섹션에서 SSLContext
인스턴스 를 사용하도록 클라이언트 를 구성하는 방법을 보여주는 예시 를 찾아보세요.
호스트 이름 확인 사용 안 함
기본값 운전자 는 서버의 TLS 인증서에 포함된 호스트 이름이 MongoClient
구성 시 제공된 호스트 이름과 일치하는지 확인합니다. 애플리케이션 에 대한 호스트 이름 확인을 비활성화하려면 applytoSslSettings()
빌더 차단 에서 빌더의 invalidHostNameAllowed
속성 을 true
로 설정하다 합니다.
val settings = MongoClientSettings.builder() .applyConnectionString(ConnectionString("<connection string URI>")) .applyToSslSettings { builder -> builder.enabled(true) builder.invalidHostNameAllowed(true) } .build() val mongoClient = MongoClient.create(settings);
경고
호스트 이름 확인을 비활성화하면 애플리케이션 이 안전하지 않고 만료된 인증서와 유효한 클라이언트 인스턴스로 가장하는 외부 프로세스에 잠재적으로 취약해집니다.
연결 시 TLS 1.2 전용으로 제한하기
애플리케이션이 TLS 1.2 프로토콜만 사용하도록 제한하려면 jdk.tls.client.protocols
시스템 속성을 "TLSv1.2"
로 설정합니다.
참고
Java 8 이전의 Java Runtime Environment(JRE)에서는 업데이트 릴리스에서 TLS 1.2 프로토콜만을 활성화했습니다. JRE에서 TLS 1.2 프로토콜을 활성화하지 않은 경우, 이후 릴리스로 업그레이드하여 TLS 1.2를 사용하여 연결합니다.
Java SE SSLContext를 통해 TLS 구성 사용자 지정
TLS 구성에 사용자 지정이 필요한 sslContext
경우 MongoClient
SSLContext 를 전달하여 context()
의 속성 을 설정하다 수 applyToSslSettings()
있습니다. 객체 를 차단 의 메서드 빌더에 추가합니다.
val sslContext = SSLContext.getDefault() val settings = MongoClientSettings.builder() .applyToSslSettings { builder -> builder.enabled(true) builder.context(sslContext) } .build() val mongoClient = MongoClient.create(settings);
클래스에 대한 자세한 내용은 SSLContext
SSL 컨텍스트에대한 API 설명서를 참조하세요.
온라인 인증서 상태 프로토콜(OCSP)
OCSP는 X.509 인증서가 해지되었는지 확인하는 데 사용되는 표준입니다. 인증 기관은 만료 시간 전에 X.509 인증서를 CRL(인증서 해지 목록)에 추가하여 인증서를 무효화할 수 있습니다. 클라이언트 가 TLS 핸드셰이크 중에 X.509 인증서를 보내면 CA의 해지 서버 는 CRL을 확인하여 good
, revoked
또는 unknown
상태를 반환합니다.
이 드라이버는 다음과 같은 OCSP 변형을 지원합니다:
클라이언트 중심 OCSP
OCSP 스테이플링
다음 섹션에서는 이들 간의 차이점과 애플리케이션에서 이를 활성화하는 방법을 설명합니다.
참고
코틀린 동기 (Kotlin Sync) 운전자 는 애플리케이션 에 대해 구성된 JVM 인수를 사용하며 특정 MongoClient
인스턴스 에 대해 재정의할 수 없습니다.
클라이언트 중심 OCSP
클라이언트 기반 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 스테이플링
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에 대한 자세한 내용은 다음 리소스를 참조하세요.
애플리케이션에서 OCSP를 활성화하는 방법에 대한 Oracle JDK 8 문서
API 문서
이 가이드 에 설명된 메서드 또는 유형에 대한 자세한 내용은 다음 API 문서를 참조하세요.