Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
데이터베이스 매뉴얼
/ / /

TLS를 사용하여 로컬에서 MongoDB 개발

MongoDB Atlas 개발 환경을 위한 유효한 TLS 인증서를 제공하지만, 사용자 지정 보안 구성을 사용하여 온프레미스 배포서버 구현 해야 할 수도 있습니다. 이 가이드 프로덕션 인프라와 매우 유사한 보안 테스트 환경을 만들 수 있도록 로컬 MongoDB deployment 위한 TLS 암호화 설정하는 방법에 대한 지침을 제공합니다.

MongoDB Community Edition 또는 Enterprise MongoDB 로컬에서 TLS 암호화와 함께 사용하면 배포서버 전에 애플리케이션의 보안 동작을 개발, 테스트 및 검증할 수 있는 현실적인 환경을 제공합니다.

프로덕션 환경에서 MongoDB 서버는 신뢰할 수 있는 인증 기관 또는 CA에서 서명한 인증서를 사용합니다. 로컬 개발의 경우 다음 옵션 중 하나를 사용할 수 있습니다.

  • 상업용 또는 공용 CA 인증서: 도메인 이름을 등록한 경우 공인된 인증 기관에서 인증서를 받을 수 있습니다.

  • 엔터프라이즈 CA 인증서: 조직 EJBCA 또는 TinyCert와 같은 사설 인증 기관을 유지 관리하는 경우 IT 부서를 통해 인증서를 요청 수 있습니다.

  • 무료 CA 인증서: 등록된 도메인 이름이 있는 경우 Let's Encrypt 와 같은 서비스에서 인증 기관 서명 인증서를 무료로 제공합니다.

  • 자체 서명된 인증서: 격리된 로컬 개발 환경의 경우 다른 옵션을 사용할 수 없을 때 자체 서명된 인증서 체인이 실용적인 솔루션을 제공합니다.

다음 단계를 사용하여 로컬 MongoDB 배포를 위한 자체 서명된 인증서 체인을 구현 수 있습니다. 자체 인증 기관과 서버 인증서를 생성하면 외부 서비스 없이도 TLS로 암호화된 연결을 시뮬레이션할 수 있습니다.

중요

자체 서명된 인증서 체인은 격리된 개발 환경에서만 사용하세요. 자체 서명된 인증서 체인에는 올바르게 발급된 인증서의 신뢰 확인 메커니즘이 포함되어 있지 않으며 보안 취약점이 있을 수 있습니다. 프로덕션 환경이나 민감한 데이터로 작업할 때는 절대 자체 서명된 인증서를 사용하지 마세요.

보안 통신에서 서버 인증서는 연결 클라이언트에게 서버의 ID를 증명하여 중간자(man-in-middle) 공격을 방지하고, 암호화됨 통신을 위한 보안 키 교환을 용이하게 합니다.

일반적인 TLS 핸드셰이크에서 클라이언트 다음을 확인하여 서버 인증서를 확인합니다.

  • 인증서는 신뢰할 수 있는 인증 기관에서 서명한 것입니다.

  • 인증서가 유효하며 만료되거나 해지되지 않았습니다.

  • 인증서의 서버 이름이 연결 중인 서버 와 일치합니다.

클라이언트 루트 및 중간 CA 인증서가 클라이언트의 로컬 신뢰 저장 에 있는 경우에만 허용합니다. 올바르게 발급된 인증서의 경우 발급 기관만 루트 인증서의 개인 키에 액세스 할 수 있으며 서버 는 절대 액세스할 수 없습니다.

자체 서명된 인증서를 사용하는 로컬 MongoDB TLS 설정 의 경우 TLS 핸드셰이크에서 다양한 용도로 제공 되는 여러 인증서 파일을 생성하고 관리 해야 합니다.

서버 요구 사항:

  • 자체 서명된 인증 기관(CA) 인증서로, 신뢰할 수 있는 자체 루트 역할을 합니다.

  • 서버 인증서에 서명하는 데 사용되는 자체 서명된 CA 인증서의 비공개 키입니다.

  • 자체 서명된 CA에서 서명한 서버 인증서로, MongoDB 서버 식별합니다.

  • TLS 암호화 에 사용되는 서버 인증서의 비공개 키입니다.

클라이언트 요구 사항:

  • 서버의 인증서를 확인하는 데 필요한 자체 서명된 루트 CA 인증서입니다.

  • 클라이언트 인증서 및 해당 비공개 키는 선택 사항이며 상호 TLS에 사용됩니다.

MongoDB 구성할 때 서버 및 클라이언트 구성에서 이러한 인증서 파일의 경로를 지정하여 보안 TLS 연결을 설정합니다.

중요

인식된 CA의 인증서가 있는 프로덕션 환경에서는 루트 인증 기관의 비공개 키에 액세스 할 수 없습니다. 이는 개발 환경의 자체 서명된 인증서 체인에 대한 특별한 예외입니다.

다음 코드는 openssl 명령줄 도구를 사용하여 MongoDB deployment 위한 완전한 자체 서명 인증서 체인을 만듭니다. 이 프로세스 MongoDB 에서 사용할 수 있도록 형식이 지정된 모든 인증서와 키를 생성합니다.

