Mongodb连接尝试失败:SSLHandshakeFailed:SSL对等证书验证失败:自签名证书
我在Ubuntu16.04.5LTS服务器上建立了一个具有SSL安全性的mongoDB数据库,我已经使用它几个月了。为了在mongo上设置SSL,我遵循了medium.com上Rajan Maharjan的教程。在短时间不使用服务器后返回服务器时,我收到以下错误消息:Mongodb连接尝试失败:SSLHandshakeFailed:SSL对等证书验证失败:自签名证书,mongodb,ssl,openssl,ubuntu-16.04,Mongodb,Ssl,Openssl,Ubuntu 16.04,我在Ubuntu16.04.5LTS服务器上建立了一个具有SSL安全性的mongoDB数据库,我已经使用它几个月了。为了在mongo上设置SSL,我遵循了medium.com上Rajan Maharjan的教程。在短时间不使用服务器后返回服务器时,我收到以下错误消息: SSL对等证书验证失败:证书已过期 查看mongo日志,我发现: [PeriodicTaskRunner]服务器证书现在无效。它于2018-11-10T08:10:11.000Z到期 因此,我使用rootCA.key文件重新生成并
SSL对等证书验证失败:证书已过期
查看mongo日志,我发现:
[PeriodicTaskRunner]服务器证书现在无效。它于2018-11-10T08:10:11.000Z到期
因此,我使用rootCA.key文件重新生成并重新签名了所有证书,步骤与第一次创建证书时相同。我重新启动mongod时:
service mongod重启
现在出现了“自签名证书”错误:
我的连接字符串如下所示:
mongo--ssl--sslCAFile/PATH/TO/rootCA.pem--sslPEMKeyFile/PATH/TO/mongodb.pem--主机IP:端口
我没有找到任何关于mongoDB证书重新签名的资源。任何帮助都将不胜感激
编辑
/etc/mongod.conf:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: PORT
bindIp: IP
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/rootCA.pem
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
security:
authorization: "enabled"
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp:
我通过以下步骤(出于某种原因,这些步骤以前不起作用)使它再次工作:
- 从
/etc/ssl/
- 使用以下命令重新生成证书:
- openssl genrsa-out mongodb.key 2048
- openssl请求-新建-key mongodb.key-out mongodb.csr
- 字段中的服务器地址
Common Name(例如,您的姓名)[]
- openssl x509-req-in mongodb.csr-CA rootCA.pem-CAkey/PATH/TO/rootCA.key-CAcreateserial-out mongodb.crt-days 500-sha256
- cat mongodb.key mongodb.crt>mongodb.pem
- chmod 666 mongodb.pem
- 服务mongod重启
- cat/var/log/mongodb/mongod.log(检查状态)
以及发射mongo炮弹
- mongo--ssl--sslCAFile/PATH/TO/rootCA.pem--sslPEMKeyFile/PATH/TO/mongodb.pem--主机IP:端口
感谢@AniketMaithani尝试帮助我解决此问题。您使用的是正确的SSLCA文件吗?是不是应该是/PATH/TO/abc.crt
?@AniketMaithani根据您的建议,我尝试使用.crt,我得到错误:尝试在主机上运行命令“isMaster”时出现网络错误并且SSL对等证书验证失败:日志中的自签名证书。我的问题中的连接字符串与我以前使用的连接字符串相同,它以前也可以工作。在mongo连接字符串中添加--sslAllowInvalidCertificates
选项会产生以下错误消息:[js]错误:尝试在主机上运行命令“isMaster”时出现网络错误,并且SSL对等证书验证失败:日志中的自签名证书
。Hey@Nicolas您可以在此处发布/etc/mongod.conf文件吗?同时,尝试使用以下命令:Hi@AniketMaithani我编辑了我的问题以添加.conf文件。我尝试了您的解决方案(并注释掉了.conf文件中的rootCA.pem行),但是使用了mongod--sslMode requireSSL--sslPEMKeyFile/etc/ssl/mongodb.pem
我在initAndListen中得到了异常:不存在路径:未找到数据目录/Data/db.,终止并在重新启动服务时,在日志中,我发现以下错误警告:由于未提供CA文件,因此无法执行SSL证书验证
hello Nicolas Gaborel。在哪里可以找到本地mongodb上的rootCA.key?@GayathriB您可以使用openssl生成自己的密钥,本教程非常好:Hiii Nicolas Gaborel。我已经按照这个链接,我能够连接到服务器。但是这个过程只是为了测试,对吗?为了连接到服务器,我们应该向客户端提供server.pem。这里有机会加密server.pem。那么,是否有其他方法可以使用SSL证书连接MongoDB服务器?@GayathriB我在内部使用了此SSL证书,而不是用于公共web连接。我不确定这种情况下的最佳实践是什么,我认为您应该查看一些web安全教程,或者只在服务器端处理DB。
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
# network interfaces
net:
port: PORT
bindIp: IP
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
CAFile: /etc/ssl/rootCA.pem
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
#security:
security:
authorization: "enabled"
#operationProfiling:
#replication:
#sharding:
## Enterprise-Only Options:
#auditLog:
#snmp: