2020年4月8日15:29:47
使用安全SSL连接PostgreSQL数据库
今天主要是在PostgreSQL数据库上面遇到的一个要求:配置SSL方式连接数据库,连接后查看版本正确。
什么是SSL
SSL 的英文全称是 “Secure Sockets Layer” ,中文名为 “ 安全套接层协议层 ” ,它是网景( Netscape )公司提出的基于 WEB 应用的安全协议。 SSL 协议指定了一种在应用程序协议(如 HTTP 、 Telenet 、 NMTP 和 FTP 等)和 TCP/IP 协议之间提供数据安全性分层的机制,它为 TCP/IP 连接提供了数据加密、服务器认证、消息完整性以及可选的客户机认证。
SSL是在Web服务器和Web客户机之间建立经过身份验证和加密会话的Web协议。
- SSL首先以建立TCP/IP连接的握手例行程序开始。
- 接着, 通过验证服务器的公钥为客户机来验证服务器。一旦通过验证,服务器即会选择客户机和服务器都支持的并在具体的国家/地区所实施的限制内的最强密码算法。
- 下一步将生成用来对上述客户机和服务器之间的所有数据流进行加密的共享密钥。
- 最终,一个加密的SSL,连接便建立了。
如上所述,在客户机和服务器之间发送的所有信息都经过加密,包括所有的HTTP请求和响应以及客户机请求的URL。该级别的加密可确保信用卡号、访问授权 信息(用户名)以及服务器返回的敏感数据等敏感信息的保护。 因为加密需要大量的计算,所以SSL会话通常仅用于敏感信息的传输。
因此所谓的 SSL连接也有自己的应用场景:当我们使用非加密方式连接数据库时,在网络中传输的所有信息都是明文的,可以被网络中所有人截取,敏感信息可能被泄露。因此在传送敏感信息(如密码)时,可以采用SSL连接的方式,以保证信息安全。
OK,这就是SSL连接的格式和意义所在。下面开始配置我们的PostgreSQL数据库server,如下三个步骤:
- 在数据库server端 开启SSL,生成Certificate
- 在client端 创建和添加证书
- 使用uxsql进行建立到server的安全连接
不过在我们这里仅仅是:在客户端与数据库服务端的连接采取SSL单向认证,不是SSL双向认证。单向认证和双向认证的区别仅在于创建连接阶段,他们的数据传输均为加密的。SSL单向认证仅在PostgreSQL数据库 Server端配置SSL证书。下面是具体的配置步骤:
SSL单向认证配置步骤
- 初始化并启动PostgreSQL数据库 Server
- 添加 私钥、服务器证书和受信的根证书
第一步:创建第一个文件 私钥(server.key文件),如下:
openssl genrsa -des3 -out server.key 1024
上面的创建过程中,需要输入密码 两次相同,生成server.key文件即可。
第二步:清除上面刚说的密码
openssl rsa -in server.key -out server.key
当然在此过程中,也是需要输入这个密码的
第三步:为私钥文件设置适当的权限和所有权,使用如下命令:
chmod 400 server.key #600也行
chown uxdb:uxdb server.key
第四步:创建基于server.key文件的服务器证书(server.crt),使用如下命令:
openssl req -new -key server.key -days 3650 -out server.crt -x509
第五步: 把生成的服务器证书作为受信任的根证书(只需要拷贝并起一个名字即可得到自己签名的证书)
cp server.crt root.crt
OK 三个文件都有了,接下来就可以开始激活SSL以及使用。
第六步: 配置postgres.conf文件
第七步: 配置pg_hba.conf文件,增加SSL认证连接的规则
第八步: 重启数据库(规则生效),建立连接
注:我上面的三个文件都建到bin目录下面了,应该拷贝到 你初始化的数据库集群目录里面。
如此 通过SSL,客户端和服务器在先相互进行身份验证之后,在整个会话期间传输的数据都是安全加密的。