数据传输加密是指在网络中传输的数据需要加密传输,从而确保数据的机密性和完整性。
针对网络中传输的数据进行加密,焦点就在连接上。对于GBase 8s体系下,总共有如下连接场景需要进行数据传输加密:
GBase 8s配置传输加密功能,首先需要生成数字证书,后续将数字证书分别导入到服务端和客户端的密钥数据库(也称作密钥库)中。
附件:gbasedbt_certs.tar 包含了已经生成的私有数字证书。
数字证书的密钥是:11111111
gbasedbt_certs.tar
首先,Server需要部署的内容包括如下部分:
DBSERVERALIASES gbase01_ssl
VPCLASS encrypt,num=1
NETTYPE socssl,1,150,NET
${GBASEDBTSQLHOSTS}.ext,指向数据加密传输的配置文件。
环境变量中必须要指定GBASEDBTSQLHOSTS配置参数指定的文件。
${GBASEDBTDIR}/certs 目录,保存证书、私钥和根证。
解压gbasedbt_certs.tar到${GBASEDBTDIR} 目录下,生成certs。
GBASEDBTSQLHOSTS文件
GBASEDBTSQLHOSTS文件中有一项配置是服务端实例或实例别名的连接类型。此次新增了一种提供传输加密功能的连接类型——socssl。要使用该功能的话,需要将对应实例的连接类型配置成socssl。
gbase01_ssl onsocssl 0.0.0.0 9089
本章节的所有操作都需要使用操作系统的gbasedbt用户完成。
需要通过${GBASEDBTSQLHOSTS}.ext指定配置文件。
假定Server安装在/opt/gbase中,在sqlhosts中指定socssl的实例名是gbase01_ssl。
配置文件的示例如下:
# ${GBASEDBTSQLHOSTS}.ext
[config]
GBS_TYPE=gbasessl
# DBSERVERNAME or DBSERVERALIASES with onsocssl
[gbase01_ssl]
server=gbase_ssl_server
client=gbase_ssl_client
[gbase_ssl_server]
TLSCACertificateFile=/opt/gbase/certs/ca/ca-cert.pem
TLSCertificateFile=/opt/gbase/certs/server/server-cert.pem
TLSCertificateKeyFile=/opt/gbase/certs/server/server-key.pem
TLSCertificateKeyFilePasswd=DqOUlNa1c2OMcEEbvTG30w==
TLSVerifyCert=never
[gbase_ssl_client]
TLSCACertificateFile=/opt/gbase/certs/ca/ca-cert.pem
TLSCertificateFile=/opt/gbase/certs/dba1/dba1-cert.pem
TLSCertificateKeyFile=/opt/gbase/certs/dba1/dba1-key.pem
TLSCertificateKeyFilePasswd=DqOUlNa1c2OMcEEbvTG30w==
TLSVerifyCert=never
由于Server端也会部署dbaccess,另外,Server端也会安装csdk。因此,需要在配置文件中写入gbase_ssl_client。
修改$GBASEDBTDIR/etc/sqlhosts配置文件, 将需要启用传输加密功能的实例的连接类型设置为onsocssl;如下述示例中,两个数据库服务名称gbase01、gbase01_ssl,服务名gbase01连接类型为onsoctcp,为普通的tcp通信方式,服务名gbase01_ssl的连接类型为onsocssl,启用了传输加密方式:
gbase01 onsoctcp 192.168.0.4 9088
gbase01_ssl onsocssl 192.168.0.4 9089
修改$GBASEDBTDIR/etc/$ONCONFIG配置文件,配置参数。
DBSERVERNAME gbase01
DBSERVERALIASES gbase01_ssl
VPCLASS encrypt,num=1
NETTYPE socssl,1,50,NET
服务端证书配置好后,需要重启数据库服务来生效。
这里特指只安装了CSDK的客户端
CSDK需要部署的内容包括如下部分:
客户端也需要通过${GBASEDBTSQLHOSTS}.ext指定数据库配置文件。
假定CSDK客户端安装在/opt/gbase中。客户端需要连接的实例名是gbase01_ssl。配置文件示例,如下:
# ${GBASEDBTSQLHOSTS}.ext
[config]
GBS_TYPE=gbasessl
# DBSERVERNAME or DBSERVERALIASES with onsocssl
[gbase01_ssl]
client=gbase_ssl_client
[gbase_ssl_client]
TLSCACertificateFile=/opt/gbase/certs/ca/ca-cert.pem
TLSCertificateFile=/opt/gbase/certs/dba1/dba1-cert.pem
TLSCertificateKeyFile=/opt/gbase/certs/dba1/dba1-key.pem
TLSCertificateKeyFilePasswd=DqOUlNa1c2OMcEEbvTG30w==
TLSVerifyCert=never
dbaccess、odbc通过修改$GBASEDBTDIR/etc/sqlhosts配置文件来指定连接的启用传输加密的数据库服务实例,并将连接类型设置为onsocssl来启用客户端的传输加密功能,示例如下:
gbase01_ssl onsocssl 192.168.0.4 9089
示例中gbase01_ssl为启用传输加密的数据库服务实例。
配置完后通过dbaccess连接启用传输加密的数据库服务,如果可以正常连接并执行SQL语句,则dbaccess传输加密功能配置成功。
export GBASEDBTDIR=/opt/gbase # 安装目录
export GBASEDBTSERVER=gbase01_ssl # 服务名称
export GBASEDBTSQLHOSTS=${GBASEDBTDIR}/etc/sqlhosts # SQLHOSTS文件
示例中GBASEDBTDIR根据dbaccess为Server还是CSDK中的dbaccess来设置为CSDK或者Server的安装路径。
2) dbaccess连接
执行dbaccess,然后执行SQL,如果执行成功则说明dbaccess配置后可以正常运行。
可以通过unixODBC程序来测试ODBC在配置传输加密功能后能否正常使用
export GBASEDBTDIR=/opt/gbase # 安装目录
export GBASEDBTSERVER=gbase01_ssl # 服务名称
export GBASEDBTSQLHOSTS=${GBASEDBTDIR}/etc/sqlhosts # SQLHOSTS文件
export ODBCINI=/home/gbase/odbc.ini # ODBCINI位置
export LD_LIBRARY_PATH=${GBASEDBTDIR}/lib:$GBASEDBTDIR/lib/cli:${GBASEDBTDIR}/lib/esql:${LD_LIBRARY_PATH} # LD库文件目录
;---------------------------------------------------------------------------
; GBase ODBC Sample File
;
; File: odbc.ini
;
;---------------------------------------------------------------------------
[ODBC Data Sources]
gbase01_ssl=GBase ODBC DRIVER
;
; Define ODBC Database Driver's Below - Driver Configuration Section
;
[gbase01_ssl]
Driver=/opt/gbase/lib/cli/iclis09b.so
Description=GBase ODBC DRIVER
Database=testdb
LogonID=gbasedbt
pwd=GBase123
Servername=gbase01_ssl
CursorBehavior=0
CLIENT_LOCALE=zh_CN.utf8
DB_LOCALE=zh_CN.utf8
TRANSLATIONDLL=/opt/gbase/lib/esql/igo4a304.so
;
; UNICODE connection Section
;
[ODBC]
;uncomment the below line for UNICODE connection
;UNICODE=UCS-4
;
; Trace file Section
;
Trace=0
TraceFile=/tmp/odbctrace.out
InstallDir=/opt/gbase
TRACEDLL=idmrs09a.so
isql -v gbase01_ssl
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> select user from dual;
+---------------------------------+
| |
+---------------------------------+
| gbasedbt |
+---------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL>
JDBC的传输加密功能独立于其他客户端的配置,在使用JDBC的程序中进行必要的设置。
gbasedbt_certs.tar 解压到jdbc客户端。
例如/home/gbase/java目录下。
本节提供了一个验证JDBC传输加密功能的示例程序,连接数据库服务并获取数据库服务的版本信息,然后按照步骤编译运行即可。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class SSLTest {
public static void main(String[] args) {
Connection conn = null;
try {
/* System properties for keystore */
String propdir = System.getProperty("user.dir");
/* keyStore */
System.setProperty("javax.net.ssl.keyStore", propdir + "/certs/sysdba/sysdba.keystore");
System.setProperty("javax.net.ssl.keyStorePassword", "11111111");
/* trustStore */
System.setProperty("javax.net.ssl.trustStore", propdir + "/certs/ca/ca.truststore");
System.setProperty("javax.net.ssl.trustStorePassword", "11111111");
try {
Class.forName("com.gbasedbt.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
/* useSSL=true;sslConnection=true */
String url = "jdbc:gbasedbt-sqli://a02.gbasedbt.com:9088/testdb:gbasedbtserver=gbase01_ssl;" +
"DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;useSSL=true;sslConnection=true";
String username = "gbasedbt";
String password = "GBase123";
conn = DriverManager.getConnection(url, username, password);
if(conn != null) {
System.out.println(" Successfully connected to GBasedbt database using SSL Connection");
System.out.println(" Database version ...: " + conn.getMetaData().getDatabaseProductName());
}
} catch (Exception e) {
System.err.println("Error Message : " +e.getMessage());
if(e instanceof SQLException)
System.err.println("Error Code : " +((SQLException)e).getErrorCode());
e.printStackTrace();
} finally {
if(conn != null)
try {
conn.close();
} catch (SQLException e) {}
}
}
}
编译,需要将gbasedbtjdbc.jar加入到CLASSPATH中:
javac -cp .:./gbasedbtjdbc.jar SSLTest.java
运行
java -cp .:./gbasedbtjdbc.jar SSLTest
结果如下,表示使用ssl连接成功
Successfully connected to GBasedbt database using SSL Connection
Database version ...: 12.10.FC4G1AEE
注:本文替代之前的版本: GBase 8s传输加密SSL配置