. Net Ошибка подключения к URI болта с Neo4jClient, но не с Neo4j.Driver. - PullRequest
0 голосов
/ 05 апреля 2020

Я подключался. Net Код ядра из контейнера Docker к базе данных Neo4j. Сначала я попытался использовать Neo4jClient, но столкнулся с проблемами с подключением http из контейнера docker. Затем я попробовал Neo4j.Driver напрямую с болтовым соединением, используя host. docker .internal к псевдониму localhost. Это работало нормально. Я переключился обратно на Neo4jClient с помощью болта (снова изнутри Docker), но с ошибкой. Спасибо за любую помощь.

Neo4j.Driver.V1.ServiceUnavailableException
  HResult=0x80131500
  Message=Connection with the server breaks due to SecurityException: Failed to establish encrypted connection with server bolt://host.docker.internal:7687/.
  Source=Neo4j.Driver

Обновление: после помощи Криса Скардона ниже. Я включил SSL для болта в соответствии с разделом Пример 11.2. Включить Bolt SSL. В соответствии с инструкциями здесь, в Neo4j

Приведенный ниже код с использованием Neo4j.Driver напрямую работает и обновляет БД с 12 организациями. Он запускается из контейнера. Net Core Docker и использует хост. docker .internal. Я ожидал бы, что это не будет работать без конфигурации шифрования. Но это так.

IDriver driver = GraphDatabase.Driver("bolt://host.docker.internal:7687", AuthTokens.Basic("neo4j", "xxxxx"));
IAsyncSession session = driver.AsyncSession(o => o.WithDatabase("neo4j"));

Этот код, использующий Neo4jClient, не работает. Я изначально запускал его в контейнере docker, как указано выше, и подумал, что это может быть Но все еще есть проблема без контейнера

IDriver driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic("neo4j", "xxxxx"), Config.Builder.WithEncryptionLevel(EncryptionLevel.Encrypted).ToConfig());
            var client = new BoltGraphClient(driver);

Исключения:

  1. Соединение с сервером разрывается из-за SecurityException: Не удалось установить sh зашифрованное соединение с сервером болтом : // локальный: 7687 /.
  2. IOException: аутентификация не удалась, потому что удаленная сторона закрыла транспортный поток.

Ничего не появляется в журналах Neo4j. У меня нет никакого специального c кода в. Net Базовом коде API для поддержки SSL и поиска в Google 2-го исключения, с множеством неверных результатов TLS. Так что я исследую это.

1 Ответ

2 голосов
/ 07 апреля 2020

Для версий 4.x Neo4j требуется установить Шифрование, на самом деле Neo4jClient не предоставляет простого способа сделать это, поэтому вам нужно передать экземпляр IDriver, например:

var driver = GraphDatabase.Driver("bolt://localhost:7687", AuthTokens.Basic("neo4j", "neo"), Config.Builder.WithEncryptionLevel(EncryptionLevel.None).ToConfig());
var client = new BoltGraphClient(driver);

РЕДАКТИРОВАТЬ

Я проверял это - и проблема на самом деле противоположна - вам нужно повернуть уровень шифрования на «Нет» - если вы на самом деле не настроить SSL-сертификат

...