首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TLS和自签名证书的Neo4j螺栓:证书验证失败

使用TLS和自签名证书的Neo4j螺栓:证书验证失败
EN

Stack Overflow用户
提问于 2018-07-15 14:33:38
回答 3查看 1.7K关注 0票数 4

我正在尝试为CentOS7上的螺栓通信设置启用了TLS的Neo4j。服务器当前作为系统服务安装。我已经生成了一个自签名证书和密钥:

代码语言:javascript
复制
sudo openssl genrsa -des3 -out /var/ssl/ca.key 4096``
sudo openssl req -new -x509 -days 365 -key /var/ssl/ca.key -out /var/ssl/ca.crt
sudo openssl genrsa -des3 -out /var/ssl/neo4j/serv.key 1024``
sudo openssl req -new -key /var/ssl/neo4j/serv.key -out /var/ssl/neo4j/server.csr
sudo openssl x509 -req -days 365 -in /var/ssl/neo4j/server.csr -CA /var/ssl/ca.crt -CAkey /var/ssl/ca.key -set_serial 01 -out /var/ssl/neo4j/server.crt
sudo openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in /var/ssl/neo4j/serv.key -out /var/ssl/neo4j/server.key

然后,我将server.crt文件复制到/var/ssl/trusted/ne4j(根据Neo4j文档),并将以下行添加到我的neo4j.conf中:

代码语言:javascript
复制
dbms.ssl.policy.default.trusted_dir=/var/ssl/trusted/neo4j
dbms.ssl.policy.default.public_certificate=/var/ssl/neo4j/server.crt
dbms.ssl.policy.default.private_key=/var/ssl/neo4j/server.key
dbms.ssl.policy.default.base_directory=/var/ssl/neo4j/
dbms.connector.bolt.enabled=true
dbms.connector.bolt.tls_level=REQUIRED

最后,我将ca.crt文件添加到我的系统可信证书链中:

代码语言:javascript
复制
sudo cp /var/ssl/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust

并重新启动了服务器,服务器正常启动。但是,在尝试使用Python客户端连接到服务器时,我看到了以下错误:

代码语言:javascript
复制
neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'

产生错误的Python代码:

代码语言:javascript
复制
from neo4j.v1 import GraphDatabase
from neo4j.v1 import TRUST_SYSTEM_CA_SIGNED_CERTIFICATES
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "neo4j"), trust=TRUST_SYSTEM_CA_SIGNED_CERTIFICATES)

CA证书应该添加到我的系统信任链中,其他应用程序似乎能够使用它,但是Neo4j客户端似乎无法使用它来验证从服务器返回的证书。Neo4j是否仅将此CA用于HTTPS端点,而不是TLS端点?如果是,我如何才能将Bolt端点的CA证书放入系统的信任链?

EN

回答 3

Stack Overflow用户

发布于 2018-07-16 01:12:01

显然,Neo4j会生成单独的证书,如果它们不存在于螺栓连接,并且它们与HTTPS端点证书配置是分开的。

我的证书被生成到名为'neo4j.cert‘和’ne4j.key‘的/var/lib/ne4j/ certificates /中。当我在启动Neo4j服务器之前将由我信任的CA签名的服务器证书和密钥复制到这些文件夹中时,它使用它们来保护Bolt端点,并且我能够连接到受保护的Python客户端。

票数 0
EN

Stack Overflow用户

发布于 2020-03-03 21:24:45

我也遇到过类似的问题,对我来说,设置encrypted=False解决了这个问题:

driver = GraphDatabase.driver("bolt://localhost", auth=("neo4j", ""), encrypted=False)

来源:https://github.com/neo4j/neo4j/issues/12392#issuecomment-583899597

票数 0
EN

Stack Overflow用户

发布于 2021-07-28 23:00:12

从PythonVersion4开始,Neo4j驱动程序就实现了new set of connection protocols

带加密的

  • neo4j+s://:证书(仅接受由证书颁发机构签名的证书)、带加密的完整证书checks.
  • neo4j+ssc://:Neo4jDriver (接受不带加密的自签名
    • neo4j+s://:Neo4jDriver。

因此,您可以使用以下代码来允许自签名证书。和往常一样,注意这是不安全的,所以不要在生产中使用!

代码语言:javascript
复制
uri = "neo4j+scc://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "neo4j"))

您也可以选择对bolt执行相同的操作,但neo4j是首选的,因为它will work on both一个集群(具有路由)和一个独立的单实例服务器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51345894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档