![[ MQ 9.4.4 2025 年 10 月]](ng944.gif)
![[Linux]](nglinux.gif)
DR/HA RDQM 的安全复制
您可以指定 DR/HA RDQM 配置中的复制链接使用 TLS 加密。
在 DR/HA RDQM 配置中创建队列管理器时,可以指定用于在 HA 组中的队列管理器实例之间复制数据的链接使用 TLS 保护。 您还可以指定用于在两个 HA 配置之间复制数据的链接使用 TLS 加密。 您可以选择确保 HA 或 DR 复制链接的安全,也可以同时确保两者的安全。
- 配置所需的证书。
- 配置 tlshd 服务。
- 使用 crtmqm 创建新队列管理器时,指定
-re、-reh或-red选项。
RDQM 安全复制链路可使用的 TLS 协议和密码套件由活动的全系统加密策略控制。 使用 Linux® update-crypto-policies 命令更改当前活动策略。
配置证书
您必须配置复制链接使用的证书。 您为每个节点创建的证书可用于任何复制链接。 如果使用安全复制链接的节点上有多个 RDQM 队列管理器,则使用相同的证书。
要在 RDQM DR/HA 配置中使用安全复制链接,需要六张证书,RDQM DR/HA 组中每个节点一张证书。
- 使用以下命令生成私钥:
其中 key_file 是为存储私钥而创建的文件名。openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out key_file - 创建证书签名请求。在 RDQM DR/HA 配置中,创建的证书必须满足以下要求:
- 证书通用名 (CN) 必须设置为 RDQM 节点的主机名。
- 证书主题备选名称 (SAN) 必须包含 RDQM 节点的主机名和组 DNS 名称。 组 DNS 名称默认值为
encrypted.remote。 如果需要,可以指定不同的组 DNS 名称。两个 HA 组可以使用相同的组 DNS 名称,也可以为每个 HA 组指定不同的名称。
HA 组中的每个节点都必须使用 SAN 中具有相同组 DNS 名称的证书。
如果在创建证书时不使用 SAN 中
encrypted.remote的默认值,则必须在创建队列管理器时使用 crtmqm 命令中的 -san 参数为本地和远程 HA 组指定组 DNS 名称。
使用以下命令创建证书签名请求:
其中:openssl req -key key_file -subj "/CN=hostname" -addext "subjectAltName = DNS:hostname,DNS:group_dns_name" -new -out cert_req_file- key_file 是包含在步骤 1 中创建的私人密钥的文件。
- hostname 是节点的主机名。
- group_dns_name 是组 DNS 名称。 要使用组 DNS 名称的默认值,请指定
encrypted.remote。 - cert_req_file 是为存储证书签名请求而创建的文件。
- 向证书颁发机构(CA)发送证书签署请求,以便签署。 从 CA 收到签名证书后,将私钥、签名证书和 CA 证书文件复制到要存储这些文件的目录。 例如,
/etc/drbd.d/目录。 - 设置私钥和证书文件的文件权限和所有权,确保只有根用户才能查看私钥。
- 将私钥和证书文件的所有权更改为根用户。
- 设置私钥文件的权限,只有 root 用户才有读写权限。
#!/bin/bash
# The CA name
ca_name="RDQM Test CA"
# The CA filename
ca_filename="rdqm_test_ca"
# Host certificates to generate
test_hosts=("alice" "bob" "charlie")
mkdir certificates && cd ./certificates
# Create private key for use with private CA using OpenSSL
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 \
-out $ca_filename.key
# Create a private CA certificate using OpenSSL
openssl req -key $ca_filename.key -new -x509 -days 3650 -subj "/CN=$ca_name" \
-out $ca_filename.crt
# Create certificates for each node
for host in ${test_hosts[@]}; do
# Create a private key
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 \
-out $host.key
# Generate a CSR
openssl req -key $host.key -subj "/CN=$host" \
-addext "subjectAltName = DNS:$host,DNS:encrypted.remote" \
-new -out $host.csr
# Create a valid certificate signed by the private CA
openssl x509 -req -in $host.csr -CA $ca_filename.crt \
-copy_extensions copyall -CAkey $ca_filename.key -CAcreateserial \
-days 365 -out $host.crt
# Remove sequential serial number
rm -f $ca_filename.srl
# Remove CSR
rm -f $host.csr
done在辅助 HA 组中的一个节点上运行相同的脚本,指定该组中三个节点的主机名。
- rdqm_test_ca.crt
- rdqm_test_ca.key
- alice.crt
- alice.csr
- alice.key
- bob.crt
- bob.csr
- bob.key
- charlie.crt
- charlie.csr
- charlie.key
如果二级组中的主机名为 william、joey 和 kayser,那么二级组中节点的 certificates 目录中将生成以下文件:
- rdqm_test_ca.crt
- rdqm_test_ca.key
- william.crt
- william.csr
- william.key
- joey.crt
- joey.csr
- joey.key
- kayser.crt
- kayser.csr
- kayser.key
- 将 CA 证书 (
rdqm_test_ca.crt) 复制到每个节点的/etc/drbd.d/目录。 (这些是示例路径,您可以根据需要选择其他位置) - 将每个节点的证书(
.crt文件)和私钥(.key文件)复制到/etc/drbd.d/。 (这些是示例路径,您可以根据需要选择其他位置) - 更改每个节点上私钥和证书的文件权限和所有权。 这样可以确保只有根用户才能查看私钥的内容:
chmod 600 /etc/drbd.d/*.key chown root:root /etc/drbd.d/*.key chown root:root /etc/drbd.d/*.crt - 将证书颁发机构的私人密钥存放在安全的地方。
配置 tlshd 服务
在完成任何 DRBD TLS 握手之前,需要先配置 tlshd 服务,然后启用并启动它。 tlshd 服务与 drbd-utils-9 软件包一起安装。
该服务的配置文件为 /etc/tlshd.conf ,初始内容为
[debug]
loglevel=0
tls=0
nl=0
[authenticate]
#keyrings= <keyring>;<keyring>;<keyring>
[authenticate.client]
#x509.truststore= <pathname>
#x509.certificate= <pathname>
#x509.private_key= <pathname>
[authenticate.server]
#x509.truststore= <pathname>
#x509.certificate= <pathname>
#x509.private_key= <pathname>
authenticate.client 和 authenticate.server 部分为以下属性指定值(DRBD 可以在任一方向上建立连接,除非防火墙阻止了其中一个方向):- x509.truststore
- RDQM 节点所使用证书的 CA 证书文件路径。 如果需要复杂的信任链,则必须将其记录在一个文件中。
- x509.certificate
- 包含 RDQM 节点 CA 签名证书的文件路径。
- x509.private_key
- 包含 RDQM 节点私钥的文件路径。 文件的所有者必须是 root 用户,读/写权限必须只授予 root 用户。
authenticate.client 和 authenticate.server 两个部分中设置此项:- x509.crl
- 文件路径,该文件包含 PEM 编码的证书吊销列表 (CRL),在每次握手过程中用于验证证书的吊销状态。 如果未指定该选项,则跳过 CRL 检查。
[authenticate.client]
x509.truststore=/etc/drbd.d/rdqm_test_ca.crt
x509.certificate=/etc/drbd.d/alice.crt
x509.private_key=/etc/drbd.d/alice.key
[authenticate.server]
x509.truststore=/etc/drbd.d/rdqm_test_ca.crt
x509.certificate=/etc/drbd.d/alice.crt
x509.private_key=/etc/drbd.d/alice.keysystemctl daemon-reload要启动 tlshd 服务,请输入以下命令:systemctl enable --now tlshd创建 DR/HA RDQM
-re 选项的 crtmqm 命令创建 DR/HA 队列管理器,该队列管理器具有安全的 HA 和 DR 复制链接,例如,主组中的主实例:crtmqm -sx -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -re <DRHAQueueManagerName>在主组中的每个其他节点上运行以下命令,以创建辅助实例:crtmqm -sxs -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -re <DRHAQueueManagerName>使用以下命令在辅助组中创建主实例:crtmqm -sx -rr s -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -re <DRHAQueueManagerName>在辅助组中的每个其他节点上运行以下命令以创建辅助实例:crtmqm -sxs -rr s -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -re <DRHAQueueManagerName>要只保护组中的 HA 复制链接,请在命令中指定 -reh 选项。 例如:crtmqm -sx -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -reh <DRHAQueueManagerName>-red 选项。 例如:crtmqm -sx -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -red <DRHAQueueManagerName>encrypted.remote 。 如果使用不同的值创建证书,则必须在使用 -san 选项创建队列管理器时指定该值。 例如:crtmqm -sx -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -red -san <customSubjectAltName> <DRHAQueueManagerName>如果在两个组的证书中使用了相同的组 DNS 名称,则在创建 DR/HA RDQM 配置的所有 crtmqm 命令中使用 -san <customSubjectAltName> 选项指定该值。crtmqm -sx -rr p -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -red -san <primarySubjectAltName>,<secondarySubjectAltName> <DRHAQueueManagerName>以下命令将在辅助 HA 组上创建主队列管理器:crtmqm -sx -rr s -rl <Local_IPs> -ri <Recovery_IPs> -rp <DRPort> -red -san <secondarySubjectAltName>,<primarySubjectAltName> <DRHAQueueManagerName>(在这些示例中,您可以指定 -re 或 -red 选项)使用 rdqmstatus 命令确认复制链接已使用 TLS 加密。 有关更多信息,请参阅查看 DR/HA RDQM 和 HA 组状态。
有关创建 DR/HA RDQM 的更多信息,请参阅创建 DR/HA RDQM。