网络传输安全

默认情况下pg服务端和客户端之间的数据传输是明文传输,有一定的安全隐患。pg中可以使用ssl进行安全的tcp/ip连接,以密文的形式进行数据的安全传输。

这个特性要求在客户端和服务器都安装OpenSSL,并且在编译pg的时候打开这个支持,使用openssl指令生成私钥和证书,用来对数据加解密

注意在编译安装pg的时候需要添加--with-openssl参数,让pg支持ssl认证方式

./configure   --with-openssl
--如果没有加上--with-openssl参数,在打开ssl配置,启动pg的时候会报错
SSL is not supported by this build

使用opsnessl生成密钥和证书

--生成一个有效期365天的简单自签名证书,将bhost.yourdomain.com替换为服务器的主机名
openssl req -new -x509 -days 365 -nodes -text -out server.crt \
Ceyout server.key -subj "/CN=dbhost.yourdomain.com"
--然后执行:
chmod og-rwx server.key

配置postgres.conf和pg_hba.conf文件

--修改postgres.conf
ssl=on
ssl_cert_file='server.crt'
ssl_key_file='server.key' --修改pg_hba.conf,新增ssl认证连接规则
hostssl all all 0.0.0.0/0 md5

重启数据库,ssl生效

[postgres@localhost ~]$ psql -Usa postgres -h localhost
Password for user sa:
psql (11.1)
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
Type "help" for help. postgres=# select pg_backend_pid(), ssl_is_used(), ssl_version(), ssl_cipher();
pg_backend_pid | ssl_is_used | ssl_version | ssl_cipher
----------------+-------------+-------------+-----------------------------
12401 | t | TLSv1.2 | ECDHE-RSA-AES256-GCM-SHA384
(1 row)
  • 验证传输加密
