연결에서 TLS 활성화
개요
이 가이드 에서는 TLS/SSL 을 사용하여 MongoDB 인스턴스에 연결하는 방법을 학습 수 있습니다. .NET 프레임워크 의 기본 TLS/SSL 지원 을 사용하는 보안 프로토콜 입니다. TLS/SSL을 사용하도록 연결을 구성하려면 연결 string 또는 MongoClientSettings에서 TLS/SSL 설정을 활성화 합니다.
TLS 활성화
MongoDB 인스턴스에 연결할 때는 기본적으로 TLS가 비활성화되어 있습니다. MongoDB 객체의 속성을 MongoClientSettings
사용하거나 연결 의 매개변수를 사용하는 두 가지 방법으로 인스턴스에 대한 연결에 TLS를 활성화할 수 string 있습니다.
참고
DNS 시드 목록 프로토콜을 사용하여 연결하는 경우 드라이버는 기본적으로 TLS/SSL을 사용하도록 설정합니다. 비활성화하려면 연결 문자열 또는 MongoClientSettings
인스턴스에서 tls
또는 ssl
매개 변수 값을 false
로 설정합니다.
DNS 시드 목록을 사용할 때의 연결 동작에 대한 자세한 내용은 서버 매뉴얼의 SRV 연결 형식 섹션을 참조하세요.
MongoClientSettings
객체에서 TLS를 활성화하려면 UseTls
속성을 true
로 설정합니다.
var settings = new MongoClientSettings { UseTls = true }; var client = new MongoClient(settings);
연결 문자열을 사용하여 TLS를 활성화하려면 MongoClient
생성자에 전달된 연결 string 에서 매개 변수 tls
에 true
값을 할당 string .
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true");
클라이언트 인증서 구성
MongoClientSettings
을(를) 사용하여 X.509 인증서를 구성할 수습니다. 다음 코드 샘플은 비밀번호 mySuperSecretPassword
로 보호되는 client.p12
인증서 파일을 사용하여 새 X.509 인증서 객체를 만듭니다. 그런 다음 이 코드는 이 인증서를 MongoClientSettings
의 SslSettings.ClientCertificates
배열에 추가합니다.
var cert = new X509Certificate2("client.p12", "mySuperSecretPassword"); var settings = new MongoClientSettings { SslSettings = new SslSettings { ClientCertificates = new[] { cert } }, UseTls = true };
중요
비밀번호가 포함된 인증서를 로드할 때 인증서 객체에는 개인 키가 포함되어 있어야 합니다. 그렇지 않으면 인증서가 서버로 전달되지 않습니다.
안전하지 않은 TLS 허용
TLS가 활성화되면 .NET/C# 드라이버는 서버가 제공하는 인증서를 자동으로 검증합니다. 코드를 테스트할 때 인증서 검증을 비활성화 설정할 수 있습니다. 이를 안전하지 않은 TLS라고 합니다.
안전하지 않은 TLS를 사용하는 경우 유일한 요구 사항은 서버가 X.509 인증서를 제공하는 것입니다. 드라이버는 다음과 같은 경우에도 인증서를 수락합니다.
서버의 호스트 이름과 인증서의 주체 이름(또는 주체 대체 이름)이 일치하지 않는 경우
인증서가 만료되었거나 아직 유효하지 않습니다.
인증서의 체인에 신뢰할 수 있는 루트 인증서가 없는 경우
인증서 용도가 서버 식별에 유효하지 않은 경우
MongoClientSettings
객체의 속성을 사용하거나 연결 문자열의 매개변수를 사용하는 두 가지 방법으로 안전하지 않은 TLS를 허용할 수 있습니다.
MongoClientSettings
객체에 안전하지 않은 TLS를 허용하려면 AllowInsecureTls
속성을 true
로 설정합니다.
var settings = new MongoClientSettings { UseTls = true, AllowInsecureTls = true }; var client = new MongoClient(settings);
연결 string 을 사용하여 안전하지 않은 TLS를 허용하려면 연결 string 매개 변수 tlsInsecure
에 true
값을 할당합니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsInsecure=true");
경고
프로덕션 환경에서는 항상 이 옵션을 false
으로 설정하세요. 보안을 위해 서버 인증서의 유효성을 제대로 검사하는 것이 중요합니다.
인증서 철회 확인
X.509 인증서를 더 이상 신뢰할 수 없는 경우(예시: 개인 키가 손상된 경우) 인증 기관은 인증서를 철회합니다.
기본적으로 .NET/C# 드라이버는 연결하기 전에 서버의 인증서가 철회됐는지 여부를 확인하지 않습니다. MongoClientSettings
또는 연결 문자열을 사용하여 철회 확인 메커니즘을 활성화할 수 있습니다
MongoClientSettings
을(를) 사용해 철회 확인을 활성화하려면 SslSettings.CheckCertificateRevocation
을(를) true
로 설정합니다.
var settings = new MongoClientSettings { SslSettings = new SslSettings { CheckCertificateRevocation = true }, UseTls = true };
연결 string 을 사용하여 철회 확인을 활성화하려면 연결 string 매개변수 tlsDisableCertificateRevocationCheck
에 false
값을 할당합니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>:<port>?tls=true&tlsDisableCertificateRevocationCheck=false");
참고
.NET/C# 드라이버는 기본적으로 해지를 확인하지 않습니다. 이는 .NET 프레임워크와 .NET 표준 모두에서 SslStream
클래스의 기본 동작이기 때문입니다.
운영 체제별 철회 확인
.NET/C# 드라이버는 Windows, macOS 및 Linux 등 운영 체제에 따라 다른 철회 확인 메커니즘을 지원합니다.
온라인 인증서 상태 프로토콜(OCSP)은 철회 확인을 위한 일반적인 메커니즘입니다.
OCSP 스테이플링은 서버가 인증서와 함께 클라이언트에 대한 타임스탬프가 지정된 OCSP 응답을 포함하는 메커니즘입니다.
인증서 해지 목록(CRL),, OCSP의 대안
Windows
Windows에서 .NET/C# 드라이버는 .NET Framework와 .NET Core 모두에서 OCSP, OCSP 스테이플링 및 OCSP가 없는 CRL을 지원합니다.
경고
Windows의 경우, .NET/C# 드라이버는 OCSP 응답자를 사용할 수 없는 경우 "하드 장애"를 보고하고 TLS 핸드셰이크를 취소합니다. 다른 운영 체제 및 드라이버는 "소프트 실패"를 보고하고 계속 연결됩니다.
macOS
macOS에서 .NET/C# 드라이버는 OCSP 및 OCSP 스테이플링을 지원합니다.
.NET Core 2.0부터 드라이버는 OCSP가 없는 CRL을 지원하지 않습니다.
Linux
Linux에서 .NET/C# 드라이버는 OCSP, OCSP 스테이플링 및 OCSP가 없는 CRL을 지원합니다.
API 문서
이 가이드에서 설명한 연결 옵션에 대해 자세히 알아보려면 다음의 API 문서를 참조하세요.