Docs HomeMongoDB Manual

Configure mongod and mongos for TLS/SSL为TLS/SSL配置mongodmongos

Overview概述

This document helps you to configure a new MongoDB instance to support TLS/SSL. 本文档帮助您配置一个新的MongoDB实例以支持TLS/SSL。For instructions on upgrading a cluster currently not using TLS/SSL to using TLS/SSL, see Upgrade a Cluster to Use TLS/SSL instead.有关将当前未使用TLS/SSL的群集升级为使用TLS/SL的说明,请参阅升级群集以使用TLS/SSL

MongoDB uses the native TLS/SSL OS libraries:MongoDB使用本机TLS/SSL操作系统库:

PlatformTLS/SSL Library
WindowsSecure Channel (Schannel)安全通道(Schannel)
Linux/BSDOpenSSL
macOSSecure Transport安全传输
Note
  • MongoDB disables support for TLS 1.0 encryption on systems where TLS 1.1+ is available. MongoDB在TLS 1.1+可用的系统上禁用对TLS 1.0加密的支持。For more details, see Disable TLS 1.0.有关更多详细信息,请参阅禁用TLS 1.0
  • MongoDB's TLS/SSL encryption only allows the use of strong TLS/SSL ciphers with a minimum of 128-bit key length for all connections.MongoDB的TLS/SSL加密只允许对所有连接使用最小128位键长度的强TLS/SSL密码。
  • The Linux 64-bit legacy x64 builds of MongoDB do not include support for TLS/SSL.MongoDB的Linux 64位遗留x64版本支持TLS/SSL。

Prerequisites先决条件

Important

A full description of TLS/SSL, PKI (Public Key Infrastructure) certificates, and Certificate Authority is beyond the scope of this document. TLS/SSL、PKI(公钥基础设施)证书和证书颁发机构的完整描述超出了本文档的范围。This page assumes prior knowledge of TLS/SSL as well as access to valid certificates.本页假定您事先了解TLS/SSL以及有效证书的访问权限。

Certificate Authorities证书颁发机构

For production use, your MongoDB deployment should use valid certificates generated and signed by a certificate authority. 对于生产使用,您的MongoDB部署应该使用由证书颁发机构生成和签名的有效证书。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.您或您的组织可以生成和维护独立的证书颁发机构,也可以使用第三方TLS供应商生成的证书。获取和管理证书超出了本文档的范围。

mongod and mongos Certificate Key Filemongodmongos证书键文件

When establishing a TLS/SSL connection, the mongod / mongos presents a certificate key file to its clients to establish its identity. 当建立TLS/SSL连接时,mongod/mongos会向其客户端提供一个证书键文件以建立其身份。[1] The certificate key file contains a public key certificate and its associated private key, but only the public component is revealed to the client.证书键文件包含公钥证书及其关联的私钥,但只有公共组件会显示给客户端。

MongoDB can use any valid TLS/SSL certificate issued by a certificate authority, or a self-signed certificate. MongoDB可以使用证书颁发机构颁发的任何有效TLS/SSL证书,或者自签名证书。If you use a self-signed certificate, although the communications channel will be encrypted to prevent eavesdropping on the connection, there will be no validation of server identity. 如果使用自签名证书,尽管会对通信通道进行加密以防止窃听连接,但不会验证服务器标识。This leaves you vulnerable to a man-in-the-middle attack. Using a certificate signed by a trusted certificate authority will permit MongoDB drivers to verify the server's identity.这会让你很容易受到中间人的攻击。使用由可信证书颁发机构签署的证书将允许MongoDB驱动程序验证服务器的身份。

In general, avoid using self-signed certificates unless the network is trusted.通常,除非网络是可信的,否则应避免使用自签名证书。

With regards to certificates for replica set and sharded cluster members, it is advisable to use different certificates on different servers. 关于副本集和分片集群成员的证书,建议在不同的服务器上使用不同的证书。This minimizes exposure of the private key and allows for hostname validation.这最大限度地减少了私钥的暴露,并允许主机名验证。

