vb配置SSL

1.搭建CA环境(使用数据库OS账户vastbase)

创建认证机制配置目录

cd ~
mkdir test

拷贝openssl文件到上述配置目录

cd /etc/pki/tls 
cp openssl.cnf ~/test 

开始在 test文件夹下 创建CA环境

cd ~/test 
1)创建文件夹demoCA./demoCA/newcerts./demoCA/private 并授权
mkdir ./demoCA ./demoCA/newcerts ./demoCA/private 
chmod 777 ./demoCA/private 
2)创建serial文件,写入01 
echo '01'>./demoCA/serial 
3)创建文件index.txt 
touch ./demoCA/index.txt 
4)修改openssl.cnf配置文件中配置项[ CA_default ]下的dir参数 
dir = ./demoCA 
default_md = sha256 
--至此CA环境搭建完成

2.生成根私钥(root用户下执行)

生成CA私钥 (openssl是数据库安装路径下的一二进制工具)

'[root@tpcc02 /home/vastbase/test]#cd /home/vastbase/test/
[root@tpcc02 /home/vastbase/test]#openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048 
-----执行以上命令,会要求输入两次密码  sys_Oracle_1

3.生成根证书请求文件server.req

'[root@tpcc02 /home/vastbase/test]# openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pem   
---依次输入: 
sys_Oracle_1 |CN   |ningxia |yinchuan|vastdata        |vastbase               |mike         |可忽略(直接回车)       |sys_Oracle_1       |vastdata

4.生成自签发根证书

修改openssl.cnf文件中的配置项[usr_cert]下的basicConstraints参数:

'[root@tpcc02 /home/vastbase/test]# vim openssl.cnf
basicConstraints=CA:TRUE 

生成CA自签发根证书

'[root@tpcc02 /home/vastbase/test]# openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem
----依次输入密码sys_Oracle_1, 两次确认输入 y
--至此CA根证书自签发完成,根证书demoCA/cacert.pem。

5.生成服务端证书私钥

生成服务器私钥文件server.key

'[root@tpcc02 /home/vastbase/test]# openssl genrsa -aes256 -out server.key 2048
---连续输入两次密码 sys_Oracle_1

6.生成服务端证书请求文件

生成服务器证书请求文件server.req

'[root@tpcc02 /home/vastbase/test]# openssl req -config openssl.cnf -new -key server.key -out server.req
---依次输入: 
sys_Oracle_1 |CN   |ningxia |yinchuan|vastdata        |vastbase               |mike         |可忽略       |sys_Oracle_1       |vastdata

7.生成服务端证书

修改openssl.cnf文件中的配置项[usr_cert]下的 basicConstraints 参数:

[usr_cert]
basicConstraints=CA:TRUE 改为 CA:FALSE

修改 demoCA/index.txt.attr中属性为no。

'[root@tpcc02 /home/vastbase/test]#vi demoCA/index.txt.attr 
unique_subject = yes  --改为no

对生成的服务器证书请求文件进行签发,签发后将生成正式的服务器证书server.crt

[root@tpcc02 /home/vastbase/test]#openssl ca  -config openssl.cnf -in server.req -out server.crt -days 3650 -md sha256 
-----依次输入密码 sys_Oracle_1, 两次确认输入 y

如果不去掉服务器私钥的密码保护需要使用vb_guc工具对存储密码进行加密保护(vastbase用户下执行)

[vastbase@tpcc02 ~/test]$vb_guc encrypt -M server -K sys_Oracle_1 -D ./ 
---vb_guc加密后会生成server.key.cipher,server.key.rand两个私钥密码保护文件。

8.客户端证书、私钥生成

生成客户端私钥

'[root@tpcc02 /home/vastbase/test]# openssl genrsa -aes256 -out client.key 2048
输入两次密码 sys_Oracle_1

生成客户端证书请求文件

'[root@tpcc02 /home/vastbase/test]#openssl req -config openssl.cnf -new -key client.key -out client.req     
---依次输入: 
sys_Oracle_1 |CN   |ningxia |yinchuan|vastdata        |vastbase               |mike         |可忽略       |sys_Oracle_1       |vastdata

