vastbase支持SSL傳輸加密

1.搭建CA環(huán)境(使用數(shù)據(jù)庫(kù)OS賬戶vastbase)

1.1.創(chuàng)建認(rèn)證機(jī)制配置目錄

cd ~
mkdir test
image.png

1.2.拷貝openssl文件到上述配置目錄

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

1.3.開(kāi)始在 test文件夾下 創(chuàng)建CA環(huán)境

cd ~/test 
1)創(chuàng)建文件夾demoCA./demoCA/newcerts./demoCA/private 并授權(quán)
mkdir ./demoCA ./demoCA/newcerts ./demoCA/private 
chmod 777 ./demoCA/private 
2)創(chuàng)建serial文件,寫(xiě)入01 
echo '01'>./demoCA/serial 
3)創(chuàng)建文件index.txt 
touch ./demoCA/index.txt 
4)修改openssl.cnf配置文件中配置項(xiàng)[ CA_default ]下的dir參數(shù) 
dir = ./demoCA 
default_md = sha256 
--至此CA環(huán)境搭建完成
image.png

2.生成根私鑰(root用戶下執(zhí)行)

2.1.生成CA私鑰 (openssl是數(shù)據(jù)庫(kù)安裝路徑下的一二進(jìn)制工具)

'[root@tpcc02 /home/vastbase/test]#cd /home/vastbase/test/
[root@tpcc02 /home/vastbase/test]#openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048 
-----執(zhí)行以上命令,會(huì)要求輸入兩次密碼  sys_Oracle_1
image.png

3.生成根證書(shū)請(qǐng)求文件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
image.png

4.生成自簽發(fā)根證書(shū)

4.1.修改openssl.cnf文件中的配置項(xiàng)[usr_cert]下的basicConstraints參數(shù):

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

4.2.生成CA自簽發(fā)根證書(shū)

'[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, 兩次確認(rèn)輸入 y
--至此CA根證書(shū)自簽發(fā)完成,根證書(shū)demoCA/cacert.pem。
image.png

5.生成服務(wù)端證書(shū)私鑰

5.1.生成服務(wù)器私鑰文件server.key

'[root@tpcc02 /home/vastbase/test]# openssl genrsa -aes256 -out server.key 2048
---連續(xù)輸入兩次密碼 sys_Oracle_1
image.png

6.生成服務(wù)端證書(shū)請(qǐng)求文件

6.1.生成服務(wù)器證書(shū)請(qǐng)求文件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
image.png

7.生成服務(wù)端證書(shū)

7.1.修改openssl.cnf文件中的配置項(xiàng)[usr_cert]下的 basicConstraints 參數(shù):

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

7.2.修改 demoCA/index.txt.attr中屬性為no。

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

7.3.對(duì)生成的服務(wù)器證書(shū)請(qǐng)求文件進(jìn)行簽發(fā),簽發(fā)后將生成正式的服務(wù)器證書(shū)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, 兩次確認(rèn)輸入 y
image.png

7.4.如果不去掉服務(wù)器私鑰的密碼保護(hù)需要使用vb_guc工具對(duì)存儲(chǔ)密碼進(jìn)行加密保護(hù)(vastbase用戶下執(zhí)行)

[vastbase@tpcc02 ~/test]$vb_guc encrypt -M server -K sys_Oracle_1 -D ./ 
---vb_guc加密后會(huì)生成server.key.cipher,server.key.rand兩個(gè)私鑰密碼保護(hù)文件。
image.png

8.客戶端證書(shū)、私鑰生成

8.1.生成客戶端私鑰

'[root@tpcc02 /home/vastbase/test]# openssl genrsa -aes256 -out client.key 2048
輸入兩次密碼 sys_Oracle_1
image.png

8.2.生成客戶端證書(shū)請(qǐng)求文件

'[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
image.png

8.3.對(duì)生成的客戶端證書(shū)請(qǐng)求文件進(jìn)行簽發(fā),簽發(fā)后將生成正式的客戶端證書(shū)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, 兩次確認(rèn)輸入 y
image.png

8.4.如果不去掉客戶端私鑰的密碼保護(hù)需要使用vb_guc工具對(duì)存儲(chǔ)密碼進(jìn)行加密保護(hù)

[vastbase@tpcc02 ~/test]$ vb_guc encrypt -M client -K sys_Oracle_1 -D ./
---vb_guc加密后會(huì)生成client.key.cipher,client.key.rand兩個(gè)私鑰密碼保護(hù)文件。
image.png

8.5.將客戶端密鑰轉(zhuǎn)化為DER格式,方法如下:

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

9.數(shù)據(jù)庫(kù)配置

9.1.拷貝 server.crt、server.key、server.key.cipher、server.key.rand、server.req、cacert.pem拷貝至實(shí)例目錄下,并修改權(quán)限:

'[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

9.2.在vastbase用戶下拷貝認(rèn)證文件:

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

image.png

9.3.授權(quán)600權(quán)限

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

9.4.在postgresql.conf文件中添加相關(guān)參數(shù):

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

9.5.在pg_hba.conf中添加hostssl,重啟數(shù)據(jù)庫(kù)restart

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

9.6.配置客戶端PGSSLCERT、PGSSLKEY、PGSSLMODE、PGSSLROOTCERT參數(shù):

[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

9.7.修改客戶端秘鑰的權(quán)限:

[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
image.png

image.png

10.測(cè)試驗(yàn)證

10.1.客戶端vsql連接服務(wù)端:

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

10.2.vds開(kāi)發(fā)工具連接數(shù)據(jù)庫(kù)(SSL方式):

image.png

10.3.使用tcpdump工具抓取傳輸數(shù)據(jù)(加密前是明文,加密后是密文)

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

10.4.在vds客戶端發(fā)送查詢表的sql

image.png

10.5.tcpdump 已經(jīng)能正常抓取到數(shù)據(jù),為密文

image.png

11.JDBC連接示例:

import java.util.Properties;

String urlWithCe = "jdbc:postgresql://10.0.0.152:5432/testdb" ;
Properties properties = new Properties();
// 配置以ssl訪問(wèn)
properties.setProperty("ssl", "true");
// 配置根證書(shū)地址
properties.setProperty("sslrootcert", "cacert.pem");
// 配置客戶端私鑰地址

properties.setProperty("sslkey", "client.key");
// 配置客戶端證書(shū)地址
properties.setProperty("sslcert", "client.crt");
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection(urlWithCe, properties);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容