参考 > 安全 > TLS / SSL(传输加密) > 配置mongod和mongos用于TLS / SSL
本文档可帮助您配置新的MongoDB实例以支持TLS / SSL。有关将当前不使用TLS / SSL 的群集升级到使用TLS / SSL的说明,请参阅将群集升级为使用TLS / SSL 。
从版本4.0开始,MongoDB使用本机TLS / SSL OS库:
Windows | 安全通道(Schannel) |
Linux / BSD | 的OpenSSL |
macOs | 安全运输 |
注意
重要
TLS / SSL,PKI(公钥基础结构)证书和证书颁发机构的完整描述不在本文档的范围之内。该页面假定您具有TLS / SSL的先验知识以及对有效证书的访问权限。
对于生产用途,您的MongoDB部署应使用由单个证书颁发机构生成和签名的有效证书。您或您的组织可以生成和维护独立的证书颁发机构,也可以使用第三方TLS / SSL供应商生成的证书。获取和管理证书超出了本文档的范围。
mongod
和mongos
证书密钥文件¶建立TLS / SSL连接时,
mongod
/ mongos
向其客户端提供证书密钥文件(包含公钥证书及其关联的私钥)以建立其身份。[1]
MongoDB可以使用证书颁发机构颁发的任何有效TLS / SSL证书或自签名证书。如果您使用自签名证书,尽管将对通信通道进行加密以防止窃听连接,但是不会验证服务器身份。这使您容易受到中间人攻击。使用由受信任的证书颁发机构签名的证书将允许MongoDB驱动程序验证服务器的身份。
通常,除非信任网络,否则请避免使用自签名证书。
关于副本集和分片群集成员的证书,建议在不同的服务器上使用不同的证书。这样可以最大程度地减少私钥的暴露,并允许主机名验证。
[1] | 对于FIPS模式,请确保证书符合FIPS(即,使用符合FIPS的算法),并且私钥符合PKCS#8标准。如果需要将私钥转换为PKCS#8格式,则可以使用多种转换工具,例如
和。openssl pkcs8 |
net.tls
设置)¶注意
从4.2版开始,MongoDB提供与net.tls
设置(及其相应的命令行选项)相对应的
net.ssl
设置(以及相应的命令行选项)。这些net.tls
设置提供与net.ssl
选项相同的功能,因为MongoDB始终支持TLS 1.0和更高版本。
本节中的过程使用net.tls
设置。有关使用net.ssl
别名的过程,请参见过程(使用net.ssl设置)。
mongod
并mongos
使用TLS / SSL证书和密钥¶下一节将mongod
/ 配置
mongos
为使用TLS / SSL连接。使用这些TLS / SSL设置,
mongod
/ mongos
将其证书密钥文件呈现给客户端。但是,
mongod
/ mongos
不需要客户端提供证书密钥文件来验证客户端的身份。要要求客户端的证书密钥文件,请参阅
改为使用客户端证书验证来设置mongod和mongos。
注意
该过程使用net.tls
设置(从MongoDB 4.2开始可用)。有关使用net.ssl
设置的过程,请参阅
过程(使用net.ssl设置)。
要使用TLS / SSL连接,请在
/ 实例的
配置文件中包括以下TLS / SSL设置:mongod
mongos
设置 | 笔记 |
---|---|
net.tls.mode |
设为 此设置将每个服务器限制为仅使用TLS / SSL加密的连接。您也可以指定值 |
net.tls.certificateKeyFile |
设置为包含TLS / SSL证书和密钥的文件的路径。 |
从MongoDB 4.0开始,您可以为Windows和macOS使用系统SSL证书存储。要使用系统SSL证书存储,请指定
net.tls.certificateSelector
而不是指定证书密钥文件。
设置 | 笔记 |
---|---|
net.tls.mode |
设为 此设置将每个服务器限制为仅使用TLS / SSL加密的连接。您也可以指定值 |
net.tls.certificateSelector |
设置为属性( 此设置用于选择证书。有关 |
甲mongod
使用上面的配置实例只能使用TLS / SSL连接:
也就是说,客户端必须指定TLS / SSL连接。有关使用 TLS / SSL连接的更多信息,请参阅 使用加密连接到MongoDB实例(tls选项)。
也可以看看
mongod
并mongos
通过客户端证书验证¶下一节将配置
mongod
/ mongos
使用TLS / SSL连接并执行客户端证书验证。使用以下TLS / SSL设置:
注意
该过程使用net.tls
设置(从MongoDB 4.2开始可用)。有关使用net.ssl
设置的过程,请参阅
过程(使用net.ssl设置)。
要使用TLS / SSL连接并执行客户端证书验证,请在/ 实例的
配置文件中包括以下TLS / SSL设置:mongod
mongos
注意
从MongoDB 4.0开始,您可以为Windows和macOS使用系统SSL证书存储。要使用系统SSL证书存储,请指定
net.ssl.certificateSelector
而不是指定证书密钥文件。
设置 | 笔记 |
---|---|
net.tls.mode |
设为 此设置将每个服务器限制为仅使用TLS / SSL加密的连接。您也可以指定值 |
net.tls.certificateKeyFile |
设置为包含TLS / SSL证书和密钥的文件的路径。 |
net.tls.CAFile |
设置为包含用于验证客户端证书的证书链的文件的路径。 |
一个mongod
使用上面的配置实例只能使用TLS / SSL连接,并要求其客户端的有效证书:
也就是说,客户端必须指定TLS / SSL连接,并将其证书密钥文件提供给实例。请参阅 连接到需要客户端证书的MongoDB实例(tls选项)以获取有关使用TLS / SSL连接的更多信息。
也可以看看
注意
该过程使用net.tls
设置(从MongoDB 4.2开始可用)。有关使用net.ssl
设置的过程,请参阅
过程(使用net.ssl设置)。
为了防止具有吊销证书的客户端连接,
net.tls.CRLFile
请将set设置为包含吊销证书的文件。
例如:
提供证书中列出的证书的客户端
/etc/ssl/revokedCertificates.pem
将无法连接。
在大多数情况下,确保客户端出示有效证书很重要。但是,如果您的客户端无法提供客户端证书或正在转换为使用证书,则您可能只想从提供证书的客户端验证证书。
注意
该过程使用net.tls
设置(从MongoDB 4.2开始可用)。有关使用net.ssl
设置的过程,请参阅
过程(使用net.ssl设置)。
要绕过不提供证书的客户端的客户端证书验证,
net.tls.allowConnectionsWithoutCertificates
请将设置为true
。
例如:
注意
如果客户端出示证书,则该证书必须是有效的证书。
所有连接(包括未提供证书的连接)均使用TLS / SSL加密。
有关客户端 TLS / SSL连接的更多信息,请参见客户端的TLS / SSL配置。
也可以看看
您还可以使用命令行选项进行配置:
注意
该过程使用net.tls
设置(从MongoDB 4.2开始可用)。有关使用net.ssl
设置的过程,请参阅
过程(使用net.ssl设置)。
为防止MongoDB服务器接受使用特定协议的传入连接,net.tls.disabledProtocols
请将set设置为不允许的协议。
如果证书密钥文件
mongod
/ mongos
加密,sinclude
net.tls.certificateKeyFilePassword
设置为密码。
小费
从MongoDB 4.2开始,为了避免以明文形式指定密码短语,可以在配置文件中使用扩展值。
也可以看看
您还可以使用命令行选项进行配置:
注意
兼容FIPS的TLS / SSL仅在MongoDB Enterprise中可用。有关更多信息,请参阅 为FIPS配置MongoDB。
有关更多详细信息,请参阅为FIPS配置MongoDB。
net.ssl
设置)¶注意
从4.2版开始,MongoDB提供与net.tls
设置(及其相应的命令行选项)相对应的
net.ssl
设置(以及相应的命令行选项)。这些net.tls
设置提供与net.ssl
选项相同的功能,因为MongoDB始终支持TLS 1.0和更高版本。
本节中的过程使用net.ssl
设置。有关使用net.tls
别名的过程,请参见过程(使用net.tls设置)。
mongod
并mongos
使用TLS / SSL证书和密钥¶下一节将mongod
/ 配置
mongos
为使用TLS / SSL连接。使用这些TLS / SSL设置,
mongod
/ mongos
将其证书密钥文件呈现给客户端。但是,
mongod
/ mongos
不需要客户端提供证书密钥文件来验证客户端的身份。要要求客户端的证书密钥文件,请参阅
改为使用客户端证书验证来设置mongod和mongos。
要使用TLS / SSL连接,请在mongod
/ mongos
实例的
配置文件中包括以下TLS / SSL设置:
设置 | 笔记 |
---|---|
net.ssl.mode |
设为 此设置将每个服务器限制为仅使用TLS / SSL加密的连接。您也可以指定 |
net.ssl.PEMKeyFile |
设置为 该 如果密钥已加密,请指定密码短语( |