Сертификат сервера Neo4j не является доверенным

Я только что настроил свой сервер Neo4j на виртуальной машине в Google Cloud, я использую версию Enterprise 4.1.1, и я закончил читать отличный пост (здесь) Дэвида Аллена о том, как получить сертификат с LetsEncrypt.

Все это сработало отлично, и теперь у меня есть полностью защищенный сервер Neo4j, к которому я могу получить доступ через браузер (MYDOMAIN.COM:7473/browser), используя свое имя хоста. Однако теперь у меня возникают проблемы с подключением моего приложения к серверу с помощью драйвера javascript.

Я получаю следующую ошибку:

Не удалось подключиться к серверу. Убедитесь, что ваша база данных прослушивает правильный хост и порт и что у вас есть совместимые настройки шифрования как на сервере Neo4j, так и в драйвере. Обратите внимание, что в Neo4j 4.0 настройки шифрования по умолчанию были изменены. Причина: сертификат сервера не является доверенным. Если вы доверяете базе данных, к которой подключаетесь, используйте TRUST_CUSTOM_CA_SIGNED_CERTIFICATES и добавьте сертификат подписи или сертификат сервера в список сертификатов, которым доверяет этот драйвер, используя neo4j.driver (.., {trustCertificates: ['path / to / certificate .crt ']}). Это мера безопасности для защиты от атак типа "злоумышленник посередине". Если вы просто пробуете Neo4j и не беспокоитесь о шифровании, просто отключите его, используя encrypted = ENCRYPTION_OFF в параметрах драйвера. Сокет ответил: ERR_TLS_CERT_ALTNAME_INVALID

Я прочитал документацию по драйверу (здесь) и я добавил настройки trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES" и trustedCertificates:[]. Я загрузил все сертификаты со своего сервера (cert.pem, chain.pem, fullchain.pem и privacy.pem) и связал их с настройками доверенных сертификатов.

К сожалению, я все еще получаю ту же ошибку. Для справки, вот как сейчас настроен мой драйвер:

// 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 и включил полное ведение журнала, но я не получаю больше информации, чем указано выше. Я просто не могу понять, что делаю не так - есть ли у кого-нибудь идеи?


person Sean    schedule 24.07.2020    source источник


Ответы (1)


Я нашел решение этой проблемы - посмотрел документацию (здесь) и обнаружил, что мне нужно обновить NEO4J_URI с bolt://SO.ME.IP.ADDRESS:7687 до neo4j://MYDOMAIN.COM:7687. Теперь я это сделал, все работает как положено.

person Sean    schedule 25.07.2020