mongodb - MongoDB 的 LetsEncrypt SSL 证书验证失败

标签 mongodb ssl ubuntu-16.04 lets-encrypt certbot

一点背景...我的证书是由 Certbot 颁发的 LetsEncrypt.org SSL 证书。我正在运行 Nginx 1.12.2,并且我能够使用 https://正确访问我的网站,因此我相信该部分配置正确。我的 Web 服务器运行的是 Ubuntu 16.04 和 MongoDB 3.6.3。

我已经尝试了许多配置,虽然我可以使用 Compass(官方 MongoDB GUI)在没有 SSL 选项的情况下很好地连接到我的 MongoDB,但尝试使用 SSL 连接会导致 无法在提供的主机和端口上连接到 MongoDB 错误信息。运行mongo -ssl --sslPEMKeyFile /etc/ssl/mongo.pem在我的服务器上导致以下错误:

MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017
2018-06-12T16:51:10.756+0000 E NETWORK  [thread1] SSL peer certificate validation failed: unable to get local issuer certificate
2018-06-12T16:51:10.757+0000 E QUERY    [thread1] Error: socket exception [CONNECT_ERROR] for SSL peer certificate validation failed: unable to get local issuer certificate :
connect@src/mongo/shell/mongo.js:251:13
@(connect):1:6
exception: connect failed

我的/var/log/mongodb/mongod.log 显示与上述错误相对应的以下内容:
2018-06-12T16:51:10.755+0000 I NETWORK  [listener] connection accepted from 127.0.0.1:47792 #8 (2 connections now open)
2018-06-12T16:51:10.757+0000 I NETWORK  [conn8] end connection 127.0.0.1:47792 (1 connection now open)

我的/etc/mongod.conf 包含以下内容(我已经注释掉 CAFile 参数,因为我已经读过这是可选的 [来源:https://stackoverflow.com/a/33926129/2969615];请注意,我在运行 mongo.pem: OK 时得到 openssl verify -CAfile /etc/ca.pem /etc/mongo.pem命令,所以我相信 mongo.pem 已正确设置):
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
  ssl:
    mode: allowSSL
    PEMKeyFile: /etc/ssl/mongo.pem
    # CAFile: /etc/ssl/ca.pem

我通过引用以下内容创建了我的 mongo.pem 文件:https://serverfault.com/a/878457 ...我已经尝试了说明中的证书以及 https://letsencrypt.org/certificates/ 上提供的两个 X3 中间证书无济于事。

任何帮助将不胜感激。

最佳答案

聚会很晚,但以防万一它确实对某人有所帮助。我在 docker 中运行 mongodb,使用来自 mongo 的官方图像和来自另一个 docker 图像的 compass。
对于我使用的服务器:

docker run -it --name data.domain.com --network docker_network -v /path/to/ssl:/ssl:ro -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=pass mongo --tlsMode requireTLS --tlsCertificateKeyFile /ssl/fullchain-key.pem --tlsCAFile /etc/ssl/certs/ISRG_Root_X1.pem 
  • fullchain-key.pem 是 'cat fullchain.pem privkey.pem > fullchain-key.pem'
  • docker 名称或服务器名称必须与证书名称匹配

  • 对于指南针,我使用:
    enter image description here
    enter image description here
    服务器也有自己的证书和指南针。

    关于mongodb - MongoDB 的 LetsEncrypt SSL 证书验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822387/

    相关文章:

    mongodb - Mongolab 连接错误

    node.js - 从nodejs插入日期值到mongodb

    gocql 中的 SSL 选项

    hadoop - 如何在另一个ubuntu中写入外部HDFS?

    linux - (清理中)在全局销毁期间无法在未定义的值 Object/InsideOut.pm 行 1953 上调用方法 "FETCH"

    mongodb - Mongoid:检查现有文档/嵌入文档

    java - Java中聚合$cond if条件实现

    wordpress - 阻止通过与混合内容的安全连接阻止对地理定位的访问

    ssl - 如何知道 TLS 版本安装以及如何升级到 TLS v1.3

    python-3.x - Pycharm安装Python打包工具失败