[1] For FIPS mode, ensure that the certificate is FIPS-compliant (i.e uses a FIPS-compliant algorithm) and the private key meets the PKCS#8 standard. 对于FIPS模式,请确保证书符合FIPS(即使用符合FIPS的算法),并且私钥符合PKCS#8标准。If you need to convert a private key to PKCS#8 format, various conversion tools exist, such as openssl pkcs8 and others.如果您需要将私钥转换为PKCS#8格式,可以使用各种转换工具,例如openssl pkcs8和其他工具。

Procedures (Using net.tls Settings)

Note

Starting in version 4.2, MongoDB provides net.tls settings (and corresponding command-line options) that corresponds to the net.ssl settings (and their corresponding command-line options). The net.tls settings provide identical functionality as the net.ssl options since MongoDB has always supported TLS 1.0 and later.

The procedures in this section use the net.tls settings. For procedures using the net.ssl alias, see Procedures (Using net.ssl Settings).本节中的过程使用net.tls设置。有关使用net.tls别名的过程,请参阅过程(使用net.ssl设置)

Set Up mongod and mongos with TLS/SSL Certificate and Key使用TLS/SSL证书和键设置mongodmongos

The following section configures mongod / mongos to use TLS/SSL connections. With these TLS/SSL settings, mongod / mongos presents its certificate key file to the client. However, the mongod / mongos does not require a certificate key file from the client to verify the client's identity. To require client's certificate key file, see Set Up mongod and mongos with Client Certificate Validation instead.要要求客户端的证书键文件,请参阅使用客户端证书验证设置mongodmongos

Note

The procedure uses the net.tls settings (available starting in MongoDB 4.2). For procedures using the net.ssl settings, see Procedures (Using net.ssl Settings).

To use TLS/SSL connections, include the following TLS/SSL settings in your mongod / mongos instance's configuration file:

Set Up mongod and mongos with Client Certificate Validation

The following section configures mongod / mongos to use TLS/SSL connections and perform client certificate validation. With these TLS/SSL settings:

  • mongod / mongos presents its certificate key file to the client for verification.
  • mongod / mongos requires a certificate key file from the client to verify the client's identity.
Note

The procedure uses the net.tls settings (available starting in MongoDB 4.2). For procedures using the net.ssl settings, see Procedures (Using net.ssl Settings).

To use TLS/SSL connections and perform client certificate validation, include the following TLS/SSL settings in your mongod / mongos instance's configuration file:

Note

Starting in MongoDB 4.0, you can use system SSL certificate stores for Windows and macOS. To use the system SSL certificate store, specify net.ssl.certificateSelector instead of specifying the certificate key file.

SettingNotes备注
net.tls.modeSet to requireTLS.
This setting restricts each server to use only TLS/SSL encrypted connections. You can also specify either the value allowTLS or preferTLS to set up the use of mixed TLS/SSL modes on a port. See net.tls.mode for details.
net.tls.certificateKeyFileSet to the path of the file that contains the TLS/SSL certificate and key.
The mongod / mongos instance presents this file to its clients to establish the instance's identity.
net.tls.CAFileSet to the path of the file that contains the certificate chain for verifying client certificates.
The mongod / mongos instance use this file to verify certificates presented by its clients. The certificate chain includes the certificate of the root Certificate Authority.

For example, consider the following configuration file for a mongod instance:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/var/lib/mongodb"
processManagement:
fork: true
net:
bindIp: localhost,mongodb0.example.net
port: 27017

A mongod instance that uses the above configuration can only use TLS/SSL connections and requires valid certificate from its clients:

mongod --config <path/to/configuration/file>

That is, clients must specify TLS/SSL connections and presents its certificate key file to the instance. See Connect to MongoDB Instances that Require Client Certificates for more information on connecting with TLS/SSL.

Tip

See also: 另请参阅:

You can also configure mongod and mongos using command-line options instead of the configuration file:

Block Revoked Certificates for Clients

Note

The procedure uses the net.tls settings (available starting in MongoDB 4.2). For procedures using the net.ssl settings, see Procedures (Using net.ssl Settings).

To prevent clients with revoked certificates from connecting to the mongod or mongos instance, you can use:

  • Online Certificate Status Protocol (OCSP)

    Starting in version 4.4, to check for certificate revocation, MongoDB enables the use of OCSP (Online Certificate Status Protocol) by default as an alternative to specifying a CRL file or using the system SSL certificate store.

    In versions 4.0 and 4.2, the use of OCSP is available only through the use of system certificate store on Windows or macOS.

  • Certificate Revocation List (CRL)

    To specify a CRL file, include net.tls.CRLFile set to a file that contains revoked certificates.

    For example:例如:

    net:
    tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateClientCertificates.pem
    CRLFile: /etc/ssl/revokedCertificates.pem

    Clients that present certificates that are listed in the /etc/ssl/revokedCertificates.pem will not be able to connect.

    Tip

    See also: 另请参阅:

    You can also configure the revoked certificate list using the command-line option.

Validate Only if a Client Presents a Certificate

In most cases, it is important to ensure that clients present valid certificates. However, if you have clients that cannot present a client certificate or are transitioning to using a certificate, you may only want to validate certificates from clients that present a certificate.

Note

The procedure uses the net.tls settings (available starting in MongoDB 4.2). For procedures using the net.ssl settings, see Procedures (Using net.ssl Settings).

To bypass client certificate validation for clients that do not present a certificate, include net.tls.allowConnectionsWithoutCertificates set to true.

For example:例如:

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
allowConnectionsWithoutCertificates: true

A mongod / mongos running with these settings allows connection from:

  • Clients that do not present a certificate.
  • Clients that present a valid certificate.
Note

If the client presents a certificate, the certificate must be a valid certificate.

All connections, including those that have not presented certificates, are encrypted using TLS/SSL.

See TLS/SSL Configuration for Clients for more information on TLS/SSL connections for clients.

Tip

See also: 另请参阅:

You can also configure using the command-line options:

Disallow Protocols

Note

The procedure uses the net.tls settings (available starting in MongoDB 4.2). For procedures using the net.ssl settings, see Procedures (Using net.ssl Settings).

To prevent MongoDB servers from accepting incoming connections that use specific protocols, include net.tls.disabledProtocols set to the disallowed protocols.

For example, the following configuration prevents mongod / mongos from accepting incoming connections that use either TLS1_0 or TLS1_1

net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
disabledProtocols: TLS1_0,TLS1_1
Tip

See also: 另请参阅:

You can also configure using the command-line options:

TLS/SSL Certificate Passphrase

If the certificate key files for mongod / mongos are encrypted, include net.tls.certificateKeyFilePassword set to the passphrase.

Tip

Starting in MongoDB 4.2, to avoid specifying the passphrase in cleartext, you can use an expansion value in the configuration file.

Tip

See also: 另请参阅:

You can also configure using the command-line options:

Online Certificate Rotation

Starting in MongoDB 5.0, you can rotate the following certificate key files on-demand:

To rotate one or more of these certificates:

  1. Replace the certificate or certificates you wish to rotate on the filesystem, noting the following constraints:

    • Each new certificate must have the same filename and same filepath as the certificate it is replacing.
    • If rotating an encrypted TLS Certificate, its password must be the same as the password for the old certificate (as specified to the certificateKeyFilePassword configuration file setting). Certificate rotation does not support the interactive password prompt.
  2. Connect mongosh to the mongod or mongos instance that you wish to perform certificate rotation on.
  3. Run the rotateCertificates command or the db.rotateCertificates() shell method to rotate the certificates used by the mongod or mongos instance.

When certificate rotation takes place:

  • Existing connections to the mongod or mongos instance are not terminated, and will continue to use the old certificates.
  • Any new connections will use the new certificates.

Incorrect, expired, revoked, or missing certificate files will cause the certificate rotation to fail, but will not invalidate the existing TLS configuration or terminate the running mongod or mongos process.

Previous to MongoDB 5.0, certificate rotation required downtime, and was typically performed during maintenance windows.

