主要工具:
OpenSSL
Postgres
生成证书
mkdir -p ~/pg-certs && cd ~/pg-certs
生成CA:
openssl req -new -x509 -days 3650 -nodes -keyout ca.key -out ca.crt -subj "/CN=PostgreSQL-CA"生成服务器证书:
注意CN填写为Postgres部署的IP地址或域名,注意域名是数据库专属的域名,nginx代理配置转发端口配置为数据库端口,没有则删除
alt_name.IP.2后的DOMAIN.com填写内网IP。cat > server.cnf <<'EOF' [req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] CN = 127.0.0.1 [v3_req] keyUsage = critical, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] IP.1 = 127.0.0.1 IP.2 = DOMAIN.com EOFopenssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr -config server.cnf openssl x509 -req -in server.csr \ -CA ca.crt -CAkey ca.key \ -CAcreateserial \ -out server.crt -days 3650 \ -extensions v3_req -extfile server.cnf生成客户端证书
cat > client.cnf <<'EOF' [req] distinguished_name = req_distinguished_name req_extensions = v3_req prompt = no [req_distinguished_name] CN = postgres [v3_req] keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth subjectAltName = @alt_names [alt_names] DNS.1 = postgres EOFCodeBlock Loading...设置权限
CodeBlock Loading...应用证书
如果你的数据库使用docker容器运行,确保已经把数据库目录映射到了宿主机,如果你直接在宿主机启动数据库,那么你的后续操作目录应该是
/var/lib/postgresql/data(不同数据库版本可能数据目录不一致),请自修修改.CodeBlock Loading...
配置PostgresSQL服务器
复制证书到Postgres数据目录
CodeBlock Loading...设置所有者
注意使用sudo提权
CodeBlock Loading...修改配置文件
CodeBlock Loading...CodeBlock Loading...重启服务
CodeBlock Loading...测试链接
CodeBlock Loading...
配置客户端连接
下载生成的客户端证书到本地开发跟目录中
CodeBlock Loading...配置env文件
CodeBlock Loading...建链方式如下
CodeBlock Loading...