我刚刚在 Google Cloud 上的 VM 上设置了我的 Neo4j 服务器,我使用的是 Enterprise 版本 4.1.1,并且我已经完成了 David Allen 关于如何使用 LetsEncrypt 获得证书的精彩帖子(此处)。
这一切都运行良好,我现在拥有一个完全安全的 Neo4j 服务器,我可以MYDOMAIN.COM:7473/browser
使用我的主机名通过浏览器 ( ) 访问它。但是,我现在在让我的应用程序使用 javascript 驱动程序连接到服务器时遇到问题。
我不断收到以下错误:
无法连接服务器。请确保您的数据库正在侦听正确的主机和端口,并且您在 Neo4j 服务器和驱动程序上都有兼容的加密设置。请注意,Neo4j 4.0 中的默认加密设置已更改。原因:服务器证书不受信任。如果您信任要连接的数据库,请使用 TRUST_CUSTOM_CA_SIGNED_CERTIFICATES 并将签名证书或服务器证书添加到此驱动程序信任的证书列表中,使用 neo4j.driver(.., {trustedCertificates:['path/to/certificate .crt']})。这是一种防止中间人攻击的安全措施。如果您只是尝试 Neo4j 并且不关心加密,只需在驱动程序选项中使用 encrypted="ENCRYPTION_OFF" 禁用它。套接字回应:
我已通读驱动程序文档(此处)并添加了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 并启用了完整日志记录,但我没有得到比上述更多的信息。我只是无法弄清楚我做错了什么 - 有没有人有任何想法?