我正在尝试在 Windows 上启用 TLS 来设置 Mongodb Community Edition v7.0.12。禁用 TLS 后一切正常,但当我启用 TLS 时,Mongodb 将无法启动。我的服务器证书驻留在 Windows 证书存储区的 Personal 文件夹下。该证书由受信任的根证书存储中的 CA 证书进行签名。证书很好,它们与其他应用程序一起工作得很好。
我的 Mongodb 配置文件包含此部分:
net:
tls:
mode: requireTLS
certificateSelector: thumbprint="d169030077bd7b5347cb1723d9382b1e00242d90"
由于某种原因,它抱怨指纹字符串不是十六进制字符串。我也使用了该主题,但没有效果:
net:
tls:
mode: requireTLS
certificateSelector: subject="serverhostname"
此时我正在挠头。有人有一个可行的例子吗?谢谢!
在检查了 Mongodb 源代码后我终于弄清楚了这一点。为了使 TLS 通信正常工作,您需要做好一些准备工作。
首先,必须指定指纹,不带引号字符,这在文档中并不明显。第二件事是将
allowConnectionsWithoutCertificates
添加到配置文件中,否则连接客户端需要随请求提供 CA 证书,这有点奇怪。
就我而言,配置 TLS 的有效配置文件如下所示:
net:
port: 27017
bindIp: 0.0.0.0
tls:
mode: requireTLS
certificateSelector: thumbprint=d169030077bd7b5347cb1723d9382b1e00242d90
allowConnectionsWithoutCertificates: true
Mongodb 对配置文件中的制表符敏感,因此请使用空格字符代替空格。
第四件事是启动 Mongodb 时需要在命令行中添加
tlsUseSystemCA=true
。我的命令行如下所示:
mongod.exe --config="C:\Program Files\MongoDB\Server\7.0\bin\mongod.cfg" --setParameter tlsUseSystemCA=true
您现在可以使用以下连接字符串连接到 Mongodb 数据库:
mongodb://<hostname>:27017/?tls=true