postgres-网络传输安全-openssl
网络传输安全
默认情况下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的更多相关文章
- App安全之网络传输安全
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- APP安全--网络传输安全 AES/RSA/ECC/MD5/SHA
移动端App安全如果按CS结构来划分的话,主要涉及客户端本身数据安全,Client到Server网络传输的安全,客户端本身安全又包括代码安全和数据存储安全.所以当我们谈论App安全问题的时候一般来说在 ...
- ASP.NET知识总结(1.网络传输层)
1.网络传输层 1应用层(HTTP.FTP.SMTP)报文Message 2传输层(TCP.UDP)报文段Segment,为运行在不同主机上的应用程序进程间提供数据 传输服务.通过套接字(Socket ...
- atitit.二进制数据无损转字符串网络传输
atitit.二进制数据无损转字符串网络传输 1. gbk的网络传输问题,为什么gbk不能使用来传输二进制数据 1 2. base64 2 3. iso-8859-1 (推荐) 2 4. utf-8 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)
MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...
- udp 视频包网络传输花屏
视频数据传输在传输层可以选择TCP或者UDP,TCP面向连接,传输中断,发送端是知道的.TCP传输的好处是不丢包,坏处是网络不太好的情况下会越堵越严重.UDP非面向连接,发送端只管发送数据,接收端有没 ...
- 网络传输速度bps与下载文件所需时间的换算
相信很多同志都非常关注自己家的计算机上网的宽带是多少.关心单位上网的宽带是多少! 但是很多同志都经常误解网络传输速度,以至于责备网络接入商(电信.网通.铁通等单位)欺骗用户,限制上网的速度! 本文,就 ...
- Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完毕測试代码)
MD5和RSA是网络传输中最经常使用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,仅仅能加密而不能解密. ...
随机推荐
- Apache htaccess 中的RewriteCond 规则介绍 (转)
apache 模块mod_rewrite 提供了一个基于正则表达式分析器的重写引擎来实时重写URL请求.它支持每个完整规则可以拥有不限数量的子规则以及附加条件规则的灵活而且强大的URL操作机制.此UR ...
- 一些php文件函数
当读入一个巨大的字符串的时候不能使用file_get_contents('文件名') 应该 使用fopen('文件名','r') feof('文件名') //判断是否读到了文件结尾 ******** ...
- 杭电OJ1062---Text Reverse(c++)(C++库getline的使用)
Text Reverse Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- MySQL更新勿用and
项目实战 一次错误的更新 更新前的数据 执行更新语句 然后我们查看下更新后的数据,发现居然数据为空? 使用主键id的方式查询这条数据,发现需要更新的手机号码居然变为了0 当我们把更新语句中的and ...
- 【.NET与树莓派】上手前的一些准备工作
.NET Iot 不是什么新鲜事物,百科很强大,故老周在此也不必多介绍.现在的时代和老周当年学 QBasic 的时代不同,那时候拉根电话线上网,下载速度只有可怜的 3.5 kb/s.而且还要去店里买上 ...
- 【Linux】 多个会话同时执行命令后history记录不全的解决方案
基本认识 linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场 ...
- Oracle 索引原理分析
索引是一种允许直接访问数据表中某一数据行的树型结构,为了提高查询效率而引入,是一个独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数据的指针(地址).对索引进行的I/O ...
- 【Mysql】[Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes
今天用Navicat导入的时候报错 [Err] 1153 - Got a packet bigger than 'max_allowed_packet' bytes 原因是数据库默认是16M的数据,这 ...
- JDBC入门程序总结
JDBC本质 只是一个接口 每个数据库的规范 就是实现类的接口 其实是官方 定义的一套操作所有关系型数据库的规则,就是接口,各个数据库厂商去实现这套接口,提供数据库驱动jar包, 我们可以使用这套接口 ...
- ctfshow—web—web4
打开靶机 发现与web3很相似,测试文件包含未成功 此题有两种解决方法 一.日志注入 查看日志的默认目录,得到了日志文件 ?url=/var/log/nginx/access.log 进行日志注入 & ...