原 PostgreSQL备份加密方法

本文加密方式是在利用pg_dump备份出文件后直接利用openssl进行文件加密。

1、生产密钥:      利用各种参数进行建立公私密钥,这里利用输入参数作为密钥生成的一部分,其他的可以手动添加,脚本如下:

[sure@localhost bin]$ cat createpem.sh
#!/bin/bash

data="$1"

openssl req -x509 -nodes -days 1000000 -newkey rsa:4096 -keyout backup_key.pem \
 -subj "/C=US/ST=Illinois/L=Chicago/O=IT/CN="${data} -out backup_key.pem.pub

这里的backup_key.pem和 backup_key.pem.pub就是公司密钥,名字可以修改。

2、加密脚本:      将参数直接传递给pg_dump,然后进行加密,当第一个参数为"encrypt"时,则进行加密,否则按照pg_dump本身的参数进行执行,脚本如下:

[sure@localhost bin]$ cat pg_dump.sh
#!/bin/bash

isencrypt=$1
database=$2
output=$3
pubpath=$4

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pubpath} ]
	then
		pubpath="${basepath}/backup_key.pem.pub"
fi

if [ ${isencrypt} == "encrypt" ]
	then
	${basepath}/pg_dump ${database} | openssl smime -encrypt -aes256 -binary -outform DEM -out ${output} ${pubpath}
else
	${basepath}/pg_dump $@
fi

这里是利用公钥进行加密的,第一个参数为"encyrpt",作为是否加密的标志;                                      第二个参数为pg_dump原本的选项,不过要注意的是,如果是多个参数的话,需要用“”引起来;                                      第三个参数为输出文件名;                                      第四个参数为公钥,这里可以允许用户指定公钥进行加密,不输入,则默认为当前目录下的公钥。 不加密,则和原来一致。

3、解密脚本:     首先对加密文件进行解密,才可以还原。脚本如下:

[sure@localhost bin]$ cat dencrypt_backup
#!/bin/bash

input=$1
output=$2
pripath=$3

basepath=$(cd `dirname $0`; pwd)

if [ ! ${pripath=} ]
	then
		pripath="${basepath}/backup_key.pem"
fi

openssl smime -decrypt -in ${input} -binary \
  -inform DEM -inkey ${pripath} -out ${output}

输入输出文件名作为参数,私钥为第三个参数,如上不输入都会默认使用当前目录下的密钥文件。

以上就是本次PostgreSQL备份加密使用到的脚本,下面是一次完整的使用过程:

[sure@localhost bin]$ ./createpem.sh highgo
Generating a 4096 bit RSA private key
...................................................................................................................++
.........................................................++
writing new private key to 'backup_key.pem'
-----
[sure@localhost bin]$ ll backup_key.pem*
-rw-rw-r--. 1 sure sure 3272 Mar 25 09:30 backup_key.pem
-rw-rw-r--. 1 sure sure 1952 Mar 25 09:30 backup_key.pem.pub

[sure@localhost bin]$ ./pg_dump.sh -U syssso highgo > bak1.sql
Password: 
[sure@localhost bin]$ ./pg_dump.sh encrypt "-U syssso highgo" bak2.sql.encrypt /opt/db/20150423/bin/backup_key.pem.pub 
Password: 
[sure@localhost bin]$ ll bak*
-rw-rw-r--. 1 sure sure  604 Mar 25 09:31 bak1.sql
-rw-rw-r--. 1 sure sure 1321 Mar 25 09:32 bak2.sql.encrypt
[sure@localhost bin]$ ./dencrypt_backup bak2.sql.encrypt bak2.sql
[sure@localhost bin]$ ls bak2*
bak2.sql  bak2.sql.encrypt
[sure@localhost bin]$

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏子勰随笔

Android签名校验机制(数字证书)

950110
来自专栏Python爬虫与数据挖掘

在Windows上如何安装和彻底卸载Adobe Flash Player教程

很多小伙伴在安装水晶易表的时候,经常会遇到“Xcelsius2008需要使用Adobe Flash Player(9.151或者更高版本)”报错问题,如下图所示...

20620
来自专栏A周立SpringCloud

Config Server——配置内容的加密与解密 详解

我们在Git仓库中存储的都是明文,但在很多场景下,某些敏感的配置内容(例如数据库账号、密码),应当被加密存储以提高安全性。Config Server为配置内容的...

35660
来自专栏史上最简单的Spring Cloud教程

JSON Web Tokens介绍

什么是JWT 这篇文章选择性翻译于https://jwt.io/introduction/ JWT简介 JSON Web Token(JWT)是一种开放标准(...

23380
来自专栏racaljk

qt关键字高亮

qt的高亮显示主要是使用qsyntaxhighlighter类,由于qsyntaxhighlighter是抽象基类,所以需要继承并自己实现

13630
来自专栏程序猿DD

Spring Cloud构建微服务架构:分布式配置中心(加密解密)

最近正好想发一篇关于配置中心加密的细节内容,结果发现基础的加密解密居然漏了,所以在这个入门系列中补充一下。后面再更新一下,使用配置中心的一些经验和教训。 ? 在...

36670
来自专栏流媒体

Https详解+wireshark抓包演示

在说HTTPS之前先说说什么是HTTP,HTTP就是我们平时浏览网页时候使用的一种协议。HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传...

61750
来自专栏行者悟空

Nginx启用https访问

2.2K30
来自专栏菩提树下的杨过

[原创图解]Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置

[原创图解]Win2003证书服务配置/客户端(服务端)证书申请/IIS站点SSL设置 --欢迎转载,但转载请注明来自“菩提树下的杨过” 一.CA证书服务...

34350
来自专栏james大数据架构

Android 程序打包及签名

为什么要签名???     开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。    ...

23560

扫码关注云+社区

领取腾讯云代金券