【问题标题】:meteor connect to remote mongodb error self signed certificate流星连接到远程mongodb错误自签名证书
【发布时间】:2020-08-25 15:40:16
【问题描述】:

我想将我的流星应用程序连接到 scalegrid 中的 mongodb 云。

MONGO_URL=mongodb://admin:PASSWORD@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true meteor run

但出现这样的错误:

W20200510-10:53:22.340(7)? (STDERR) MongoNetworkError: failed to connect to server [sg-brain-77777.servers.mongodirector.com:27017] on first connect [Error: self signed certificate
W20200510-10:53:22.340(7)? (STDERR)     at TLSSocket.onConnectSecure (_tls_wrap.js:1473:34)
W20200510-10:53:22.340(7)? (STDERR)     at TLSSocket.emit (events.js:311:20)
W20200510-10:53:22.340(7)? (STDERR)     at TLSSocket.EventEmitter.emit (domain.js:482:12)
W20200510-10:53:22.340(7)? (STDERR)     at TLSSocket._finishInit (_tls_wrap.js:916:8)
W20200510-10:53:22.340(7)? (STDERR)     at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:686:12) {
W20200510-10:53:22.340(7)? (STDERR)   name: 'MongoNetworkError',
W20200510-10:53:22.341(7)? (STDERR)   [Symbol(mongoErrorContextSymbol)]: {}
W20200510-10:53:22.341(7)? (STDERR) }]

添加后发生错误 import '../imports/api/posts'; in main.js

---- 来自流星论坛编辑

我在 scalegrid 中有 mongodb 数据库集群,但我无法像这样连接到它:

MONGO_URL=mongodb://admin:password@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true meteor run

我尝试在终端中使用简单的 mongo 连接

mongo mongodb://admin:password@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true

并且仍然无法连接并出现相同的错误: SSL peer certificate validation failed: self signed certificate

我试着把它变成这样:

mongo mongodb://admin:password@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true --ssl --sslCAFile ./.crt

它的工作原理!!!

现在的问题,我不能像这样在MONGO_URL 中添加--ssl --sslCAFile ./.crt,因为它会出错:

MONGO_URL=mongodb://admin:password@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true --ssl --sslCAFile ./.crt meteor run

如何将 ssl 证书添加到 mongo url?


我尝试过的新更新:

MONGO_URL=mongodb://admin:password@SG-Brain-77777.servers.mongodirector.com:27017/admin?ssl=true,ssl_ca_certs=./.crt meteor run

并得到错误:

MongoNetworkError: failed to connect to server [sg-brain-77777.servers.mongodirector.com:27017] on first connect [MongoNetworkError: connection 0 to sg-brain-77777.servers.mongodirector.com:27017 closed

【问题讨论】:

  • 您的服务器是否使用自签名证书?
  • 嗨@Jankapunkt 我更新了这个案例,希望它可以帮助解决

标签: mongodb meteor


【解决方案1】:

在连接 URI 字符串中指定 TLS/SSL 选项的正确方法与为 mongo shell 指定的方法不同。

如果你想在连接字符串本身上指定它,你有两个选择。

  1. 您可以在连接字符串中使用tlsCAFile 选项。见-https://docs.mongodb.com/manual/reference/connection-string/#urioption.tlsCAFile 这将帮助您指定 CA 证书文件的文件路径。

  2. 另一个选项是使用tlsAllowInvalidCertificates。请参阅 - https://docs.mongodb.com/manual/reference/connection-string/#urioption.tlsAllowInvalidHostnames 如果将其设置为 true,那么您根本不需要指定 CA 证书文件。

请注意,这两个选项仅适用于 MongoDB 4.2 及更高版本。另外,请阅读有关tlsAllowInvalidCertificates 的文档警告。

【讨论】:

  • 感谢您的回复,但在meteor mongo_url中效果不佳
  • 你看过关于 mongo_url 的流星文档环境吗?
  • 不幸的是:(
【解决方案2】:

解决方案:

你需要specify the MongoDB SSL CA Certificate in Meteor settings

分步指南:

  1. 登录 Scalegrid 并为您的 Meteor 应用选择集群。

  2. 滚动到底部,然后单击Get SSL CA Cert

  3. 将文本复制到新文件private/scalegrid-cert.pem

注意:将private/scalegrid-cert.pem 提交到您的仓库是安全的 因为它包含一个公钥。请记住一些.pem 文件 include private keys 并且永远不应该添加到 repo 中。

  1. 将以下内容添加到您的 Meteor 设置环境变量中
  "packages": {
    "mongo": {
      "options": {
        "tls": true,
        "tlsCAFileAsset": "scalegrid-cert.pem"
      }
    }
  }

注意:它是"tlsCAFileAsset": "scalegrid-cert.pem"而不是"tlsCAFileAsset": "private/scalegrid-cert.pem"。请参阅the docs 了解原因。

【讨论】:

  • 谢谢!这对我连接到 IBM Cloud Mongo 很有用。
  • 环境中的 packages 部分仅适用于 Meteor 1.10+。如果您使用的是 Meteor 的早期版本(使用 1.7 测试),您可以使用 '&sslCAFile=./private/scalegrid-cert.pem' 在 URL 字符串中指定证书。以与描述相同的方式上传文件。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多