YugabyteDB TLS加密:服务器证书创建全指南
前言
在分布式数据库系统中,安全通信是确保数据完整性和机密性的关键。YugabyteDB作为一款高性能的分布式SQL数据库,支持通过TLS(传输层安全)协议实现服务器间和客户端到服务器的加密通信。本文将详细介绍如何为YugabyteDB集群创建和配置服务器证书。
准备工作
创建安全数据目录
首先需要创建一个专门用于存储安全相关文件的目录:
mkdir secure-data
这个目录将用于存放根证书、私钥等敏感信息。完成配置后,这些数据将被复制到安全位置,原始目录会被删除。
创建节点目录
为集群中的每个节点创建单独的目录:
mkdir 127.0.0.1/ 127.0.0.2/ 127.0.0.3/
这些目录将存放各节点特定的证书和密钥文件,后续会被复制到各节点的tls-cert
目录中。
根证书配置
创建根配置文件
在secure-data
目录中创建ca.conf
文件,内容如下:
[ ca ]
default_ca = my_ca
[ my_ca ]
default_days = 3650
serial = secure-data/serial.txt
database = secure-data/index.txt
default_md = sha256
policy = my_policy
[ my_policy ]
organizationName = supplied
commonName = supplied
[req]
prompt=no
distinguished_name = my_distinguished_name
x509_extensions = my_extensions
[ my_distinguished_name ]
organizationName = Yugabyte
commonName = CA for YugabyteDB
[ my_extensions ]
keyUsage = critical,digitalSignature,nonRepudiation,keyEncipherment,keyCertSign
basicConstraints = critical,CA:true,pathlen:1
初始化必要文件
创建索引文件和序列号文件:
touch secure-data/index.txt
echo '01' > secure-data/serial.txt
生成根证书
生成根私钥
使用以下命令生成2048位的RSA私钥:
openssl genrsa -out secure-data/ca.key
设置适当的权限:
chmod 400 secure-data/ca.key
生成根证书
使用根私钥生成自签名的根证书:
openssl req -new \
-x509 \
-days 3650 \
-config secure-data/ca.conf \
-key secure-data/ca.key \
-out secure-data/ca.crt
验证生成的根证书:
openssl x509 -in secure-data/ca.crt -text -noout
节点证书配置
复制根证书到各节点
cp secure-data/ca.crt 127.0.0.1/
cp secure-data/ca.crt 127.0.0.2/
cp secure-data/ca.crt 127.0.0.3/
为每个节点创建配置文件
为每个节点创建node.conf
文件,以127.0.0.1节点为例:
[ req ]
prompt=no
distinguished_name = my_distinguished_name
[ my_distinguished_name ]
organizationName = Yugabyte
commonName = 127.0.0.1
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
IP.1 = 127.0.0.1
生成节点私钥
为每个节点生成私钥:
openssl genrsa -out 127.0.0.1/node.127.0.0.1.key
chmod 400 127.0.0.1/node.127.0.0.1.key
注意文件名必须遵循node.<commonName>.key
格式,YugabyteDB才能正确识别。
生成节点证书
- 首先为每个节点生成证书签名请求(CSR):
openssl req -new \
-config 127.0.0.1/node.conf \
-key 127.0.0.1/node.127.0.0.1.key \
-out 127.0.0.1/node.csr
- 使用根证书签署CSR:
openssl ca -config secure-data/ca.conf \
-keyfile secure-data/ca.key \
-cert secure-data/ca.crt \
-policy my_policy \
-out 127.0.0.1/node.127.0.0.1.crt \
-outdir 127.0.0.1/ \
-in 127.0.0.1/node.csr \
-days 3650 \
-batch \
-extfile 127.0.0.1/node.conf \
-extensions req_ext
- 验证节点证书:
openssl verify -CAfile secure-data/ca.crt 127.0.0.1/node.127.0.0.1.crt
部署证书到节点
每个节点需要以下文件:
ca.crt
- 根证书node.<commonName>.crt
- 节点证书node.<commonName>.key
- 节点私钥
传输文件到节点
- 在目标节点创建证书目录:
ssh <username>@127.0.0.1 mkdir ~/certs
- 复制证书文件:
scp 127.0.0.1/ca.crt <user>@127.0.0.1:~/certs/
scp 127.0.0.1/node.127.0.0.1.crt <user>@127.0.0.1:~/certs/
scp 127.0.0.1/node.127.0.0.1.key <user>@127.0.0.1:~/certs/
安全建议
- 完成部署后,应安全删除本地临时目录中的敏感文件
- 定期轮换证书,建议有效期不超过1年
- 严格控制证书和私钥文件的访问权限
- 考虑使用硬件安全模块(HSM)保护根私钥
总结
通过上述步骤,我们完成了YugabyteDB集群的服务器证书配置。这些证书将用于启用服务器间的TLS加密通信,为数据库集群提供安全保障。在实际生产环境中,建议结合自动化工具管理证书生命周期,确保证书及时更新,维持系统安全性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考