Neo4j Docker 容器中的 SSL 加密
Neo4j on Docker 支持 Neo4j 的原生 SSL 框架,用于设置安全的 Bolt 和 HTTPS 通信。要在 Docker 中配置这些设置,您可以在 neo4j.conf 文件中设置它们,或者将它们作为 Docker 环境变量 传递给 Docker。
设置证书文件夹
-
证书必须由受信任的证书颁发机构 (CA) 颁发,例如 https://www.openssl.org/ 或 https://letsencrypt.openssl.ac.cn/。
默认文件名是 private.key 和 public.crt。
-
创建一个本地文件夹来存储您的证书。
例如,$HOME/neo4j/certificates。此文件夹稍后将挂载到容器的 /ssl。
-
在您的本地文件夹(例如 $HOME/neo4j/certificates)中,为要保护的每个通信通道的 SSL 策略创建一个文件夹。在那里,您将存储您的证书和私钥。
建议对不同的通信通道(
bolt
和https
)使用不同的证书。在以下示例中,
<scope>
替换通信通道的名称。$ mkdir $HOME/neo4j/certificates/<scope>
-
在每个 <scope> 文件夹中,为受信任和已吊销的证书创建一个 /trusted 和一个 /revoked 文件夹。
$ mkdir $HOME/neo4j/certificates/<scope>/trusted $ mkdir $HOME/neo4j/certificates/<scope>/revoked
-
最后,您将证书添加到相应的<scope>文件夹中。
现在,<scope>文件夹应显示以下列表
$ ls $HOME/neo4j/certificates/<scope> -r-------- ... private.key -rw-r--r-- ... public.crt drwxr-xr-x ... revoked drwxr-xr-x ... trusted
通过neo4j.conf配置SSL
在neo4j.conf文件中,为要使用的策略配置以下设置
# Https SSL configuration
server.https.enabled=true
dbms.ssl.policy.https.enabled=true
dbms.ssl.policy.https.base_directory=certificates/https
dbms.ssl.policy.https.private_key=private.key
dbms.ssl.policy.https.public_certificate=public.crt
# Bolt SSL configuration
dbms.ssl.policy.bolt.enabled=true
dbms.ssl.policy.bolt.base_directory=certificates/bolt
dbms.ssl.policy.bolt.private_key=private.key
dbms.ssl.policy.bolt.public_certificate=public.crt
示例1. 通过neo4j.conf启用SSL策略启动容器的
docker run
命令。docker run \
--publish=7473:7473 \ (1)
--publish=7687:7687 \
--user="$(id -u):$(id -g)" \ (2)
--volume=$HOME/neo4j/certificates:/ssl \ (3)
--volume=$HOME/neo4j/conf:/conf \ (4)
neo4j:5.25.1
1 | 访问HTTPS端点的端口。 |
2 | Docker将以当前用户身份启动(假设当前用户对证书具有读取权限)。 |
3 | 包含要设置为Neo4j使用的SSL策略的卷。 |
4 | 包含neo4j.conf文件的卷。在此示例中,neo4j.conf位于主机的$HOME/neo4j/conf 文件夹中。 |
通过Docker环境变量配置SSL
作为通过neo4j.conf文件配置SSL的替代方法,您可以通过将SSL策略的配置值作为环境变量传递到Neo4j Docker容器来设置SSL策略。有关如何将Neo4j设置转换为Docker接受的形式的更多信息,请参见环境变量
示例2. 通过Docker环境变量启用SSL策略启动容器的
docker run
命令。docker run \
--publish=7473:7473 \ (1)
--publish=7687:7687 \
--user="$(id -u):$(id -g)" \ (2)
--volume=$HOME/neo4j/certificates:/ssl \ (3)
--env NEO4J_dbms_connector_https_enabled=true \ (4)
--env NEO4J_dbms_ssl_policy_https_enabled=true \ (5)
--env NEO4J_dbms_ssl_policy_https_base__directory=/ssl/https \ (6)
neo4j:5.25.1
1 | 访问HTTPS端点的端口。 |
2 | Docker将以当前用户身份启动(假设当前用户对证书具有读取权限)。 |
3 | 包含要设置为Neo4j使用的SSL策略的卷。 |
4 | HTTPS连接器默认情况下处于禁用状态。因此,您必须将server.https.enabled 设置为true ,以便Neo4j能够侦听HTTPS端口上的传入连接。但是,对于Bolt SSL策略,您不必传递此参数,因为Bolt连接器默认情况下处于启用状态。 |
5 | 要为Neo4j设置的SSL策略。 |
6 | 搜索SSL证书和密钥的基本目录。请注意,该值是docker卷文件夹/ssl/https,而不是主机的/certificate/https文件夹。 |