MongoDB无法启动,提示SSL证书无效但证书未过期问题求助
问题场景
服务器环境:Ubuntu 18.04.4 LTS、MongoDB v4.2.21
MongoDB启动失败,日志提示SSL证书过期或未生效,但通过certbot查询证书仍在有效期内,所有mongod服务停止,管理网站无法访问,服务无法重启。
报错日志
2022-07-30T05:18:05.262+0000 I CONTROL [main] ***** SERVER RESTARTED *****
2022-07-30T05:18:05.344+0000 F NETWORK [main] The provided SSL certificate is expired or not yet valid.
2022-07-30T05:18:05.344+0000 F - [main] Fatal Assertion 28652 at src/mongo/util/net/ssl_manager_openssl.cpp 1182
2022-07-30T05:18:05.344+0000 F - [main]***aborting after fassert() failure
排查与解决步骤
检查MongoDB配置的证书路径
打开MongoDB配置文件(默认路径/etc/mongod.conf),定位net.ssl段,确认PEMKeyFile、CAFile等配置的路径是否指向当前有效的certbot证书,而非旧的过期文件。
快速查看命令:grep -A 10 "net.ssl" /etc/mongod.conf直接验证证书文件的有效性
不要依赖certbot的查询结果,直接检查MongoDB实际使用的证书文件:- 查看证书有效期:
openssl x509 -in /path/to/your/mongodb-cert.pem -noout -dates - 验证证书链完整性:
openssl verify -CAfile /path/to/your/ca-cert.pem /path/to/your/mongodb-cert.pem
- 查看证书有效期:
核对服务器系统时间
MongoDB依赖系统时间判断证书有效期,若服务器时间与实际时间偏差过大(比如超前导致证书被判定过期,或滞后导致证书未生效),会触发该错误。- 查看当前系统时间:
date - 同步系统时间(Ubuntu环境):
sudo apt update && sudo apt install -y ntp sudo systemctl restart ntp
- 查看当前系统时间:
检查证书文件权限
MongoDB运行用户(默认是mongodb)必须拥有证书文件的读取权限,否则无法正确加载证书,可能引发误判。- 查看权限:
ls -l /path/to/your/mongodb-cert.pem - 调整权限:
sudo chown mongodb:mongodb /path/to/your/mongodb-cert.pem sudo chmod 600 /path/to/your/mongodb-cert.pem
- 查看权限:
强制重新生成证书并替换
若上述步骤均无问题,可能证书文件存在损坏或链不完整,强制重新生成证书:sudo certbot renew --force-renewal生成完成后,将新证书复制到MongoDB配置指定的路径,确保权限正确后重启服务:
sudo systemctl restart mongod
内容的提问来源于stack exchange,提问作者VTCE

