为 TLS/SSL 配置 mongod 和 mongos
在本页面
Overview
本文档可帮助您配置 MongoDB 以支持 TLS/SSL。 MongoDBClient 端可以使用 TLS/SSL 加密到mongod和mongos实例的连接。 MongoDB TLS/SSL 实现使用 OpenSSL 库。
Note
TLS 是 SSL 的后继产品。
这些说明假定您已经安装了包含 TLS/SSL 支持的 MongoDB 构建,并且您的 Client 端驱动程序支持加密连接。有关将当前不使用 TLS/SSL 的群集升级到使用 TLS/SSL 的说明,请参阅升级群集以使用 TLS/SSL。
MongoDB 的 TLS/SSL 加密仅允许对所有连接使用最小长度为 128 位密钥长度的强 TLS/SSL 密码。
Prerequisites
Important
TLS/SSL,PKI(公钥基础结构)证书和证书颁发机构的完整描述不在本文档的范围之内。该页面假定您具有 TLS/SSL 的先验知识以及对有效证书的访问权限。
Note
MongoDB 的* Linux 64 位旧版 x64 *版本不包括对 TLS/SSL 的支持。
Client Support
请参阅Client 端的 TLS/SSL 配置,以了解对 Python,Java,Ruby 和其他 Client 端的 TLS/SSL 支持。
Certificate Authorities
.pem File
在使用 TLS/SSL 之前,您必须具有一个.pem
文件,其中包含公钥证书及其关联的私钥。 [1]
MongoDB 可以使用证书颁发机构颁发的任何有效 TLS/SSL 证书,也可以使用自签名证书。如果您使用自签名证书,则尽管通信通道将被加密,但服务器身份将没有验证。尽管这种情况可以防止窃听连接,但是您很容易受到中间人攻击。使用由受信任的证书颁发机构签名的证书,将允许 MongoDB 驱动程序验证服务器的身份。
通常,除非信任网络,否则请避免使用自签名证书。
另外,关于副本集/分片群集成员之间的身份验证,为了最大程度地减少私钥的暴露并允许主机名验证,建议在不同的服务器上使用不同的证书。
为了进行“测试”,您可以在 Unix 系统上使用类似于以下命令的命令生成自签名证书和私钥:
cd /etc/ssl/
openssl req -newkey rsa:2048 -new -x509 -days 365 -nodes -out mongodb-cert.crt -keyout mongodb-cert.key
此操作将生成一个新的自签名证书,该证书没有密码短语,有效期为 365 天。获得证书后,将证书和私钥连接到.pem
文件,如以下示例所示:
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
See also
[1] | 对于 FIPS 模式,请确保证书符合 FIPS 标准(即使用 FIPS 兼容算法),并且私钥符合 PKCS#8 标准。如果需要将私钥转换为 PKCS#8 格式,则可以使用各种转换工具,例如openssl pkcs8 等。 |
Procedures
Note
从 MongoDB 3.6 开始,默认情况下mongod和mongos绑定到 localhost。如果部署的成员在不同的主机上运行,或者希望远程 Client 端连接到部署,则必须指定--bind_ip
或net.bindIp。有关更多信息,请参见Localhost 绑定兼容性更改。
使用 TLS/SSL 证书和密钥设置 mongod 和 mongos
要在您的 MongoDB 部署中使用 TLS/SSL,请在mongod和mongos中包括以下运行时选项:
-
net.ssl.mode设置为
requireSSL
。此设置将每个服务器限制为仅使用 TLS/SSL 加密的连接。您也可以指定值allowSSL
或preferSSL
来设置在端口上使用混合 TLS/SSL 模式。有关详情,请参见net.ssl.mode。 -
PEMKeyfile
和包含 TLS/SSL 证书和密钥的.pem
文件。
考虑mongod的以下语法:
mongod --sslMode requireSSL --sslPEMKeyFile <pem> <additional options>
例如,给定位于/etc/ssl/mongodb.pem
的 TLS/SSL 证书,请使用以下命令将mongod配置为对所有连接使用 TLS/SSL 加密:
mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem <additional options>
Note
-
指定
<pem>
以及证书的完整路径名。 -
如果
<pem>
的私钥部分已加密,请指定密码。参见TLS/SSL 证书密码短语。
您也可以在configuration file中指定这些选项,如以下示例所示:
如果使用YAML 配置文件格式,则在文件中包括以下配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
要使用 TLS/SSL 连接到mongod和mongos实例,mongo shell 和 MongoDB 工具必须包含--ssl
选项。有关连接到使用 TLS/SSL 运行的mongod和mongos的更多信息,请参见Client 端的 TLS/SSL 配置。
See also
使用证书验证设置 mongod 和 mongos
要使用由证书颁发机构签名的 TLS/SSL 证书为 TLS/SSL 加密设置mongod或mongos,请在启动过程中包括以下运行时选项:
-
net.ssl.mode设置为
requireSSL
。此设置将每个服务器限制为仅使用 TLS/SSL 加密的连接。您也可以指定值allowSSL
或preferSSL
来设置在端口上使用混合 TLS/SSL 模式。有关详情,请参见net.ssl.mode。 -
PEMKeyfile
,其名称为.pem
文件的名称,其中包含已签名的 TLS/SSL 证书和密钥。 -
CAFile,其名称为
.pem
文件的名称,该文件包含来自证书颁发机构的根证书链。
考虑mongod的以下语法:
mongod --sslMode requireSSL --sslPEMKeyFile <pem> --sslCAFile <ca> <additional options>
例如,给定位于/etc/ssl/mongodb.pem
处的已签名 TLS/SSL 证书和位于/etc/ssl/ca.pem
处的证书颁发机构文件,可以为 TLS/SSL 加密配置mongod,如下所示:
mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem <additional options>
Note
-
使用完整路径名或相对路径名指定
<pem>
文件和<ca>
文件。 -
如果
<pem>
已加密,请指定密码。参见TLS/SSL 证书密码短语。
您也可以在configuration file中指定这些选项,如以下示例所示:
如果使用YAML 配置文件格式,则在文件中包括以下配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.pem
要使用 TLS/SSL 连接到mongod和mongos实例,mongo工具必须同时包含--ssl和--sslPEMKeyFile选项。有关连接到使用 TLS/SSL 运行的mongod和mongos的更多信息,请参见Client 端的 TLS/SSL 配置。
See also
阻止 Client 端的吊销证书
为了防止具有吊销证书的 Client 端连接,请包括sslCRLFile
以指定包含吊销证书的.pem
文件。
例如,以下具有 TLS/SSL 配置的mongod包括sslCRLFile
设置:
mongod --sslMode requireSSL --sslCRLFile /etc/ssl/ca-crl.pem --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem <additional options>
/etc/ssl/ca-crl.pem
中证书被吊销的 Client 端将无法连接到该mongod实例。
仅在 Client 出示证书时验证
在大多数情况下,确保 Client 端出示有效证书很重要。但是,如果您的 Client 端不能提供 Client 端证书,或者正在转换为使用证书颁发机构,则您可能只想从提供证书的 Client 端验证证书。
如果要绕过不提供证书的 Client 端的验证,请在mongod和mongos中包括allowConnectionsWithoutCertificates运行时选项。如果 Client 端不提供证书,则不会进行验证。这些连接尽管未经验证,但仍使用 TLS/SSL 加密。
例如,请考虑以下带有allowConnectionsWithoutCertificates设置的 TLS/SSL 配置的mongod:
mongod --sslMode requireSSL --sslAllowConnectionsWithoutCertificates --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem <additional options>
然后,Client 端可以使用选项--ssl和 否 证书或通过选项--ssl和 有效 证书进行连接。有关 Client 端的 TLS/SSL 连接的更多信息,请参见Client 端的 TLS/SSL 配置。
Note
如果 Client 端出示证书,则该证书必须是有效的证书。
所有连接(包括未提供证书的连接)均使用 TLS/SSL 加密。
Disallow Protocols
3.0.7 版中的新功能。
为防止 MongoDB 服务器接受使用特定协议的传入连接,请包含--sslDisabledProtocols
选项,或者使用configuration file和net.ssl.disabledProtocols设置。
例如,以下配置使用--sslDisabledProtocols
选项来防止mongod接受使用TLS1_0
或TLS1_1
的传入连接:
mongod --sslMode requireSSL --sslDisabledProtocols TLS1_0,TLS1_1 --sslPEMKeyFile /etc/ssl/mongodb.pem --sslCAFile /etc/ssl/ca.pem <additional options>
如果使用YAML 配置文件格式:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/ca.pem
disabledProtocols: TLS1_0,TLS1_1
有关更多信息,包括该选项可识别的协议,请参阅net.ssl.disabledProtocols或mongod和mongos的--sslDisabledProtocols
选项。
TLS/SSL 证书密码
PEMKeyfile
和ClusterFile
的 PEM 文件可能已加密。对于加密的 PEM 文件,您必须在启动时使用命令行或配置文件选项指定密码短语,或在出现提示时 Importing 密码短语。
要在命令行或配置文件中以明文形式指定密码,请使用PEMKeyPassword和/或clusterPassword选项。
要让 MongoDB 在mongod或mongos的开头提示 Importing 密码短语,并避免以明文形式指定密码短语,请省略PEMKeyPassword和/或clusterPassword选项。 MongoDB 将在必要时提示您 Importing 每个密码短语。
Important
以 FIPS 模式运行
Note
兼容 FIPS 的 TLS/SSL 仅在MongoDB Enterprise中可用。有关更多信息,请参见为 FIPS 配置 MongoDB。
有关更多详细信息,请参见为 FIPS 配置 MongoDB。