前物联网的挑战之一就是提供最高的安全级别。这就是为什么需要开启SSL连接到 PostgreSQL。

【转帖】建立安全SSL连接PostgreSQL数据库服务器_postgresql

当你想要安全的存储数据到PostgreSQL数据中时,第一件事就是通过加密的连接保护身份认证凭证和存储数据被拦截。

下面,我们将对数据库服务器进行适当的调整,来开启SSL和生成证书。然后,在客户端机器上创建和添加证书,最后,通过pgAdmin 工具来建立到服务器是安全连接。让我们开始吧。



SSL双向认证和SSL单向认证的区别

双向认证 SSL 协议要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有CA证书,服务器端不会验证客户证书,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,都是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用128位加密通讯的原因。

一般Web应用都是采用SSL单向认证的,原因很简单,用户数目广泛,且无需在通讯层对用户身份进行验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做SSL双向认证。

由于单向认证和双向认证的区别仅在于创建连接阶段,数据的传输均为加密的,因此客户端与PG服务端的连接采取SSL单向认证即可,即仅在PG Server端配置SSL证书。

PostgreSQL服务器配置

1. 首先连接到PG数据库服务器

【转帖】建立安全SSL连接PostgreSQL数据库服务器_服务器_02

2.为了让SSL工作起来,需要添加下面三个文件到 $PGDATA服务器目录:

  • server.key – 私钥。
  • server.crt – 服务器证书。
  • root.crt – 受信任的根证书。

提示:
这里我们不会详细解释命令的参数,但如果你需要更深入的了解,可以只参考本文中的 Self-Signed Custom SSL或在官方站点OpenSSL查询更详细的说明;
你也可以使用 你也可以同样使用自定义SSL(custom SSL )证书 ,描述如下 (按照 生成自定义的SSL证书 部分的指导实现)。 在后者情况下,你可以直接跳过生成指令,直接跳转到第六步的指令

3.首先,让我们创建第一个文件—-私钥:

openssl genrsa -des3 -out server.key 1024


  • 1

【转帖】建立安全SSL连接PostgreSQL数据库服务器_pg_03

在生成server.key文件的过程中,它会要求输入密码— 随意输入并确认。

现在,为了在以后使用这个key,你需要删除在上面添加的密码。通过如下命令实现:

openssl rsa -in server.key -out server.key


  • 1

【转帖】建立安全SSL连接PostgreSQL数据库服务器_ssl_04

再次输入密码来确认。

为私钥文件设置适当的权限和所有权,使用如下命令:

chmod 400 server.key
chown ec2-user:ec2-user server.key


  • 1
  • 2

【转帖】建立安全SSL连接PostgreSQL数据库服务器_postgres_05

4. 接下来,您需要创建基于server.key文件的服务器证书, 如下:

openssl req -new -key server.key -days 3650 -out server.crt -x509


  • 1

【转帖】建立安全SSL连接PostgreSQL数据库服务器_postgresql_06

也可以通过-subj命令指定

openssl req -new -key server.key -days 3650 -out server.crt -x509 -subj ‘/C=US/ST=California/L=PaloAlto/O=Jelastic/CN=mysite.com/ema ilAddress=mail@jelastic.com’

参数来设置你的个人资料:

【转帖】建立安全SSL连接PostgreSQL数据库服务器_ssl_07

5.为了得到自己签名的证书,把生成的服务器证书作为受信任的根证书,只需要复制并取一个合适的名字

cp server.crt root.crt


  • 1

【转帖】建立安全SSL连接PostgreSQL数据库服务器_服务器_08

现在,三个证书文件都有了,接下来就可以处理激活SSL以及使用它的PostgreSQL 数据库配置了

6.配置postgres.conf和pg_hba.conf文件

修改ssl mode 为on,设置ssl_ca_file为root.crt

【转帖】建立安全SSL连接PostgreSQL数据库服务器_服务器_09

修改pg_hba.conf文件,新增ssl认证连接的规则

【转帖】建立安全SSL连接PostgreSQL数据库服务器_服务器_10

7.重启数据库,规则生效

【转帖】建立安全SSL连接PostgreSQL数据库服务器_postgresql_11