1.--创建t_ssl测试表
postgres=# create table t_ssl(id int);
CREATE TABLE
postgres=# insert into t_ssl select generate_series(1,100);
INSERT 0 100 2.--在客户端用psql远程连接数据库(如果抓包后再连接会把这个信息也抓进去)
psql -Usa postgres -p 6543 -h ip 3.--在服务器端使用tcpdump抓取数据包
[root@localhost opt]# tcpdump host ip -w /home/opt/ssl.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 4.--在客户端使用psql执行命令
select * from t_ssl limit 10; 5.--使用wireshark工具对抓取的包解析
0000 00 50 56 86 d3 fd 00 0c 29 c8 7d 95 08 00 45 00 .PV.....).}...E.
0010 00 74 5e 01 40 00 40 06 63 a1 ac 19 10 44 ac 19 .t^.@.@.c....D..
0020 10 6b 8b 2c 19 8f 68 de d1 97 c9 c2 2a 9b 80 18 .k.,..h.....*...
0030 00 b3 2a 11 00 00 01 01 08 0a 63 01 30 c1 9a 61 ..*.......c.0..a
0040 6c 16 17 03 03 00 3b dd ae 8c 9b 38 9b 7d 02 9f l.....;....8.}..
0050 68 1a 42 05 91 11 42 4d 95 d0 e4 1b db d4 b9 46 h.B...BM.......F
0060 7c fa fd 71 3d 70 f6 0b ea bb ab 5f 16 1c 89 b2 |..q=p....._....
0070 c3 79 50 28 bf 52 93 c8 17 88 ec 35 f7 53 b2 7f .yP(.R.....5.S..
0080 a2 9a 6.--如果不使用openssl进行数据加密抓包的话,传输的sql会被抓取到
0000 00 50 56 86 d3 fd 00 0c 29 c8 7d 95 08 00 45 00 .PV.....).}...E.
0010 00 57 b5 0c 40 00 40 06 0c b3 ac 19 10 44 ac 19 .W..@.@......D..
0020 10 6b 8a fa 19 8f e3 33 04 75 b9 1a 0d 9f 80 18 .k.....3.u......
0030 00 7b 87 09 00 00 01 01 08 0a 62 f9 bc 8b 9a 5a .{........b....Z
0040 7f ee 51 00 00 00 22 73 65 6c 65 63 74 20 2a 20 ..Q..."select *
0050 66 72 6f 6d 20 74 5f 73 73 6c 20 6c 69 6d 69 74 from t_ssl limit
0060 20 31 30 3b 00 10;.

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

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

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

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

参考文档

postgres-网络传输安全-openssl的更多相关文章

  1. App安全之网络传输安全

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  2. APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA

    移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...

  3. ASP.NET知识总结(1.网络传输层)

    1.网络传输层 1应用层(HTTP.FTP.SMTP)报文Message 2传输层(TCP.UDP)报文段Segment,为运行在不同主机上的应用程序进程间提供数据 传输服务.通过套接字(Socket ...

  4. atitit.二进制数据无损转字符串网络传输

    atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 1 2. base64 2 3. iso-8859-1  (推荐) 2 4. utf-8 ...

  5. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

  6. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  7. udp 视频包网络传输花屏

    视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...

  8. 网络传输速度bps与下载文件所需时间的换算

    相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就 ...

  9. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)

    MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...

随机推荐

  1. Shell 编程(一)

    为什么学习 Shell 编程? 用 shell 来进行服务器的管理或维护 对于大数据程序员来说,需要编写 shell 来管理集群 Shell 是什么?   Shell 是一个命令解释器,它为用户提供了 ...

  2. 编写 Dockerfile 生成自定义镜像

    一般情况下我们可以从公共渠道诸如 DockerHub 获取镜像上获取镜像,但是在实际生产过程中,往往需要定制化的镜像,例如修改一些配置文件,增加一些特殊的命令或软件等需求,这时就需要通过编写 Dock ...

  3. 短信平台软件开发,短信发送平台销售,短信软件源码,G客短信发送平台

    一:web短信平台组成  需要短信软件平台源码的联系QQ:290615413 vx:290615413  整套短信系统平台还是由B/S(客户端+后台,取消了以前C/S的管理后台) ,C/S发送服务端和 ...

  4. Centos 6 下安装 OSSEC-2.8.1 (一)

    ossec -2.8.1 安装: ## 1 ) 安装依赖包: RedHat / Centos / Fedora / Amazon Linux yum install -y pcre mysql mys ...

  5. Openstack OCATA 安装环境说明(一) 未完成版本

    1 Openstack简介: 2 实验说明: 3 图例: 4 实验环境说明: 4.1 ) 网卡说明: 网卡名 网 段 连接方式 说明 eth0 10.10.5.0/24 仅主机网络 内部网络自动以IP ...

  6. 【Java】Java注释 - 单行、块、文档注释

    简单记录,Java 核心技术卷I 基础知识(原书第10 版) 注释 我们在编写程序时,经常需要添加一些注释,用来描述某段代码的作用,提高Java源程序代码的可读性,使得Java程序条理清晰. 写代码的 ...

  7. 树莓派3B装ubuntu server后开启wifi

    树莓派官网选择ubuntu server下载映像 step 1: 使用SDFormatter格式化SD卡: step2: 使用win32diskimager工具将映像写入准备好的SD卡: step3: ...

  8. uni-app开发经验分享二十: 微信小程序 授权登录 获取详细信息 获取手机号

    授权页面 因为微信小程序提供的 权限弹窗 只能通用户确认授权 所以可以 写一个授权页面,让用户点击 来获取用户相关信息 然后再配合后台就可以完成登录 <button class="bt ...

  9. linux设备文件

    一.前言 在调用了alloc_chrdev_region函数或register_chrdev_region函数之后可以在/proc/devices中看到该设备的主设备号,比如我注册的hello模块的主 ...

  10. 文件的上传/下载+在线游览(转化html)--不需要在线插件//自己写的小方法

    1 /// <summary> 2 /// 文件上传下载帮助类 3 /// </summary> 4 public static class FileHelper 5 { 6 ...