Neo4j Docker 容器中的 SSL 加密

Neo4j on Docker 支持 Neo4j 的原生 SSL 框架,用于设置安全的 Bolt 和 HTTPS 通信。要在 Docker 中配置这些设置,您可以在 neo4j.conf 文件中设置它们,或者将它们作为 Docker 环境变量 传递给 Docker。

设置证书文件夹

  1. 验证您是否拥有 SSL 公钥证书私钥

    证书必须由受信任的证书颁发机构 (CA) 颁发,例如 https://www.openssl.org/https://letsencrypt.openssl.ac.cn/

    默认文件名是 private.keypublic.crt

  2. 创建一个本地文件夹来存储您的证书。

    例如,$HOME/neo4j/certificates。此文件夹稍后将挂载到容器的 /ssl

  3. 在您的本地文件夹(例如 $HOME/neo4j/certificates)中,为要保护的每个通信通道的 SSL 策略创建一个文件夹。在那里,您将存储您的证书和私钥。

    建议对不同的通信通道(bolthttps)使用不同的证书。

    在以下示例中,<scope> 替换通信通道的名称。

    $ mkdir $HOME/neo4j/certificates/<scope>
  4. 在每个 <scope> 文件夹中,为受信任和已吊销的证书创建一个 /trusted 和一个 /revoked 文件夹。

    $ mkdir $HOME/neo4j/certificates/<scope>/trusted
    $ mkdir $HOME/neo4j/certificates/<scope>/revoked
  5. 最后,您将证书添加到相应的<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

有关配置SSL策略的更多信息,请参见配置

有关配置连接器的更多信息,请参见配置选项

示例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文件夹。