AI 에이전트의 경우: 문서 인덱스는 https://www.mongodb.com/ko-kr/docs/llms.txt에서 사용할 수 있으며, 모든 페이지의 마크다운 버전은 어떤 URL 경로에 .md를 추가하여 사용할 수 있습니다.
Docs Menu

TLS(전송 계층 보안) 구성

이 가이드에서는 TLS 프로토콜 을 사용하여 MongoDB deployment에 대한 연결을 보호하는 방법을 배울 수 있습니다. TLS는 애플리케이션과 MongoDB 간의 통신을 보호하는 암호화 프로토콜입니다. TLS를 사용하도록 연결을 구성하려면 클라이언트를 생성할 때 TLS 옵션을 활성화하고 유효성 검사를 위해 인증서를 제공합니다.

참고

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

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

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

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

TLS를 위해 MongoDB deployment 를 구성하는 방법을 학습 보려면 MongoDB Server 매뉴얼의 TLS 구성 가이드 를 참조하세요.

기본값 으로 운전자 JDK에서 제공하는 TLS/SSL에 대한 기본 지원 사용하여 MongoDB 서버에 대한 TLS/SSL 연결을 지원합니다. 이는 Netty API 또는 Java SE API의 확장성을 사용하여 변경할 수 있습니다.

비동기 앱에는 Netty를 선호합니다.

Netty는 비동기 I/O를 지원하고 높은 연결 볼륨을 효과적으로 처리하므로 비동기 애플리케이션에는 사용하는 것이 좋습니다. Netty를 사용하여 TLS 설정을 구성하는 방법을 학습 보려면 이 가이드의 Netty SslContext를 사용하여 TLS/SSL 구성 섹션을 참조하세요.

다음과 같은 방법으로 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을 사용하려면 이후 출시하다 로 업그레이드 .

다음 가져오기 문을 포함합니다.

import io.netty.handler.ssl.SslContextBuilder
import io.netty.handler.ssl.SslProvider
import org.mongodb.scala.connection.TransportSettings

참고

Netty 패키지 버전

Netty 패키지 버전으로 운전자 테스트 io.netty:netty-all:4.1.87.Final

운전자 에 io.netty.handler.ssl.SslContext 사용하도록 지시하려면 를 정의할 때 NettyTransportSettings를 MongoClientSettings 구성합니다.

MongoClientSettings.Builder.transportSettings()NettyTransportSettings.Builder.sslContext() 을 사용하여 설정을 빌드 합니다.

val sslContext = SslContextBuilder.forClient()
.sslProvider(SslProvider.OPENSSL)
.build()
val nettySettings = MongoClientSettings.builder()
.applyToSslSettings {
builder => builder.enabled(true)
}
.transportSettings(
TransportSettings.nettyBuilder()
.sslContext(sslContext)
.build()
)
.build()
val mongoClient = MongoClient(nettySettings);

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

OCSP 스테이플링을 활성화 하려면 이 속성 로 설정합니다. 설정하지 true

않거나 로 설정하다 false 인증서 해지 응답의 유무에 관계없이 연결을 계속할 수 있습니다.

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

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