0

我一直在将 Docker 容器中的 .Net Core 代码连接到 Neo4j DB。我首先尝试使用 Neo4jClient,但遇到了 docker 容器外的 http 连接问题。然后,我使用 host.docker.internal 到别名 localhost 直接使用螺栓连接尝试了 Neo4j.Driver。这工作得很好。我用bolt(再次从Docker内部)换回了Neo4jClient,但它失败了。谢谢你的帮助。

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 为螺栓打开了 ssl。启用螺栓 SSL。 按照 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,与服务器的连接中断:无法与服务器 bolt://localhost:7687/ 建立加密连接。
  2. IOException:身份验证失败,因为远程方已关闭传输流。

Neo4j 日志中没有出现任何内容。我在支持 SSL 的 .Net Core API 代码中没有任何特定代码,并且谷歌搜索第二个异常会返回很多不正确的 TLS 结果。所以我正在探索。

4

1 回答 1

4

Neo4j的4.x版本需要设置 Encryption,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 证书设置

于 2020-04-07T09:30:07.537 回答