See rotateCertificates or db.rotateCertificates() for additional considerations and full usage instructions.

Run in FIPS Mode

Note

FIPS-compatible TLS/SSL is available only in MongoDB Enterprise. See Configure MongoDB for FIPS for more information.

See Configure MongoDB for FIPS for more details.

Next Steps下一步

To configure TLS/SSL support for clients, see TLS/SSL Configuration for Clients.

Tip

Procedures (Using net.ssl Settings)

Note

Starting in version 4.2, MongoDB provides net.tls settings (and corresponding command-line options) that corresponds to the net.ssl settings (and their corresponding command-line options). The net.tls settings provide identical functionality as the net.ssl options since MongoDB has always supported TLS 1.0 and later.

The procedures in this section use the net.ssl settings. For procedures using the net.tls aliases, see Procedures (Using net.tls Settings).

Set Up mongod and mongos with TLS/SSL Certificate and Key

The following section configures mongod / mongos to use TLS/SSL connections. With these TLS/SSL settings, mongod / mongos presents its certificate key file to the client. However, the mongod / mongos does not require a certificate key file from the client to verify the client's identity. To require client's certificate key file, see Set Up mongod and mongos with Client Certificate Validation instead.

To use TLS/SSL connections, include the following TLS/SSL settings in your mongod / mongos instance's configuration file:

SettingNotes备注

Set to requireSSL.

This setting restricts each server to use only TLS/SSL encrypted connections. You can also specify allowSSL or preferSSL to use mixed TLS/SSL modes. See net.ssl.mode for details.

Set to the .pem file that contains the TLS/SSL certificate and key.

The mongod / mongos instance presents this file to its clients to establish the instance's identity.

If the key is encrypted, specify the passphrase (net.ssl.PEMKeyPassword).

For example, consider the following configuration file for a mongod instance:

net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/var/lib/mongodb"
processManagement:
fork: true
net:
bindIp: localhost,mongodb0.example.net
port: 27017

Starting in MongoDB 4.0, you can use system SSL certificate stores for Windows and macOS. To use the system SSL certificate store, specify net.ssl.certificateSelector instead of specifying the certificate key file.

SettingNotes备注

Set to requireSSL.

This setting restricts each server to use only TLS/SSL encrypted connections. You can also specify allowSSL or preferSSL to use mixed TLS/SSL modes. See net.ssl.mode for details.

Set to the property (either subject or thumbprint) and value.

This setting is used to select the certificate. See net.ssl.certificateSelector for details.

For example, consider the following configuration file for a mongod instance:

net:
ssl:
mode: requireSSL
certificateSelector: subject="<CertificateCommonName>"
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/var/lib/mongodb"
processManagement:
fork: true
net:
bindIp: localhost,mongodb0.example.net
port: 27017

A mongod instance that uses the above configuration can only use TLS/SSL connections:

mongod --config <path/to/configuration/file>

That is, clients must specify TLS/SSL connections. See Connect to MongoDB Instances Using Encryption for more information on connecting with TLS/SSL.

Tip

See also: 另请参阅:

You can also configure mongod and mongos using command-line options instead of the configuration file:

Set Up mongod and mongos with Client Certificate Validation

The following section configures mongod / mongos to use TLS/SSL connections and perform client certificate validation. With these TLS/SSL settings:

  • mongod / mongos presents its certificate key file to the client for verification.
  • mongod / mongos requires a certificate key file from the client to verify the client's identity.

To use TLS/SSL connections, include the following TLS/SSL settings in your mongod / mongos instance's configuration file:

Note

Starting in MongoDB 4.0, you can use system SSL certificate stores for Windows and macOS. To use the system SSL certificate store, specify net.ssl.certificateSelector instead of specifying the certificate key file.

