MongoDB supports x.509 certificate authentication for client authentication and internal authentication of the members of replica sets and sharded clusters.
x.509 certificate authentication requires a secure TLS/SSL connection.
Certificate Authority
For production use, your MongoDB deployment should use valid certificates generated and signed by a certificate authority. You or your organization can generate and maintain an independent certificate authority, or use certificates generated by third-party TLS vendors. Obtaining and managing certificates is beyond the scope of this documentation.
Client x.509 Certificates
To authenticate to servers, clients can use x.509 certificates instead of usernames and passwords.
Client Certificate Requirements
Client certificates must have the following properties:
A single Certificate Authority (CA) must issue the certificates for both the client and the server.
Client certificates must contain the following fields:
keyUsage = digitalSignature extendedKeyUsage = clientAuth Each unique MongoDB user must have a unique certificate.
A client x.509 certificate's subject, which contains the Distinguished Name (
DN), must differ from the subjects of member x.509 certificates.Important
If a client x.509 certificate's subject matches the
O,OU, andDCattributes of the Member x.509 Certificate (ortlsX509ClusterAuthDNOverride, if set) exactly, the client connection is accepted, full permissions are granted, and a warning message appears in the log.Only cluster member x509 certificates should use the same
O,OU, andDCattribute combinations.If the MongoDB deployment has
tlsX509ClusterAuthDNOverrideset, the client x.509 certificate's subject must not match that value.If the MongoDB deployment has
tlsX509ClusterAuthDNOverrideset, the client x.509 certificate's subject must also differ from that value.The x.509 certificate must not be expired.
mongod/mongoslogs a warning on connection if the presented x.509 certificate expires within30days of themongod/mongoshost system time.
MongoDB User and $external Database
To authenticate with a client certificate, you must first add the value of the subject from the client certificate as a MongoDB user. Each unique x.509 client certificate corresponds to a single MongoDB user. You cannot use a single client certificate to authenticate more than one MongoDB user.
Add the user in the $external database. The $external database is the Authentication Database for the user.
To use Client Sessions and Causal Consistency Guarantees with $external authentication users (Kerberos, LDAP, or x.509 users), the usernames cannot be greater than 10k bytes.
TLS Connection X509 Certificate Startup Warning
Starting in MongoDB 5.0, mongod and mongos now issue a startup warning when their certificates do not include a Subject Alternative Name attribute.
The following platforms do not support common name validation:
iOS 13 and higher
MacOS 10.15 and higher
Go 1.15 and higher
Clients using these platforms will not authenticate to MongoDB servers which use X.509 certificate whose hostnames are specified by CommonName attributes.
Member x.509 Certificates
For internal authentication between members of sharded clusters and replica sets you can use x.509 certificates instead of keyfiles, which use the SCRAM authentication mechanism.
Member Certificate Requirements
Member certificates which you use to verify membership to a sharded cluster or a replica set (net.tls.clusterFile, if specified, and net.tls.certificateKeyFile), must have the following properties:
A single Certificate Authority (CA) must issue all the x.509 certificates for the members of a sharded cluster or a replica set.
The Distinguished Name (
DN), found in the member certificate'ssubject, must specify a non-empty value for at least one of the following attributes:the Organization (
O)the Organizational Unit (
OU)the Domain Component (
DC)
The Organization attributes (
O's), the Organizational Unit attributes (OU's), and the Domain Components (DC's) must match those from both thenet.tls.clusterFileandnet.tls.certificateKeyFilecertificates for the other cluster members (or thetlsX509ClusterAuthDNOverridevalue, if set).To match, the certificate must match all specifications of these attributes, even the non-specification of these attributes. The order of the attributes does not matter.
In the following example, the two
DN's contain matching specifications forO,OUas well as the non-specification of theDCattribute.CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2 However, the following two
DN's contain a mismatch for theOUattribute since one contains twoOUspecifications and the other, only one specification.CN=host1,OU=Dept1,OU=Sales,O=MongoDB CN=host2,OU=Dept1,O=MongoDB In multi-cluster deployments, each cluster must use a different X.509 member certificate. Each certificate must have unique values on the
O,OU, andDCDistinguished Name (DN) fields.If two clusters have certificates with the same DN values, a compromised server on one cluster can authenticate as a member of the other.
Either the Common Name (
CN) or one of the Subject Alternative Name (SAN) entries must match the server hostname for other cluster members. Starting in MongoDB 4.2, when comparingSANs, MongoDB can compare either DNS names or IP addresses. In previous versions, MongoDB only compares DNS names.For example, the certificates for a cluster could have the following subjects:
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 If the certificate used as the
certificateKeyFileincludesextendedKeyUsage, the value must include bothclientAuth("TLS Web Client Authentication") andserverAuth("TLS Web Server Authentication").extendedKeyUsage = clientAuth, serverAuth If the certificate used as the
clusterFileincludesextendedKeyUsage, the value must includeclientAuth.extendedKeyUsage = clientAuth The x.509 certificate must not be expired.
mongod/mongoslogs a warning on connection if the presented x.509 certificate expires within30days of themongod/mongoshost system time.
MongoDB Configuration for Membership Authentication
You can use TLS for internal authentication between each member of your replica set (each mongod instance) or sharded cluster (each mongod and mongos instance).
To use TLS for internal authentication, use the following settings:
security.clusterAuthModeor--clusterAuthModeset tox509
mongod and mongos instances use their certificate key file to prove their identity to clients, but it can also be used for membership authentication. If you do not specify a cluster file, members use their certificate key files for membership authentication. Specify the certificate key file with net.tls.certificateKeyFile or --tlsCertificateKeyFile.
To use the certificate key file for both client authentication and membership authentication, the certificate must either:
Omit
extendedKeyUsageorSpecify
extendedKeyUsage = serverAuth, clientAuth