Mongodb连接尝试失败:SSLHandshakeFailed:SSL对等证书验证失败:自签名证书

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文件重新生成并

我在Ubuntu16.04.5LTS服务器上建立了一个具有SSL安全性的mongoDB数据库,我已经使用它几个月了。为了在mongo上设置SSL,我遵循了medium.com上Rajan Maharjan的教程。在短时间不使用服务器后返回服务器时,我收到以下错误消息:

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: