You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Certbot证书配置Docker容器中MongoDB的SSL证书

MongoDB SSL证书配置解决方案

报错根因说明

你遇到的error:0909006C:PEM routines:get_name:no start line报错,核心原因是MongoDB要求的PEMKeyFile文件必须是私钥+完整证书链合并后的文件,无法直接使用Certbot默认生成的分离式证书文件。

具体配置步骤

步骤1:合并Certbot生成的证书

Certbot默认将域名证书存放在/etc/letsencrypt/live/你的数据库域名/目录下,执行以下命令合并所需文件到你挂载的./certs目录:

cat /etc/letsencrypt/live/你的数据库域名/privkey.pem /etc/letsencrypt/live/你的数据库域名/fullchain.pem > ./certs/mongo.pem

步骤2:修正证书文件权限

MongoDB对证书文件权限有严格要求,权限过高或所有者不正确都会导致读取失败:

# 限制文件仅所有者可读写
chmod 600 ./certs/mongo.pem
# 999为MongoDB官方镜像默认运行用户的UID,确保容器内可正常读取
chown 999:999 ./certs/mongo.pem

步骤3:修改MongoDB配置文件

编辑./mongo-config/mongo.conf,对应配置如下:

net:
  port: 27017
  bindIp: 0.0.0.0
  ssl:
    mode: requireSSL
    PEMKeyFile: /data/certs/mongo.pem

注:如果你使用的是MongoDB 4.2及以上版本,推荐使用新版tls配置项,写法如下,功能完全一致:

net:
  port: 27017
  bindIp: 0.0.0.0
  tls:
    mode: requireTLS
    certificateKeyFile: /data/certs/mongo.pem

步骤4:配置证书自动续期钩子

Certbot生成的证书有效期为3个月,我们可以配置续期后自动更新MongoDB证书,避免手动操作:

  1. 新建续期钩子脚本/etc/letsencrypt/renewal-hooks/post/update-mongo-cert.sh,内容如下:
#!/bin/bash
# 替换为你的数据库域名
MONGO_DOMAIN="db.example.com"
# 替换为你项目中certs目录的绝对路径
CERTS_PATH="/opt/mongo/certs"
# 替换为你项目中docker-compose.yml所在目录的绝对路径
COMPOSE_PATH="/opt/mongo"

# 合并新证书
cat /etc/letsencrypt/live/${MONGO_DOMAIN}/privkey.pem /etc/letsencrypt/live/${MONGO_DOMAIN}/fullchain.pem > ${CERTS_PATH}/mongo.pem
# 修正权限
chmod 600 ${CERTS_PATH}/mongo.pem
chown 999:999 ${CERTS_PATH}/mongo.pem
# 重启MongoDB容器加载新证书
cd ${COMPOSE_PATH}
docker-compose restart mongo
  1. 给脚本添加执行权限:
chmod +x /etc/letsencrypt/renewal-hooks/post/update-mongo-cert.sh

配置验证

启动MongoDB容器后,使用以下命令测试连接是否正常:

# 旧版MongoDB使用--ssl参数
mongo --host 你的数据库域名 --port 27017 --username exampleuser --password examplepassword --authenticationDatabase admin --ssl
# 新版MongoDB使用--tls参数
mongo --host 你的数据库域名 --port 27017 --username exampleuser --password examplepassword --authenticationDatabase admin --tls

能正常进入Mongo shell即为配置成功。

常见排查点

  • 确认合并证书时顺序正确:私钥在前,证书链在后,顺序颠倒会触发PEM格式错误
  • 不要直接复制Certbot live目录下的软链接到certs目录,容器内无法读取宿主的软链接指向的真实路径
  • 可进入容器执行cat /data/certs/mongo.pem确认文件内容正常,是否存在-----BEGIN PRIVATE KEY-----和-----BEGIN CERTIFICATE-----的标准开头行

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 17:15:05