【问题标题】:Neo4j Server certificate is not trustedNeo4j 服务器证书不受信任
【发布时间】:2020-11-14 19:25:04
【问题描述】:

我刚刚在 Google Cloud 上的虚拟机上设置了我的 Neo4j 服务器,我使用的是企业版 4.1.1,并且我已经完成了 David Allen 关于如何获取的精彩帖子 (here)带有 LetsEncrypt 的证书。

这一切都运行良好,我现在拥有一个完全安全的 Neo4j 服务器,我可以使用我的主机名通过浏览器 (MYDOMAIN.COM:7473/browser) 访问它。但是,我现在在让我的应用程序使用 javascript 驱动程序连接到服务器时遇到问题。

我不断收到以下错误:

连接服务器失败。请确保您的数据库是 在正确的主机和端口上侦听并且您兼容 Neo4j 服务器和驱动程序上的加密设置。请注意, Neo4j 4.0 中的默认加密设置已更改。原因:服务器 证书不受信任。如果你信任你的数据库 连接到,使用 TRUST_CUSTOM_CA_SIGNED_CERTIFICATES 并添加 签名证书或服务器证书,添加到列表中 此驱动程序信任的证书使用 neo4j.driver(.., { 可信证书:['path/to/certificate.crt']})。这是一个安全 防止中间人攻击的措施。如果你只是 尝试 Neo4j 并且不关心加密,只是 在驱动程序选项中使用 encrypted="ENCRYPTION_OFF" 禁用它。 套接字响应:ERR_TLS_CERT_ALTNAME_INVALID

我已阅读驱动程序文档 (here) 并添加了 trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES"trustedCertificates:[] 设置。我从我的服务器下载了所有证书(cert.pem、chain.pem、fullchain.pem 和 privacy.pem)并在trustedCertificates 设置中链接到它们。

不幸的是,我仍然遇到同样的错误。作为参考,这是我的驱动程序当前的配置方式:

// This module can be used to serve the GraphQL endpoint
// as a lambda function

const { ApolloServer } = require('apollo-server-lambda')
const { makeAugmentedSchema } = require('neo4j-graphql-js')
const neo4j = require('neo4j-driver')

// This module is copied during the build step
// Be sure to run `npm run build`
const { typeDefs } = require('./graphql-schema')

const driver = neo4j.driver(
  process.env.NEO4J_URI,
  neo4j.auth.basic(
    process.env.NEO4J_USER,
    process.env.NEO4J_PASSWORD 
  ),
  {
    encrypted: process.env.NEO4J_ENCRYPTED ? 'ENCRYPTION_ON' : 'ENCRYPTION_OFF',
    trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES",
    trustedCertificates: ['../../certificates/cert.pem', '../../certificates/chain.pem', '../../certificates/fullchain.pem', '../../certificates/privkey.pem'],
    logging: {
      level: 'debug',
      logger: (level, message) => console.log(level + ' ' + message)
    },
  }
)

const server = new ApolloServer({
  schema: makeAugmentedSchema({ typeDefs }),
  context: { driver, neo4jDatabase: process.env.NEO4J_DATABASE },
  introspection: true,
  playground: true,
})

exports.handler = server.createHandler()

我正在使用最新版本的驱动程序 v2.14.4 并启用了完整日志记录,但我没有得到比上述更多的信息。我就是想不通我做错了什么——有人有什么想法吗?

【问题讨论】:

    标签: encryption neo4j certificate lets-encrypt neo4j-driver


    【解决方案1】:

    我找到了解决此问题的方法 - 我查看了文档 (here),发现我需要将我的 NEO4J_URIbolt://SO.ME.IP.ADDRESS:7687 更新为 neo4j://MYDOMAIN.COM:7687。现在我已经完成了这一切都按预期工作。

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多