一、服务器端的操作
#在server端生成三个文件
#root.crt中(受信任的根证书)
#server.crt这(服务器证书)
#server.key(私钥)
#以上三个文件放在/path/to/data/目录下
#生成私钥(要提供密码)
openssl genrsa -des3 -out server.key 2048
#删除密码
openssl rsa -in server.key -out server.key
#创建服务器证书
#填写信息
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:pc3
Email Address []:
openssl req -new -key server.key -days 3650 -out server.crt -x509
#由于是自签名的,因此可以使用服务器证书作为受信任的根证书
copy server.crt root.crt
#编辑服务器的pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
#只保留这一行,其它的取消
hostssl sto sto 0.0.0.0/0 cert clientcert=1
#编辑服务器的postgresql.conf
ssl = on
ssl_cert_file = 'server.crt'
ssl_key_file = 'server.key'
ssl_ca_file = 'root.crt'
#重新启动pg服务器
二、客户端的操作
#客户端需要三个文件,我是windows,放在%appdata%/postgresql/目录下
#root.crt(受信任的根证书,在服务器端已经生成了)
#postgresql.crt(客户端证书)
#postgresql.key(私钥)
#客户端计算机生成私钥postgresql.key
openssl genrsa -des3 -out postgresql.key 2048
#删除客户端私钥的密码
openssl rsa -in postgresql.key -out postgresql.key
#然后创建证书postgresql.crt。它必须由我们的受信任的根(使用服务器计算机上的私钥文件)签名。
#此外,证书公用名(CN)必须设置为我们将连接的数据库用户名。
#生成postgresql.csr文件
#填写的信息
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:sto
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
openssl req -new -key postgresql.key -out postgresql.csr
#生成postgresql.crt文件
openssl x509 -req -days 3650 -in postgresql.csr -CA root.crt -CAkey server.key -out postgresql.crt -CAcreateserial
#客户端登录时要注意的事项
1、如果不写用户名,会使用计算机当前的用户名,建议还是写上用户名。
2、在服务器上pg_hba.conf,hostssl 行中指定要求的是用IP登录,因此在客户端填写主机时要写主机的IP地址
3、使用客户端的SSL设置
#ok,可以正常连接使用了