IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> GBase 8s传输加密SSL配置 -> 正文阅读

[网络协议]GBase 8s传输加密SSL配置

1. 概述

数据传输加密是指在网络中传输的数据需要加密传输,从而确保数据的机密性和完整性。
针对网络中传输的数据进行加密,焦点就在连接上。对于GBase 8s体系下,总共有如下连接场景需要进行数据传输加密:

  1. 客户端连接数据库服务端,包含:csdk或jdbc连接GBase 8s。
  2. 客户端连接到连接管理器,包含:csdk或jdbc连接连接管理器。无论连接管理器选择代理,还是重定向,客户端都会建立到连接管理器的连接。
  3. 连接管理器连接数据库服务端。
  4. 数据库服务端连接数据库服务端。对于高可用环境,数据库服务端之间是存在连接的。
    对于连接而言,数据库服务端和连接管理器都存在组的概念。客户端可以选择连接数据库服务端的组或者连接管理器的组。经过调研,真正的连接不是建立在组上的。客户端代码,会根据sqlhosts的配置,在连接前选择合适数据库服务端或连接管理器进行连接。根据这个情况,对于组的连接不需要专门讨论。
    本文基于数据库版本为GBase 8s V8.8 3.0.0_1,操作系统为CentOS 7.8编写。

2. 准备证书

GBase 8s配置传输加密功能,首先需要生成数字证书,后续将数字证书分别导入到服务端和客户端的密钥数据库(也称作密钥库)中。
附件:gbasedbt_certs.tar 包含了已经生成的私有数字证书。
数字证书的密钥是:11111111

gbasedbt_certs.tar

3. 安全连接配置

3.1. 数据库服务端配置

首先,Server需要部署的内容包括如下部分:

  1. onconfig需要配置参数encrypt VP和相应的网络类型。示例如下:
DBSERVERALIASES gbase01_ssl

VPCLASS encrypt,num=1
NETTYPE socssl,1,150,NET
  1. ${GBASEDBTSQLHOSTS}.ext,指向数据加密传输的配置文件。
    环境变量中必须要指定GBASEDBTSQLHOSTS配置参数指定的文件。

  2. ${GBASEDBTDIR}/certs 目录,保存证书、私钥和根证。
    解压gbasedbt_certs.tar到${GBASEDBTDIR} 目录下,生成certs。

  3. GBASEDBTSQLHOSTS文件
    GBASEDBTSQLHOSTS文件中有一项配置是服务端实例或实例别名的连接类型。此次新增了一种提供传输加密功能的连接类型——socssl。要使用该功能的话,需要将对应实例的连接类型配置成socssl。

gbase01_ssl  onsocssl  0.0.0.0 9089
  1. GBASEDBTSQLHOSTS.ext文件
    GBASEDBTSQLHOSTS.ext文件用于ssl的相应配置。
3.1.1. 准备服务端证书文件

本章节的所有操作都需要使用操作系统的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。

3.1.2. 启用加密

修改$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
3.1.3. 配置数据库参数

修改$GBASEDBTDIR/etc/$ONCONFIG配置文件,配置参数。

  1. 使同一实例同时支持普通通讯方式和加密通讯方式:通过设置DBSERVERALIASES来增加服务的别名,这样可以在sqlhosts配置文件中设置当前服务支持多种类型的连接,如下示例中实例名gbase01、gbase01_ssl都为当前数据库服务实例名,但是在sqlhosts配置文件中可以配置为不同的连接类型,这样客户端就可以通过多种通信方式与数据库服务通信:
DBSERVERNAME 		gbase01
DBSERVERALIASES	gbase01_ssl
  1. 配置支持通讯加密的VP:数据库加密和解密操作将由Encrypt VP执行。通过VPCLASS来配置该类型VP的属性;如果未配置VPCLASS,则 Server会默认启动一个 Encrypt VP。VPCLASS的配置请参考《GBase 8s管理员参考手册》,示例如下:
VPCLASS encrypt,num=1
  1. 配置支持通讯加密的连接方式:设置 NETTYPE 来配置数据库连接的轮询线程和每个线程的连接数。如果未配置轮询线程,则 Server将启动一个轮询线程。NETTYPE的配置请参考《GBase 8s管理员参考手册》,示例如下:
NETTYPE socssl,1,50,NET
3.1.4. 重启服务

服务端证书配置好后,需要重启数据库服务来生效。

3.2. 配置CSDK的传输加密

这里特指只安装了CSDK的客户端
CSDK需要部署的内容包括如下部分:

  1. ${GBASEDBTSQLHOSTS}.ext,指向数据加密传输的配置文件
  2. certs目录,保存证书、私钥和根证。
  3. GBASEDBTSQLHOSTS文件
    用来配置待连接的服务端实例或实例别名。和server端一样,需要将对应实例的连接类型配置成socssl。
3.2.1. 准备客户端证书文件

客户端也需要通过${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

3.2.2. dbaccess、odbc之sqlhosts配置

dbaccess、odbc通过修改$GBASEDBTDIR/etc/sqlhosts配置文件来指定连接的启用传输加密的数据库服务实例,并将连接类型设置为onsocssl来启用客户端的传输加密功能,示例如下:

gbase01_ssl		onsocssl	192.168.0.4		9089  

示例中gbase01_ssl为启用传输加密的数据库服务实例。

3.2.3. dbaccess验证

配置完后通过dbaccess连接启用传输加密的数据库服务,如果可以正常连接并执行SQL语句,则dbaccess传输加密功能配置成功。

  1. 配置环境变量:
    创建文件gbase01_ssl.ksh,并通过source命令执行。文件内容如下:
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配置后可以正常运行。

3.2.4. ODBC验证

可以通过unixODBC程序来测试ODBC在配置传输加密功能后能否正常使用

  1. 配置环境变量:
    创建文件gbase01_ssl.ksh,并通过source命令执行。文件内容如下:
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库文件目录
  1. 配置ODBC:
    根据ODBC配置文件${GBASEDBTDIR}/etc/odbc.ini,按照实际环境创建odbc.ini
;---------------------------------------------------------------------------
; 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
  1. ODBC连接测试:
    通过isql -v gbase01_ssl连接到数据库, SQL语句操作如果执行成功则说明ODBC配置后可以正常运行。
isql -v gbase01_ssl
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select user from dual;
+---------------------------------+
|                                 |
+---------------------------------+
| gbasedbt                        |
+---------------------------------+
SQLRowCount returns -1
1 rows fetched
SQL>

3.3. 配置JDBC的传输加密

JDBC的传输加密功能独立于其他客户端的配置,在使用JDBC的程序中进行必要的设置。

3.3.1. JDBC客户端配置证书

gbasedbt_certs.tar 解压到jdbc客户端。

例如/home/gbase/java目录下。

3.3.2. JDBC验证用例

本节提供了一个验证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配置

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:53:50  更:2022-04-09 18:54:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:54:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码