Neo4j4.4.8报WebSocket connection failure无法经HTTPS/Bolt+S连接
问题记录
- 部署环境:Ubuntu 20.04.4 LTS 服务器,Neo4j Community Edition 4.4.8
- 触发报错:
WebSocket connection failure. Due to security constraints in your web browser, the reason for the failure is not available to this Neo4j Driver - 连接状态:
- 可正常通过
http://localhost:7474/browser/访问数据库 - 无法通过
https://localhost:7473/browser/、bolt+s://localhost:7687建立加密连接
- 可正常通过
- 已尝试调整的配置(未解决故障):
- 基础监听配置
dbms.default_listen_address=0.0.0.0dbms.connectors.default_list_address=0.0.0.0dbms.connector.bolt.enabled=truedbms.connector.bolt.address=0.0.0.0:7687dbms.connector.https.enabled=truedbms.connector.https.listen_address=0.0.0.0:7473
- SSL证书配置(使用自行生成的SSL证书)
Bolt SSL 配置
dbms.ssl.policy.bolt.enabled=truedbms.ssl.policy.bolt.base_directory=certificates/boltdbms.ssl.policy.bolt.private_key=private.keydbms.ssl.policy.bolt.public_certificate=public.crtdbms.ssl.policy.bolt.client_auth=NONE
HTTPS SSL 配置dbms.ssl.policy.https.enabled=truedbms.ssl.policy.https.base_directory=certificates/httpsdbms.ssl.policy.https.private_key=private.keydbms.ssl.policy.https.public_certificate=public.crtdbms.ssl.policy.https.client_auth=NONE
排查与修复方案
按以下优先级逐步排查:
- 校验证书有效性与权限
- Neo4j 服务运行用户(默认为
neo4j)必须对证书目录、公私钥文件有可读权限,deb安装方式下执行以下命令修正权限,tar包部署替换为实际安装目录下的certificates路径即可:
chown -R neo4j:neo4j /etc/neo4j/certificates/ chmod 600 /etc/neo4j/certificates/bolt/private.key chmod 600 /etc/neo4j/certificates/https/private.key chmod 644 /etc/neo4j/certificates/bolt/public.crt chmod 644 /etc/neo4j/certificates/https/public.crt
- Neo4j 4.4.x 要求私钥必须为PKCS#8 无加密格式,如果是openssl生成的传统RSA格式私钥,执行以下命令转换:
openssl pkcs8 -topk8 -nocrypt -in 原私钥文件路径 -out private.key
- 校验公私钥匹配度,执行以下两条命令,输出的MD5值完全一致才代表匹配,不匹配则重新生成证书:
openssl x509 -noout -modulus -in public.crt | openssl md5 openssl rsa -noout -modulus -in private.key | openssl md5
- 自签名证书必须在SAN(主体备用名称)字段中包含你实际访问用的IP/域名,仅用CN字段配置地址在新版Chrome、Edge浏览器中会被判定为无效证书,直接拦截连接。
- 补全缺失配置、校验端口状态
- 当前Bolt配置缺少强制TLS等级项,在neo4j.conf中新增:
dbms.connector.bolt.tls_level=REQUIRED - 重启Neo4j服务加载配置:
systemctl restart neo4j - 执行
ss -tulnp | grep neo4j检查端口监听状态,确认输出中存在0.0.0.0:7473、0.0.0.0:7687的监听记录,若不存在说明配置加载失败,查看日志定位配置项拼写错误。 - 检查本地防火墙规则,执行
ufw status确认7473、7687端口已放通,未放通则执行:
ufw allow 7473/tcp ufw allow 7687/tcp ufw reload
- 浏览器侧拦截排查
- 自签名证书默认不受浏览器信任,首次访问
https://<服务器实际IP>:7473时,手动点击「高级」-「继续访问」接受证书风险后,才能正常建立WebSocket连接。未手动信任证书时,浏览器会静默拦截加密请求,触发无明确原因的驱动报错。 - 测试加密连接时不要使用
localhost作为连接地址,替换为服务器实际IP,且该IP必须包含在证书的SAN字段中,否则域名校验失败会直接断开连接。
- 日志精准定位
- 以上步骤未解决问题时,直接查看Neo4j运行日志定位根因,deb安装默认日志路径为
/var/log/neo4j/neo4j.log,tar包部署日志在安装目录的logs文件夹下。证书加载失败、SSL握手错误、端口绑定冲突的具体原因都会在日志中明确打印,根据报错内容对应调整即可。
内容的提问来源于stack exchange,提问作者Ritzu
相关产品推荐
相关产品推荐