SettingNotes备注
net.ssl.modeSet to requireSSL.
This setting restricts each server to use only TLS/SSL encrypted connections. You can also specify allowSSL or preferSSL to use mixed TLS/SSL modes. See net.ssl.mode for details.
net.ssl.PEMKeyFileSet to the .pem file that contains the TLS/SSL certificate and key.
The mongod / mongos instance presents this file to its clients to establish the instance's identity.
If the key is encrypted, specify the passphrase (net.ssl.PEMKeyPassword).
net.ssl.CAFileSet to the path of the file that contains the certificate chain for verifying client certificates.
The mongod / mongos instance use this file to verify certificates presented by its clients. The certificate chain includes the certificate of the root Certificate Authority.

For example, consider the following configuration file for a mongod instance:

net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
systemLog:
destination: file
path: "/var/log/mongodb/mongod.log"
logAppend: true
storage:
dbPath: "/var/lib/mongodb"
processManagement:
fork: true
net:
bindIp: localhost,mongodb0.example.net
port: 27017

A mongod instance that uses the above configuration can only use TLS/SSL connections and requires valid certificate from its clients:

mongod --config <path/to/configuration/file>

That is, clients must specify TLS/SSL connections and present their certificate key file to the instance. See Connect to MongoDB Instances that Require Client Certificates for more information on connecting with TLS/SSL.

Tip

See also: 另请参阅:

You can also configure mongod and mongos using command-line options instead of the configuration file:

Block Revoked Certificates for Clients

To prevent clients with revoked certificates from connecting to the mongod or mongos instance, you can use:

  • Online Certificate Status Protocol (OCSP)

    Starting in version 4.4, to check for certificate revocation, MongoDB enables the use of OCSP (Online Certificate Status Protocol) by default as an alternative to specifying a CRL file or using the system SSL certificate store.

    In versions 4.0 and 4.2, the use of OCSP is available only through the use of system certificate store on Windows or macOS.

  • Certificate Revocation List (CRL)

    To specify a CRL file, include net.ssl.CRLFile set to a file that contains revoked certificates.

    For example:例如:

    net:
    ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/mongodb.pem
    CAFile: /etc/ssl/caToValidateClientCertificates.pem
    CRLFile: /etc/ssl/revokedCertificates.pem

    Clients that present certificates that are listed in the /etc/ssl/revokedCertificates.pem will not be able to connect.

    Tip

    See also: 另请参阅:

    You can also configure the revoked certificate list using the command-line option.

Validate Only if a Client Presents a Certificate

In most cases, it is important to ensure that clients present valid certificates. However, if you have clients that cannot present a client certificate or are transitioning to using a certificate, you may only want to validate certificates from clients that present a certificate.

To bypass client certificate validation for clients that do not present a certificate, include net.ssl.allowConnectionsWithoutCertificates set to true.

For example:例如:

net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
allowConnectionsWithoutCertificates: true

A mongod / mongos running with these settings allows connection from:

  • Clients that do not present a certificate.
  • Clients that present a valid certificate.
Note

If the client presents a certificate, the certificate must be a valid certificate.

All connections, including those that have not presented certificates, are encrypted using TLS/SSL.

See TLS/SSL Configuration for Clients for more information on TLS/SSL connections for clients.

Tip

See also: 另请参阅:

You can also configure using the command-line options:

Disallow Protocols

To prevent MongoDB servers from accepting incoming connections that use specific protocols, include net.ssl.disabledProtocols set to the disallowed protocols.

For example, the following configuration prevents mongod / mongos from accepting incoming connections that use either TLS1_0 or TLS1_1

net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/caToValidateClientCertificates.pem
disabledProtocols: TLS1_0,TLS1_1
Tip

See also: 另请参阅:

You can also configure using the command-line options:

TLS/SSL Certificate Passphrase

If the certificate key files for mongod / mongos are encrypted, include net.ssl.PEMKeyPassword set to the passphrase.

Tip

See also: 另请参阅:

You can also configure using the command-line options:

Run in FIPS Mode

Note

FIPS-compatible TLS/SSL is available only in MongoDB Enterprise. See Configure MongoDB for FIPS for more information.

See Configure MongoDB for FIPS for more details.

Next Steps下一步

To configure TLS/SSL support for clients, see TLS/SSL Configuration for Clients.

Tip