x.509
이 페이지의 내용
MongoDB는 복제본 세트 및 샤딩된 클러스터 멤버의 클라이언트 인증 및 내부 인증을 위한 x.509 인증서 인증을 지원합니다.
x.509 인증서 인증에는 보안 TLS/SSL 연결이 필요합니다.
인증 기관
프로덕션 용도의 경우 MongoDB deployment는 동일한 인증 기관에서 생성하고 서명한 유효한 인증서를 사용해야 합니다. 귀하 또는 귀하의 조직은 독립적인 인증 기관을 생성 및 유지 관리하거나 타사 TLS 공급업체에서 생성한 인증서를 사용할 수 있습니다. 인증서를 얻고 관리하는 것은 이 문서의 범위를 벗어납니다.
클라이언트 x.509 인증서
서버에 인증하기 위해 클라이언트는 사용자 이름과 비밀번호 대신 x.509 인증서를 사용할 수 있습니다.
클라이언트 인증서 요구 사항
클라이언트 인증서에는 다음과 같은 속성이 있어야 합니다.
단일 인증 기관 (CA)이 클라이언트와 서버 모두에 대한 인증서를 발급해야 합니다.
클라이언트 인증서에는 다음 필드가 포함되어야 합니다.
keyUsage = digitalSignature extendedKeyUsage = clientAuth 각각의 고유한 MongoDB 사용자는 고유한 인증서를 가지고 있어야 합니다.
클라이언트 x. 고유 이름(
DN
)을 포함하는 509 인증서의 주체는 멤버 x 의 주체 와 달라야 합니다. 509 인증서.중요
클라이언트 x.509 인증서의 주체가 멤버 x.509 인증서의
O
,OU
및DC
속성 (또는 설정한 경우tlsX509ClusterAuthDNOverride
)과 정확히 일치하는 경우, 클라이언트 연결이 허용되고 전체 권한이 부여되며 로그에 경고 메시지가 나타납니다.클러스터 멤버 x509 인증서만이 같은
O
,OU
및DC
속성 조합을 사용해야 합니다.MongoDB deployment에
tlsX509ClusterAuthDNOverride
가 설정된 경우 클라이언트 x.509 인증서의 주체는 해당 값과 일치하지 않아야 합니다.MongoDB deployment에
tlsX509ClusterAuthDNOverride
가 설정된 경우 클라이언트 x.509 인증서의 주체도 해당 값과 달라야 합니다.x.509 인증서는 만료되지 않아야 합니다.
mongod
/mongos
는 제시된 x.509 인증서가mongod/mongos
호스트 시스템 시간으로부터30
일 이내에 만료되는 경우 연결 시 경고를 기록합니다. 자세한 내용은 경고를 트리거하는 만료 임박 x.509 인증서를 참조하세요.
MongoDB 사용자 및 $external
데이터베이스
클라이언트 인증서로 인증하려면 먼저 클라이언트 인증서의 subject
값을 MongoDB 사용자로 추가해야 합니다. 각각의 고유한 x.509 클라이언트 인증서는 단일 MongoDB 사용자에 해당합니다. 단일 클라이언트 인증서를 사용하여 둘 이상의 MongoDB 사용자를 인증할 수 없습니다.
$external
데이터베이스에 사용자를 추가합니다. $external
데이터베이스는 사용자를 위한 인증 데이터베이스 입니다.
$external
인증 사용자(Kerberos, LDAP 또는 x.509 사용자)와 함께 클라이언트 세션 및 인과적 일관성 보장 을 사용하려면 사용자 이름이 10k 바이트를 초과할 수 없습니다.
TLS 연결 X509 인증서 시작 경고
MongoDB 5.0부터 mongod
및 mongos
는 이제 인증서에 주체 대체 이름 특성이 포함되지 않은 경우 시작 경고를 발행합니다.
다음 플랫폼은 일반 이름 유효성 검사를 지원하지 않습니다:
iOS 13 이상
MacOS 10.15 이상
Go 1.15 이상
이러한 플랫폼을 사용하는 클라이언트는 호스트 이름이 CommonName 속성으로 지정된 X.509 인증서를 사용하는 MongoDB Server에 인증 하지 않습니다.
노드 x.509 인증서
샤드 클러스터와 복제본 세트의 멤버 간의 내부 인증에는 x를 사용할 수 있습니다. SCRAM 인증 메커니즘을 사용하는 키 파일 대신 509 인증서를 사용합니다.
멤버 인증서 요구 사항
샤드 클러스터 또는 복제본 세트(net.tls.clusterFile
, 지정된 경우 및 net.tls.certificateKeyFile
)에 대한 멤버십을 확인하는 데 사용하는 멤버 인증서에는 다음과 같은 속성이 있어야 합니다.
단일 인증 기관(CA)이 모든 x를 발급해야 합니다. 샤드 클러스터 또는 복제본 세트의 멤버에 대한 509 인증서.
회원 인증서의
subject
에 있는 고유 이름(DN
)은 다음 속성 중 하나 이상 에 대해 비어 있지 않은 값을 지정해야 합니다.조직 (
O
)조직 단위 (
OU
)도메인 구성 요소 (
DC
)
조직 속성(
O
), 조직 단위 속성(OU
) 및 도메인 구성 요소(DC
)는net.tls.clusterFile
및net.tls.certificateKeyFile
인증서의 속성과 일치해야 합니다. 다른 클러스터 멤버(또는tlsX509ClusterAuthDNOverride
값(설정된 경우)).일치시키려면 인증서가 이러한 속성의 모든 사양과 일치해야 하며, 심지어 이러한 속성의 비사양도 일치해야 합니다. 속성의 순서는 중요하지 않습니다.
다음 예에서 두
DN
에는O
OU
에 대해 일치하는 사양과DC
속성의 비사양이 포함되어 있습니다.CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2 그러나 다음 두 개의
DN
에는OU
사양이 2개 포함되어 있고 다른 하나는 사양이 1개이므로OU
속성에 대한 불일치가 포함되어 있습니다.CN=host1,OU=Dept1,OU=Sales,O=MongoDB CN=host2,OU=Dept1,O=MongoDB 멀티 클러스터 배포에서는 각 클러스터가 서로 다른 X.509 멤버 인증서를 사용해야 합니다. 각 인증서는
O
,OU
및DC
DN(고유 이름) 필드에 고유한 값을 가져야 합니다.두 클러스터에 DN 값이 동일한 인증서가 있는 경우 한 클러스터의 손상된 서버가 다른 클러스터의 구성원으로 인증할 수 있습니다.
일반 이름(
CN
) 또는 주체 대체 이름(SAN
) 항목 중 하나는 다른 클러스터 멤버의 서버 호스트 이름과 일치해야 합니다. MongoDB 4.2부터SAN
를 비교할 때 MongoDB는 DNS 이름 또는 IP 주소 중 하나를 비교할 수 있습니다. 이전 버전에서는 MongoDB가 DNS 이름만 비교했습니다.예를 들어 클러스터의 인증서에는 다음과 같은 주체가 있을 수 있습니다.
subject= CN=<myhostname1>,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=<myhostname2>,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=<myhostname3>,OU=Dept1,O=MongoDB,ST=NY,C=US certificateKeyFile
로 사용되는 인증서에extendedKeyUsage
이 포함되어 있는 경우clientAuth
("TLS 웹 클라이언트 인증")와serverAuth
("TLS 웹 서버 인증")을 모두 포함해야 합니다.extendedKeyUsage = clientAuth, serverAuth clusterFile
로 사용된 인증서에extendedKeyUsage
가 포함되어 있다면, 그 값은 반드시clientAuth
를 포함해야 합니다.extendedKeyUsage = clientAuth x.509 인증서는 만료되지 않아야 합니다.
mongod
/mongos
는 제시된 x.509 인증서가mongod/mongos
호스트 시스템 시간으로부터30
일 이내에 만료되는 경우 연결 시 경고를 기록합니다. 자세한 내용은 경고를 트리거하는 만료 임박 x.509 인증서를 참조하세요.
멤버십 인증을 위한 MongoDB 구성
복제본 세트 (각 mongod
인스턴스) 또는 샤딩된 클러스터 (각 mongod
및 mongos
인스턴스)의 각 멤버간의 내부 인증을 위해 TLS를 사용할 수 있습니다.
내부 인증에 TLS를 사용하려면 다음 설정을 사용합니다.
mongod
및 mongos
인스턴스는 클라이언트에게 신원을 증명하기 위해 인증서 키 파일을 사용하지만 멤버십 인증에도 사용할 수 있습니다. 클러스터 파일을 지정하지 않으면 구성원은 멤버십 인증에 인증서 키 파일을 사용합니다. net.tls.certificateKeyFile
또는 --tlsCertificateKeyFile
를 사용하여 인증서 키 파일을 지정합니다.
클라이언트 인증과 멤버십 인증 모두에 certificate key file
을(를) 사용하려면 인증서가 다음 중 하나여야 합니다.
extendedKeyUsage
생략 또는지정
extendedKeyUsage = serverAuth, clientAuth