.Net 与 Bolt URI 的连接因 Neo4jClient 而失败,但没有 Neo4j.Driver

.Net Connection to Bolt URI failing with Neo4jClient but not Neo4j.Driver

我一直在将 Docker 容器中的 .Net Core 代码连接到 Neo4j 数据库。我首先尝试使用 Neo4jClient,但 运行 遇到 docker 容器外的 http 连接问题。然后,我使用 host.docker.internal 直接通过螺栓连接尝试了 Neo4j.Driver 以别名本地主机。这很好用。我用 bolt 换回 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

更新: 在下面的 Chris Skardon 的帮助下。我按照示例 11.2 部分为 bolt 打开了 ssl。启用螺栓 SSL。 As per instructions here at Neo4j

下面使用 Neo4j.Driver 的代码直接运行并更新包含 12 个组织的数据库。 它 运行 来自 .Net Core Docker 容器并使用 host.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 而中断:失败 与服务器建立加密连接 螺栓://本地主机:7687/。'
  2. IOException:身份验证失败,因为 对方关闭了t运行运动流。

Neo4j 日志中未显示任何内容。我在 .Net Core API 代码中没有任何特定代码来支持 SSL 和谷歌搜索第二个异常返回大量不正确的 TLS 结果。所以我正在探索。

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);

编辑

我一直在测试这个——问题实际上是相反的——你需要把加密级别变成 'None'——除非你真的有一个 SSL 证书设置