在 Docker 容器中运行 Neo4j 时如何设置 SSL 通信
Neo4j 3.2 添加了一个统一的 SSL 框架,用于为 Bolt、HTTPS 和集群内加密设置安全连接。有关此框架的详细信息,请参阅:https://neo4j.ac.cn/docs/operations-manual/current/security/ssl-framework/
在 Docker 容器中运行 Neo4j 时设置安全的 Bolt 和 HTTPS 通信需要一些特定的步骤和配置设置。
以下步骤假设已遵循上述文档链接中概述的过程。此外,公钥证书和私钥已创建。
下面列出的步骤仅供示例使用。在部署之前,必须确保这些步骤适合环境。 |
Neo4j 3.5 和 Neo4j 4.x 的配置步骤不同。两者都列在下面。
Neo4j 4.x
1. 创建 Neo4j 范围目录结构
Neo4j 4.x 要求创建具有特定结构的目录。以下是 https
和 bolt
范围的示例
ssl/ ├── bolt │ ├── revoked │ └── trusted └── https ├── revoked └── trusted
在 $HOME/neo4j
中创建上述目录结构。可以使用您选择的任何目录,确保相应地调整以下路径。
2. 复制 SSL 证书并更正权限
公钥证书和私钥文件的副本需要放置在每个范围目录中。公钥还需要复制到相应的范围 trusted
目录中。
复制后,$HOME/neo4j/ssl
中的目录和文件布局应如下所示
$HOME/neo4j/ssl/ ├── bolt │ ├── private.key │ ├── public.crt │ ├── revoked │ └── trusted │ └── public.crt └── https ├── private.key ├── public.crt ├── revoked └── trusted └── public.crt
容器将以用户 neo4j
的身份运行 Neo4j。uid 和 gid 为 7474。使用以下命令调整 ssl
目录的权限
sudo chgrp -R 7474 $HOME/neo4j/ssl && \
sudo chmod -R g+rx $HOME/neo4j/ssl
3. 配置 Neo4j
有两种方法可以配置以 Docker 容器形式运行的 Neo4j:使用 Docker 主机卷外部化 neo4j.conf,或者配置 Docker 环境变量。您应该只选择其中一种方法(而不是两者都选择)。
外部化 neo4j.conf
可以使用 Docker 主机卷来挂载 neo4j.conf 文件。这是通过挂载到容器的 /conf
目录中实现的。
在 $HOME/neo4j
中创建 conf
目录和 neo4.conf 文件
mkdir $HOME/neo4j/conf && \
touch $HOME/neo4j/conf/neo4j.conf
将以下配置插入 neo4j.conf
,确保将 host.domain.com
替换为服务器/应用程序所需的 DNS 名称。
dbms.default_advertised_address=host.domain.com
# 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
dbms.ssl.policy.bolt.client_auth=NONE
dbms.connector.bolt.tls_level=REQUIRED
# Https SSL configuration
dbms.connector.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
dbms.ssl.policy.https.client_auth=NONE
以上将在部署时使用 --volume=$HOME/neo4j/conf:/conf
挂载
Docker 环境变量
以下 Docker 环境变量集合可用于替代上述 Docker 主机卷配置。这些应在部署时指定,确保将 host.domain.com
替换为服务器/应用程序所需的 DNS 名称。
--env NEO4J_dbms_default__advertised__address=host.domain.com \
--env NEO4J_dbms_ssl_policy_bolt_enabled=true \
--env NEO4J_dbms_ssl_policy_bolt_base__directory=certificates/bolt \
--env NEO4J_dbms_ssl_policy_bolt_private__key=private.key \
--env NEO4J_dbms_ssl_policy_bolt_public__certificate=public.crt \
--env NEO4J_dbms_ssl_policy_bolt_client__auth=NONE \
--env NEO4J_dbms_connector_bolt_tls__level=REQUIRED \
--env NEO4J_dbms_connector_https_enabled=true \
--env NEO4J_dbms_ssl_policy_https_enabled=true \
--env NEO4J_dbms_ssl_policy_https_base__directory=certificates/https \
--env NEO4J_dbms_ssl_policy_https_private__key=private.key \
--env NEO4J_dbms_ssl_policy_https_public__certificate=public.crt \
--env NEO4J_dbms_ssl_policy_https_client__auth=NONE \
4. 运行 Neo4j
使用 neo4j.conf
的主机卷,以下命令将部署 Neo4j 4.3.2
docker run --name=neo4j-4.3.2 \
--publish=7474:7474 --publish=7687:7687 --publish=7473:7473 \
--volume=$HOME/neo4j/ssl:/ssl \
--volume=$HOME/neo4j/conf:/conf \
--env NEO4J_dbms_memory_pagecache_size=512m \
--env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes \
neo4j:4.3.2-enterprise
添加 Docker 卷以存储证书
Neo4j Docker 映像公开了一个 /ssl 卷,用于挂载主机上的目录以存储证书
--volume=$HOME/neo4j/ssl:/ssl
在上述示例中,将使用本地文件夹 ($HOME/neo4j/ssl) 来存储证书和密钥。
在 Neo4j 中设置配置设置以使用上述 /ssl 卷
Neo4j Docker 容器允许使用 /conf 卷,以便您能够在 Neo4j.conf 文件中设置配置设置
--volume=$HOME/neo4j/conf:/conf
使用上述设置,我们可以修改 Neo4j.conf 文件中的设置,并将该文件放置在 $HOME/neo4j/conf 文件夹中。
或者,可以使用环境变量来设置配置设置,如下所示
https://neo4j.ac.cn/docs/operations-manual/current/installation/docker/#docker-environment-variables
要配置安全的 Bolt 和 HTTPs 通信,需要以下配置参数
-
bolt.ssl_policy=client_policy
-
https.ssl_policy=client_policy
-
dbms.ssl.policy.client_policy.base_directory=/ssl/client_policy
-
dbms.ssl.policy.client_policy.client_auth=NONE
这里需要注意的是,base_directory 设置以 /ssl
开头 - 这将映射到挂载的驱动器,并在 $HOME/neo4j/ssl
文件夹中查找 client_policy 目录。
将证书/密钥复制到主机文件夹
使用上述设置,主机上将需要以下文件夹结构和文件
$HOME/neo4j/ssl/client_policy/ $HOME/neo4j/ssl/client_policy/private.key $HOME/neo4j/ssl/client_policy/public.crt $HOME/neo4j/ssl/client_policy/trusted/ $HOME/neo4j/ssl/client_policy/revoked/
如果密钥/crt 文件的名称与默认名称不同,则需要以下设置
dbms.ssl.policy.client_policy.private_key=/ssl/client_policy/neo4j_prod.key
dbms.ssl.policy.client_policy.public_certificate=/ssl/client_policy/neo4j_prod.crt
示例 Docker 运行命令
以下是一个示例命令,用于使用上述设置启动 Docker 容器
$ docker run --publish=7473:7473 --publish=7687:7687 --volume=$HOME/neo4j/ssl:/ssl --volume=$HOME/neo4j/conf:/conf --env=NEO4J_ACCEPT_LICENSE_AGREEMENT=yes neo4j:3.4-enterprise
此页面对您有帮助吗?