【问题标题】:MongoError: self signed certificate in certificate chainMongoError:证书链中的自签名证书
【发布时间】:2022-02-24 09:06:35
【问题描述】:

我正在尝试将我的节点服务器与启用 ssl 选项的 mongodb 连接。

mongod.conf

storage:
  dbPath: /var/lib/mongodb
  journal:
  enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# network interfaces
net:
  port: XX
  bindIp: 127.0.0.1,XXX.XX.XX.XXX
  ssl:
    mode: requireSSL
    PEMKeyFile: /etc/ssl/PEMKEYFILE.pem
    PEMKeyPassword: "PASSWORDFORPEM"
    CAFile: /etc/ssl/CAFILE.pem

security:
  authorization: enabled

replication:
  oplogSizeMB: 1024
  replSetName: "REPLSET"

节点服务器配置文件

MONGO_URL: '<pathToMongoDb>/<db>',
        MONGO_REPLICA_SET_READ_PREFERENCE: 'nearest',
        MONGO_REPLICA_SET: {
            ssl: true,
            sslValidate: true,
            sslKey: fs.readFileSync('/etc/ssl/mongodb.pem'),
            sslCert: fs.readFileSync('/etc/ssl/mongodb.pem'),
            sslCa: fs.readFileSync('/etc/ssl/CAFILE.pem'),
            replicaSet: 'REPLSET',
            auto_reconnect: false,
            poolSize: 24,
            socketOptions: {
                keepAlive: 1000,
                connectTimeoutMS: 30000
            }
        },
        MONGO_SERVER: {
            ssl: true,
            sslValidate: false,
            checkServerIdentity: false,
            sslKey: fs.readFileSync('/etc/ssl/mongodb.pem'),
            sslCert: fs.readFileSync('/etc/ssl/mongodb.pem'),
            sslCA: fs.readFileSync('/etc/ssl/CAFILE.pem'),
            poolSize: 24,
            socketOptions: { keepAlive: 300000, connectTimeoutMS: 30000 },
            reconnectTries: Number.MAX_VALUE,
            reconnectInterval: 1000
        },
        MONGO_CHECK_SERVER_IDENTITY: false,

猫鼬文件

mongoose.connect(config.MONGO_URL,{
  db: {
      native_parser: true,
      readPreference: config.MONGO_REPLICA_SET_READ_PREFERENCE
  },
  server: config.MONGO_SERVER,
  replset: config.MONGO_REPLICA_SET,
  user: config.MONGO_USER,
  pass: config.MONGO_PASSWORD,
  auth: {
      authdb: config.MONGO_AUTHDB
  }

})

我已经创建了 CA 证书和签名证书,但节点服务器返回错误:MongoError: failed to connect to server [XX.XXX.XXX.XX:port] on first connect MongoError: self signed certificate in certificate chain 我可以使用 shell 使用以下命令连接到 mongo

mongo XX.XX.XX.XXX:XX/&lt;db&gt; -u &lt;user&gt; -p &lt;pass&gt; --authenticationDatabase=admin --ssl --sslPEMKeyFile=/etc/ssl/PEMKEYFILE.pem --sslCAFile /etc/ssl/CAFILE.pem --sslAllowInvalidHostnames

请建议我哪里出错了。谢谢

【问题讨论】:

  • 这与客户端无关。这是一个服务器配置问题,因此与 StackOverflow 无关。请改用dba.stackexchange.com 询问。
  • 我无法通过节点应用程序连接并且能够通过shell连接,这意味着其中缺少一些东西。如果您有任何想法,请回答我最近两天想知道的问题。
  • 这是服务器问题。请在正确的网站上发布服务器问题,有人会在那里为您提供帮助。
  • 张贴在那里.. 感谢您的参考

标签: node.js mongodb ssl


【解决方案1】:

当您拥有自签名 CA 时会发生此特定错误。

使用 mongo 3.3.4 驱动程序为我连接

var userName = encodeURIComponent("emailAddress=myemail@example.com,CN=notsameasca,OU=notsameasca,O=my.fqdn.com,L=HomeCity,ST=HomeState,C=XX");
const MongoDBURI = `mongodb://${userName}@dev.vm:27017?authMechanism=MONGODB-X509&tls=true`;


MongoClient.connect(url,{
        tlsAllowInvalidHostnames: true,
        tlsAllowInvalidCertificates: true,
        tlsCertificateKeyFile: "./ssl/keyandcert.pem",
      })

从命令行连接到服务器时也会发生这种情况,除非您使用--tlsAllowInvalidCertificates 开关。

mongo -port 27017 --tls --tlsCertificateKeyFile mongoadmin.pem --tlsAllowInvalidCertificates

您需要在客户端连接中指定--tlsAllowInvalidCertificates

这一切都很难做对,祝你好运……你会需要它的。

【讨论】:

    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2015-05-23
    • 2019-12-11
    • 1970-01-01
    • 2022-07-07
    • 2018-11-16
    • 2021-05-20
    • 2021-12-06
    相关资源
    最近更新 更多