前物联网的挑战之一就是提供最高的安全级别。这就是为什么需要开启SSL连接到 PostgreSQL。
当你想要安全的存储数据到PostgreSQL数据中时,第一件事就是通过加密的连接保护身份认证凭证和存储数据被拦截。
下面,我们将对数据库服务器进行适当的调整,来开启SSL和生成证书。然后,在客户端机器上创建和添加证书,最后,通过pgAdmin 工具来建立到服务器是安全连接。让我们开始吧。
SSL双向认证和SSL单向认证的区别
双向认证 SSL 协议要求服务器和用户双方都有证书。单向认证 SSL 协议不需要客户拥有CA证书,服务器端不会验证客户证书,以及在协商对称密码方案,对称通话密钥时,服务器发送给客户的是没有加过密的(这并不影响 SSL 过程的安全性)密码方案。这样,双方具体的通讯内容,都是加过密的数据,如果有第三方攻击,获得的只是加密的数据,第三方要获得有用的信息,就需要对加密的数据进行解密,这时候的安全就依赖于密码方案的安全。而幸运的是,目前所用的密码方案,只要通讯密钥长度足够的长,就足够的安全。这也是我们强调要求使用128位加密通讯的原因。
一般Web应用都是采用SSL单向认证的,原因很简单,用户数目广泛,且无需在通讯层对用户身份进行验证,一般都在应用逻辑层来保证用户的合法登入。但如果是企业应用对接,情况就不一样,可能会要求对客户端(相对而言)做身份验证。这时就需要做SSL双向认证。
由于单向认证和双向认证的区别仅在于创建连接阶段,数据的传输均为加密的,因此客户端与PG服务端的连接采取SSL单向认证即可,即仅在PG Server端配置SSL证书。
PostgreSQL服务器配置
1. 首先连接到PG数据库服务器
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
在生成server.key文件的过程中,它会要求输入密码— 随意输入并确认。
现在,为了在以后使用这个key,你需要删除在上面添加的密码。通过如下命令实现:
openssl rsa -in server.key -out server.key
- 1
再次输入密码来确认。
为私钥文件设置适当的权限和所有权,使用如下命令:
chmod 400 server.key
chown ec2-user:ec2-user server.key
- 1
- 2
4. 接下来,您需要创建基于server.key文件的服务器证书, 如下:
openssl req -new -key server.key -days 3650 -out server.crt -x509
- 1
也可以通过-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’
参数来设置你的个人资料:
5.为了得到自己签名的证书,把生成的服务器证书作为受信任的根证书,只需要复制并取一个合适的名字
cp server.crt root.crt
- 1
现在,三个证书文件都有了,接下来就可以处理激活SSL以及使用它的PostgreSQL 数据库配置了
6.配置postgres.conf和pg_hba.conf文件
修改ssl mode 为on,设置ssl_ca_file为root.crt
修改pg_hba.conf文件,新增ssl认证连接的规则
7.重启数据库,规则生效