Plesk上Docker部署的Neo4j不使用指定SSL证书,自行生成证书问题
解决Neo4j Docker容器替换自定义SSL证书被删除/权限拒绝的问题
嘿,这个问题我之前帮朋友排查过类似的,咱们先理清楚核心原因,再一步步解决:
问题拆解
你现在遇到的两个核心问题其实是连锁的:
- 没设775权限时,Neo4j容器里的运行用户读不动你挂载的证书目录,卡在清理自签文件那步报权限错误
- 设了775后虽然能读写,但Neo4j不认这个证书的所有权,直接给你删了生成自签的
而且之前正常、VPS暂停恢复后出问题,大概率是暂停期间挂载目录的所有者/权限被Plesk或者系统重置了
核心原因
Neo4j Docker容器默认是用neo4j普通用户(UID/GID一般是1000)跑的,不是root。当你把宿主机的证书目录挂载进去:
- 如果目录/文件的所有者不是容器里的
neo4j用户,就会触发权限拒绝,连清理自签文件的权限都没有 - 要是权限开成775但所有者不对,Neo4j能写目录,但会觉得这个证书不是它“合法拥有”的,直接删了重新生成自签的
一步步解决
1. 把宿主机证书目录的所有者改成容器的neo4j用户
首先得确认容器里neo4j用户的UID/GID,一般都是1000,保险起见可以先查一下:
docker run --rm neo4j:3.5.13 id neo4j
输出应该是uid=1000(neo4j) gid=1000(neo4j)这类的,然后修改你宿主机上证书目录的所有者(假设你的目录是/var/www/your-site/neo4j-ssl):
chown -R 1000:1000 /var/www/your-site/neo4j-ssl
2. 设置严格的证书文件权限
Neo4j对私钥的权限要求很严,不能太开放,按下面的命令改:
# 目录权限设为755,保证neo4j能进入 chmod 755 /var/www/your-site/neo4j-ssl # 证书文件设为644,保证可读即可 chmod 644 /var/www/your-site/neo4j-ssl/neo4j.cert # 私钥必须设为600,只有所有者能读写,不然Neo4j会拒绝使用 chmod 600 /var/www/your-site/neo4j-ssl/neo4j.key
3. 修改Neo4j配置,强制使用自定义证书
找到你挂载的Neo4j配置文件neo4j.conf(一般挂载在容器的/var/lib/neo4j/conf/路径下),添加或修改以下配置:
# 开启HTTPS连接 dbms.connector.https.enabled=true # 指定证书目录为挂载的/ssl路径 dbms.directories.certificates=/ssl # 关键:禁止自动生成自签证书 dbms.security.self_signed_certificate_autogenerate=false # 指定使用你提供的证书文件名 dbms.security.ssl.policy.https.certificate=neo4j.cert dbms.security.ssl.policy.https.private_key=neo4j.key
4. 重启容器验证
重启你的Neo4j容器,然后查看日志确认配置生效:
docker logs <你的容器名或者容器ID>
如果日志里出现Loaded SSL certificate from /ssl/neo4j.cert这类信息,就说明配置成功了,再去宿主机的证书目录看看,你的正规证书肯定不会被删除。
额外提醒
Plesk有时候会自动调整文件权限,要是以后VPS再暂停恢复,可能又会重置目录所有者。你可以写个简单的启动脚本,在容器启动前自动执行chown和chmod命令,省得每次手动修改。
内容的提问来源于stack exchange,提问作者SebastianG
相关产品推荐
相关产品推荐