对生成的客户端证书请求文件进行签发,签发后将生成正式的客户端证书client.crt

[root@tpcc02 /home/vastbase/test]#openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 -md sha256
-----依次输入密码 sys_Oracle_1, 两次确认输入 y

如果不去掉客户端私钥的密码保护需要使用vb_guc工具对存储密码进行加密保护

[vastbase@tpcc02 ~/test]$ vb_guc encrypt -M client -K sys_Oracle_1 -D ./
---vb_guc加密后会生成client.key.cipher,client.key.rand两个私钥密码保护文件。

将客户端密钥转化为DER格式,方法如下:

[root@tpcc02 /home/vastbase/test]#openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt
--输入密码   sys_Oracle_1

9.数据库配置

拷贝 server.crt、server.key、server.key.cipher、server.key.rand、server.req、cacert.pem拷贝至实例目录下,并修改权限:

[root@tpcc02 ~]#cd /home/vastbase/test
[root@tpcc02 /home/vastbase/test]# chown vastbase. client.*
[root@tpcc02 /home/vastbase/test]# chown vastbase. server.*
[root@tpcc02 /home/vastbase/test]# cd demoCA/
[root@tpcc02 /home/vastbase/test/demoCA]# chown vastbase. cacert.pem

在vastbase用户下拷贝认证文件:

[vastbase@tpcc02 ~/test/demoCA]$ cp cacert.pem  $PGDATA
[vastbase@tpcc02 ~/test]$ cp server.* $PGDATA

授权600权限

[vastbase@tpcc02 ~/data/vastbase]$ chmod 600 server.*
[vastbase@tpcc02 ~/data/vastbase]$ chmod 600 cacert.pem

在postgresql.conf文件中添加相关参数:

ssl = on
require_ssl = on
ssl_cert_file='server.crt'
ssl_key_file='server.key'
ssl_ca_file='cacert.pem'

在pg_hba.conf中添加hostssl,重启数据库restart

hostssl all all 0.0.0.0/0 sha256
[vastbase@tpcc02 ~/data/vastbase]$ vb_ctl restart

配置客户端PGSSLCERT、PGSSLKEY、PGSSLMODE、PGSSLROOTCERT参数:

[vastbase@tpcc02 ~]$vim   .Vastbase
export PGSSLCERT="$HOME/test/client.crt"
export PGSSLKEY="$HOME/test/client.key"
export PGSSLMODE="verify-ca"
export PGSSLROOTCERT="$HOME/test/demoCA/cacert.pem"
[vastbase@tpcc02 ~]$ source ~/.Vastbase

修改客户端秘钥的权限:

[vastbase@tpcc02 ~]$ cd test/
[vastbase@tpcc02 ~/test]$ chmod 600 client.key
[vastbase@tpcc02 ~/test]$ chmod 600 client.key.pk8
[vastbase@tpcc02 ~/test]$ chmod 600 client.crt
[vastbase@tpcc02 ~/test]$ chmod 600 client.key.cipher
[vastbase@tpcc02 ~/test]$ chmod 600 client.key.rand
[vastbase@tpcc02 ~/test]$ chmod 600 demoCA/cacert.pem

10.测试验证

客户端vsql连接服务端:

[vastbase@tpcc02 ~/data/vastbase]$ vsql -r -d testdb -h 10.0.0.152 -Utestuser -WHailiang@123

vds开发工具连接数据库(SSL方式):

使用tcpdump工具抓取传输数据(加密前是明文,加密后是密文)

[root@tpcc02 ~]# tcpdump -i ens33 -s 0 -l -w - dst port 5432 | strings

tcpdump 已经能正常抓取到数据,为密文

11. JDBC连接示例

import java.util.Properties;

String urlWithCe = "jdbc:postgresql://10.0.0.152:5432/testdb" ;
Properties properties = new Properties();
// 配置以ssl访问
properties.setProperty("ssl", "true");
// 配置根证书地址
properties.setProperty("sslrootcert", "cacert.pem");
// 配置客户端私钥地址

properties.setProperty("sslkey", "client.key");
// 配置客户端证书地址
properties.setProperty("sslcert", "client.crt");
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection(urlWithCe, properties);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容