# Creating self-signed CA cert and SAN cert for localhost
# aka mdbinstance.mydevelopment.net
#=====================================================================================
openssl req -x509 -nodes -sha256 -days 1825 -newkey rsa:4096 \
-keyout rootCA.key -out rootCA.crt -subj="/CN=ca.mydevelopment.net"
openssl req -newkey rsa:4096 -keyout server.key -nodes \
-out domain.csr -subj "/CN=server.mydevelopment.net"
openssl req -x509 -nodes -CA rootCA.crt -CAkey rootCA.key -in domain.csr \
-out mdbinstance.mydevelopment.net.crt -days 3560 -nodes \
-subj '/CN=<mdbinstance_mydevelopment_net>' -extensions san -config <( \
echo '[req]'; \
echo 'distinguished_name=req'; \
echo '[san]'; \
echo 'subjectAltName=DNS:localhost,DNS:mdbinstance.mydevelopment.net')
cat rootCA.key rootCA.crt >rootCAcombined.pem
cat server.key mdbinstance.mydevelopment.net.crt >serverCert.pem

이전 명령은 다음 조치를 수행합니다.

  1. 루트 CA 인증서 rootCA.crt 및 해당 비공개 키 rootCA.key를 생성합니다.

  2. 서버 에 대한 인증서 서명 요청 또는 CSR을 생성합니다.

  3. localhostmdbinstance.mydevelopment.net모두에 대해 주체 대체 이름(SAN)을 사용하여 서버 인증서를 생성합니다.

  4. 인증서와 키를 MongoDB 에 필요한 PEM 파일에 결합합니다.

위의 명령은 다음 파일을 생성합니다.

MongoDB Server 구성의 경우:

  • rootCAcombined.pem: CA 인증서와 비공개 키 결합

  • serverCert.pem: 서버 인증서와 비공개 키 결합

클라이언트 애플리케이션의 경우:

  • rootCA.crt: 서버 인증서를 신뢰하는 데 사용되는 CA 인증서

  • serverCert.pem: TLS 연결에 사용되는 비공개 키가 포함된 서버 인증서

인증서를 생성한 후에는 인증서를 사용하도록 MongoDB 서버 구성합니다. 아래 구성은 TLS 설정에 중점을 둔 mongod.conf 파일 의 net 섹션을 보여줍니다.

# network interfaces
net:
port: 27017
bindIp: 0.0.0.0 # Binds to all network interfaces - use only in secure networks
tls:
mode: requireTLS # Forces all connections to use TLS
certificateKeyFile: /path/to/serverCert.pem # Server certificate with private key
CAFile: /path/to/rootCAcombined.pem # CA certificate with private key

위의 구성에는 다음이 포함됩니다.

  • port: 표준 MongoDB 포트 27017

  • bindIp: 모든 IP 주소 에서 연결을 허용하려면 0.0.0.0 로 설정하며, 보안 사설 네트워크의 개발 환경에만 적합합니다.

  • tls.mode: 모든 연결에서 TLS 암호화 사용하도록 하려면 requireTLS 로 설정합니다.

  • certificateKeyFile: 비공개 키가 포함된 서버 인증서의 경로입니다.

  • CAFile: 비공개 키가 포함된 CA 인증서의 경로입니다.

구성 파일 업데이트한 후 MongoDB 서버 다시 시작하여 TLS 설정을 적용 . 그러면 MongoDB 인스턴스 에는 모든 연결에 TLS가 필요합니다.

다음 예제는 TLS용으로 구성된 MongoDB 서버 에 대한 연결을 설정하는 방법을 보여줍니다.

mongosh --tls --tlsCAFile /path/to/rootCA.crt --tlsCertificateKeyFile \
/path/to/serverCert.pem 'mongodb://userid:password@hostname.domain'

MongoDB Compass 연결의 경우 연결 문자열 의 인증서 경로를 URL 인코딩합니다. 예시 들어 슬래시(/)를 %2F로 변환합니다.

mongodb://userid:password@hostname.domain/?directConnection=true&tls=true&tlsCAFile=%2Fpath%2Fto%2FrootCA.crt&tlsCertificateKeyFile=%2Fpath%2Fto%2Fserver_certificate.pem
$mongodb_client = new MongoDB\Client($mongodb_uri,
[
'tls' => true, # Enable TLS for the connection
'tlsCAFile' => $mongodb_ca_cert_path, # Path to your CA certificate
'tlsCertificateKeyFile' => $mongodb_cert_path # Path to your client certificate
]
);

모든 클라이언트에 대해 다음을 제공해야 합니다.

  1. TLS 활성화 옵션

  2. 서버 신뢰할 수 있는 CA 인증서의 경로

  3. 선택 사항, 상호 TLS의 경우 클라이언트 인증서 경로

연결을 테스트하면 TLS 설정 올바르게 작동하는지 확인할 수 있습니다. 연결에 성공하면 MongoDB deployment TLS 암호화 로 보호됩니다.

자체 서명된 인증서는 개발에도 사용할 수 있지만 프로덕션 환경에서는 신뢰할 수 있는 인증 기관의 인증서를 사용해야 합니다. 등록된 도메인 이름이 있는 경우 Let's Encrypt는 널리 신뢰할 수 있는 무료 인증서를 제공합니다.

인식된 CA의 인증서를 사용할 때는 CA의 루트 인증서와 중간 인증서가 서버 와 클라이언트 모두에서 운영 체제의 신뢰 저장 에 포함되어 있는지 확인하세요.

신뢰할 수 있는 인증서를 사용하는 프로덕션 배포에서는 다음 코드를 사용하여 MongoDB 서버 설정을 구성합니다.

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem # Your trusted certificate with private key

이전 구성에서 mongodb.pem 에는 신뢰할 수 있는 CA가 서명한 서버의 인증서와 해당 비공개 키가 포함되어 있습니다. CA는 이미 운영 체제에서 신뢰하고 있으므로 CAFile 매개 변수를 지정할 필요가 없습니다.

신뢰할 수 있는 인증서로 MongoDB 구성하는 방법에 대한 자세한 내용은 TLS/SSL을 위한 mongodmongos 구성을 참조하세요.

돌아가기

mongod 및 mongos 구성

이 페이지의 내용