python - 带有 TLS 和自签名证书的 Neo4j Bolt:证书验证失败
问题描述
我正在尝试为 CentOS7 上的 Bolt 通信设置启用了 TLS 的 Neo4j。服务器当前安装为系统服务。我已经生成了一个自签名证书和密钥:
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/neo4j(根据 Neo4j 文档)并将以下行添加到我的 neo4j.conf 中:
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 文件添加到我的系统可信证书链中:
sudo cp /var/ssl/ca.crt /etc/pki/ca-trust/source/anchors/
sudo update-ca-trust
并重新启动服务器,该服务器正常运行。但是,在尝试使用 Python 客户端连接到服务器时,我看到以下错误:
neo4j.exceptions.SecurityError: Failed to establish secure connection to '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'
产生错误的Python代码:
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 证书放入我系统的信任链中?
解决方案
我遇到了类似的问题,对我来说设置encrypted=False
成功了:
driver = GraphDatabase.driver("bolt://localhost", auth=("neo4j", ""), encrypted=False)
来源: https ://github.com/neo4j/neo4j/issues/12392#issuecomment-583899597
推荐阅读
- python - 烧瓶登录问题
- node.js - 我只能使用 .require() 来要求一个模块 - 有替代方案吗?
- python - 在 Numba 中嵌套类
- git - 在子模块中转换文件夹后,“以下未跟踪的工作树文件将被覆盖”
- owlready - 如果使用不同的命名空间,OWLREADY 2 无法加载本体
- vba - VBA Web Scraping- 抓取“hrefs”列表
- sql - 如何在游标内的sql过程中保存由“group by”子句生成的多个值?
- arcgis - 如何在 ArcGIS Online 中更改图例标签?
- gitlab - 在 GitLab CI 脚本中使用 CURL 响应
- syntax-error - 我必须使用不同的语法,然后我的朋友才会这样做。我在哪里可以解决这个问题?[解决了]