网络传输安全

默认情况下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. http ContentLength 为0 下载问题

    如图 通过http 下载某个东西 ,    WebResponse response = request.GetResponse(); response 调试如图 ContentLength 为0  ...

  2. 什么时候使用Get请求/POST请求?

    当请求无副作用时(如进行搜索),便可使用GET方法:当请求有副作用时(如添加数据行),则用POST方法. 一个比较实际的问题是:GET方法可能会产生很长的URL,或许会超过某些浏览器与服务器对URL长 ...

  3. MySQL中in('5,6,7')只取第一个id为5对应的数据的思考

    通过阅读本文你可以更好的理解两个知识点: 1.#{}与${}在实际项目中的使用,避免在项目中使用不当造成不可预知的Bug; 2.MySQL中in里面如果是字符串的话,为什么只取第一个对应的数据,eg: ...

  4. 【C++】《C++ Primer 》第九章

    第九章 顺序容器 一.顺序容器概述 顺序容器(sequential container):为程序员提供了控制元素存储和访问顺序的能力.这种顺序不依赖于元素的值,而是与元素加入容器时的位置相对应. 不同 ...

  5. PAT甲级 1155 Heap Paths (30分) 堆模拟

    题意分析: 给出一个1000以内的整数N,以及N个整数,并且这N个数是按照完全二叉树的层序遍历输出的序列,输出所有的整条的先序遍历的序列(根 右 左),以及判断整棵树是否是符合堆排序的规则(判断是大顶 ...

  6. 【Linux】rsh进程缓慢问题处理

    环境CentOS 6.5 由于项目上线时间很长,服务器持续很久没有关机重启过,随后发现rsh反应特别慢 rsh登陆服务器的反应最慢时候3分钟才可以建立链接,登陆之后查看服务器负载是否正常,查看cpu, ...

  7. 【EXP/IMP】问题总结

    为了使测试与生产数据保持一致,只需要导出数据的时候,可以将测试库的表truncate,保留其它如索引,trigger,constraints,grants等不用再重新导. exp时候rows=y,其它 ...

  8. 【IMP】导出的时候显示ddl建表语句

    导出数据后,在导入的时候想要显示出建表语句,可以用show=y这个选项来实现 imp test/test file=test.dmp ignore=y show=y fromuser=test1 to ...

  9. AmoebaNet:经费在燃烧,谷歌提出基于aging evolution的神经网络搜索 | AAAI 2019

    论文提出aging evolution,一个锦标赛选择的变种来优化进化算法,在NASNet搜索空间上,对比强化学习和随机搜索,该算法足够简洁,而且能够更快地搜索到更高质量的模型,论文搜索出的Amoeb ...

  10. SAP demo包 示例程序

    在SAP的这个开发类中SABAPDEMOS,存放了N多的demo程序 有空的时候,可以看看.