DB2配置SSL访问-1、DB2数据库配置SSL证书

配置 DB2 实例中的安全套接字层 (SSL) 支持

DB2® 数据库系统支持 SSL,这意味着也支持 SSL 的 DB2 客户机应用程序可以使用 SSL 套接字连接至 DB2 数据库。CLI、CLP 和 .Net Data Provider 客户机应用程序和使用 IBM® 数据服务器 JDBC 和 SQLJ 驱动程序(4 类连接)的应用程序支持 SSL。

开始之前

在配置 SSL 支持之前,请执行下列步骤:
在 Windows 平台上,确保 IBM Global Security Kit (GSKit) 库的路径出现在 PATH 环境变量中;在 Linux 和 UNIX 平台上,确保该路径出现在 LIBPATH、SHLIB_PATH 或 LD_LIBRARY_PATH 环境变量中。当安装 DB2 数据库系统时,会自动包括 GSKit。
在 Windows 32 位平台上,GSKit 库位于 C:\Program Files\IBM\GSK8\lib 中。在此情况下,系统 PATH 必须包括 C:\Program Files\IBM\GSK8\lib。在 Windows 64 位平台上,64 位 GSKit 库位于 C:\Program Files\IBM\GSK8\lib64 中,而 32 位 GSKit 库位于 C:\Program Files (x86)\IBM\GSK8\lib 中。

在 UNIX 和 Linux 平台上,GSKit 库位于 sqllib/lib/gskit 中。

在非 Windows 平台上,DB2 数据库管理器以本地方式安装 GSKit,对于 32 位和 64 位安装,GSKit 库分别位于 sqllib/lib/gskit 或 sqllib/lib64/gskit 中。没有必要在全局位置安装 GSKit 的另一个副本来启用实例。如果存在 GSKit 的全局副本,请使全局 GSKit 与局部 GSKit 处于同一版本。

确保未激活连接集中器。如果正在运行连接集中器,将不会在 DB2 实例中启用 SSL 支持。
要确定是否激活了连接集中器,请发出 GET DATABASE MANAGER CONFIGURATION 命令。如果将配置参数 max_connections 的值设置为大于 max_coordagents 的值,那么会激活连接集中器。

关于此任务

SSL 通信将始终为 FIPS 方式。

DB2 Connect™ 的 SSL 支持
如果在中间服务器计算机上使用 DB2 Connect for System i®、DB2 Connect for System z® 或 DB2 企业服务器版将 DB2 客户机连接至主机或 System i 数据库,那么 SSL 支持在下列任何配置可用:
在客户机与 DB2 Connect 服务器之间
在 DB2 Connect 服务器与服务器之间
同时在客户机与 DB2 Connect 服务器之间以及 DB2 Connect 服务器与服务器之间
注: 为了在配置中所有路径上启用 SSL 支持,每台客户机或服务器都必须满足 SSL 支持的所有要求。例如,如果 DB2 Connect 连接集中器处于打开状态,那么对 DB2 Connect 服务器的入站请求不能使用 SSL。但是,对目标服务器的出站请求可以使用 SSL。
高可用性灾难恢复 (HADR) 系统的 SSL 支持
在客户机与 HADR 主服务器之间支持 SSL。连接至使用 SSL 的 HADR 主服务器的客户机能够重新路由至使用 SSL 的 HADR 备用数据库。但是,在 HADR 主服务器与 HADR 备用服务器之间不支持 SSL。
GSKit 工具 GSKCapiCmd 的文档
有关 GSKit 工具 GSKCapiCmd 的信息,请参阅以下网址提供的 GSKCapiCmd User’s Guide:ftp://ftp.software.ibm.com/software/webserver/appserv/library/v80/GSK_CapiCmd_UserGuide.pdf。
配置 SSL 支持
为了配置 SSL 支持,您首先创建密钥数据库来管理数字证书。这些证书和加密密钥用于建立 SSL 连接。其次,DB2 实例所有者必须为 SSL 支持配置 DB2 实例。

过程

  • 1.创建密钥数据库并设置数字证书。
  • a.使用 GSKCapiCmd 工具来创建密钥数据库。它必须为证书管理系统 (CMS) 类型的密钥数据库。 GSKCapiCmd 为非基于 Java 的命令行工具,不需要在系统上安装 Java™ 就能使用此工具。
    您使用 gskcapicmd 命令来调用 GSKCapiCmd,如 GSKCapiCmd User’s Guide 中所述。在 Linux 和 UNIX 平台上,该命令的路径为 sqllib/gskit/bin,在 32 位和 64 位 Windows 平台上,则为 C:\Program Files\IBM\GSK8\bin。(在 64 位平台上,还存在 32 位 GSKit 可执行文件和库;在此情况下,该命令的路径为 C:\Program Files (x86)\IBM\GSK8\bin。)请确保 PATH(在 Windows 平台上)包括正确的 GSKit 库路径;LIBPATH、SHLIB_PATH 或 LD_LIBRARY_PATH(在 UNIX 或 Linux 平台上)包括正确的 GSKit 库路径,例如,sqllib/lib64/gskit。

配置环境变量

$ cat ~/.bash_profile
新增:
export LIBPATH=/home/db2inst1/sqllib/gskit
export PATH=$PATH:$LIBPATH/bin

创建证书存储目录:

mkdir /home/db2inst1/ssl/

例如,以下命令创建称为 mydbserver.kdb 的密钥数据库以及称为 mydbserver.sth 的隐藏文件:

$ gsk8capicmd_64 -keydb -create -db "mydbserver.kdb" -pw "myServerPassw0rdpw0" -stash
$ ll
总用量 16
-rw-------. 1 db2inst1 db2adm1  88 118 10:01 mydbserver.crl
-rw-------. 1 db2inst1 db2adm1  88 118 10:01 mydbserver.kdb
-rw-------. 1 db2inst1 db2adm1  88 118 10:01 mydbserver.rdb
-rw-------. 1 db2inst1 db2adm1 129 118 10:01 mydbserver.sth
  • b.将服务器的证书添加至密钥数据库。在 SSL 握手期间,服务器会将此证书发送至客户机来为服务器提供认证。 要获取证书,可以使用 GSKCapiCmd 来创建新的证书请求并将它提交至 CA 以便签署,也可以创建自签名证书以用于测试。
    例如,要创建标签为 myselfsigned 的自签名证书,请按以下示例中所示的方式使用 GSKCapiCmd 命令:
gsk8capicmd_64 -cert -create -db "mydbserver.kdb" -pw "myServerPassw0rdpw0" -label "myselfsigned" -dn "CN=myhost.mycompany.com,O=myOrganization,OU=myOrganizationUnit,L=myLocation,ST=ON,C=CA"
  • c.将刚才创建的证书抽取至文件,以便可将它分发给运行客户机(将与 DB2 服务器建立 SSL 连接)的计算机。
    例如,以下 GSKCapiCmd 命令将证书抽取至称为 mydbserver.arm 的文件:
gsk8capicmd_64 -cert -extract -db "mydbserver.kdb" -pw "myServerPassw0rdpw0" -label "myselfsigned" -target "mydbserver.arm" -format ascii -fips
  • 2.要针对 SSL 支持设置 DB2 服务器,以 DB2 实例所有者身份登录并设置下列配置参数和 DB2COMM 注册表变量。
  • a.将 ssl_svr_keydb 配置参数设置为密钥数据库文件的标准路径。 例如:
db2 update dbm cfg using SSL_SVR_KEYDB /home/db2inst1/ssl/mydbserver.kdb

如果 ssl_svr_keydb 为 NULL(未设置),那么不会启用 SSL 支持。

  • b.将 ssl_svr_stash 配置参数设置为隐藏文件的标准路径。 例如:
db2 update dbm cfg using SSL_SVR_STASH /home/db2inst1/ssl/mydbserver.sth

如果 ssl_svr_stash 为 NULL(未设置),那么不会启用 SSL 支持。

  • c.将 ssl_svr_label 配置参数设置为服务器的数字证书的标签,在步骤 1 中已添加该数字证书。 如果未设置 ssl_svr_label,那么会使用密钥数据库中的缺省证书。如果密钥数据库中不存在任何缺省证书,那么不会启用 SSL。 例如:
db2 update dbm cfg using SSL_SVR_LABEL myselfsigned

其中 myselfsigned 是样本标签。

  • d.将 ssl_svcename 配置参数设置为 DB2 数据库系统应该进行侦听以获取 SSL 连接的端口。 如果同时启用了 TCP/IP 和 SSL(DB2COMM 注册表变量设置为“TCPIP, SSL”),那么必须将 ssl_svcename 为与为 svcename 设置的端口不同的端口。svcename 配置参数设置 DB2 数据库系统进行侦听以获取 TCP/IP 连接的端口。如果将 ssl_svcename 与 svcename 设置为同一端口,那么将不会启用 TCP/IP 和 SSL 之中的任何一项。 如果 ssl_svcename 为 NULL(未设置),那么不会启用 SSL 支持。

注: 在 HADR 环境中,请不要对主或备用数据库系统将 hadr_local_svc 设置为对 ssl_svcename 设置的值。另外,请不要将 hadr_local_svc 设置为 svcename 的值或 svcename 的值加一。
注: 当 DB2COMM 注册表变量设置为“TCPIP,SSL”时,如果未正确启用 TCPIP 支持(例如,由于 svcename 配置参数设置为 NULL),那么会返回错误 SQL5043N 并且不会启用 SSL 支持。

设置服务名db2c_ssl,访问端口60000

# echo "db2c_ssl   60000/tcp               # db2 ssl connect service port">> /etc/services
db2 update dbm cfg using SSL_SVCENAME db2c_ssl
  • e.(可选)如果要指定服务器可以使用哪些密码套件,那么设置 ssl_cipherspecs 配置参数。 如果将 ssl_cipherspecs 保留为 NULL(未设置),那么这允许 GSKit 使用同时受客户机和服务器支持的最强可用密码套件。 请参阅受支持的密码套件,以获取有关哪些密码套件可用的信息。

  • f.将值 SSL 添加至 DB2COMM 注册表变量。 例如:

db2set -i db2inst1 DB2COMM=SSL

其中 db2inst1 是 DB2 实例名称。 数据库管理器可以同时支持多个协议。例如,要同时启用 TCP/IP 和 SSL 通信协议:

db2set -i db2inst1 DB2COMM=SSL,TCPIP
  • g.重新启动 DB2 实例。 例如:
db2stop
db2start

示例

以下示例演示了如何显示证书。此示例使用由以下命令创建的自签名证书:

gsk8capicmd_64 -cert -create -db "mydbserver.kdb" -pw "mydbserverpw0" 
  -label "myselfsigned" -dn "CN=myhost.mycompany.com,O=myOrganization,
        OU=myOrganizationUnit,L=myLocation,ST=ON,C=CA"

要显示证书,请发出以下命令:

gsk8capicmd_64 -cert -details -db "mydbserver.kdb" -pw "mydbserverpw0" -label "myselfsigned"

要为您的服务器获得 CA 签名证书(代替自签名证书),需要生成证书签名请求并向知名 CA(如 VeriSign)支付费用以获得证书签名。在您获得已签名的证书后,需要将其接收至服务器密钥数据库。以下示例演示了如何请求和接收证书。该示例中使用了证书的试用版本。

  • 1.首先,为 mydbserver.kdb 创建证书签名请求 (CSR)。以下命令用于在指定密钥数据库中创建新 RSA 私人/公用密钥对和 PKCS10 证书请求。对于 CMS 密钥数据库,证书请求信息将保存在扩展名为“.rdb”的文件中。由 -file 选项指定的文件为需要发送至 CA 的文件。
gsk8capicmd_64 -certreq -create -db "mydbserver.kdb" -pw "mydbserverpw0" 
   -label "mycert" -dn "CN=myhost.mycompany.com,
    O=myOrganization,OU=myOrganizationUnit,L=myLocation,ST=ON,C=CA", 
   -file "mycertRequestNew"

以下命令将列出 my db 服务器的证书请求的详细信息:

gsk8capicmd_64 -certreq -details -showOID -db "mydbserver.kdb" 
   -pw "mydbserverpw0" -label "mycert"

要显示证书请求文件:

$ cat mycertRequestNew

如果您需要删除证书请求,请使用类似以下示例的命令:

gsk8capicmd_64 -certreq -delete -db "mydbserver.kdb" -pw "mydbserverpw0" 
   -label "mycert"
  • 2.然后,访问 VeriSign Web 站点并进行注册,此站点将要求您剪切并粘贴请求文件以提交请求。对于试用版本,您将收到一封包含已签名的证书的电子邮件。 该电子邮件还包含用于下载试用根 CA 证书及试用中间 CA 证书的链接。使用记事本或 vi 将所有三个证书都保存至文件中:
    RootCert.arm
    IntermediateCert.arm
    MyCertificate.arm
    这三个证书组成一个信任链。
    使用以下命令将试用根 CA 证书添加至 mydbserver.kdb:
gsk8capicmd_64 -cert -add -db "mydbserver.kdb" -pw "mydbserverpw0" 
   -label "trialRootCACert"  -file RootCert.arm -format ascii

使用以下命令将试用中间 CA 证书添加至 mydbserver.kdb:

gsk8capicmd_64 -cert -add -db "mydbserver.kdb" -pw "mydbserverpw0" 
   -label "trialIntermediateCACert" -file IntermediateCert.arm -format ascii

使用以下命令将试用证书接收至 mydbserver.kdb:

$ cat SSLCertificate.cer2

gsk8capicmd_64 -cert -receive -file MyCertificate.arm -db "mydbserver.kdb" 
   -pw "mydbserverp -format ascii 

使用以下命令列出 mydbserver.kdb 中的所有证书:

gsk8capicmd_64 -cert -list all -db "mydbserver.kdb" -pw "mydbserverpw0"

certificates found
* default, - personal, ! trusted
-!           mycert
!             trialIntermediateCACert
!             trialRootCACert
-!           myselfsigned
db2 update dbm cfg using SSL_SVR_LABEL mycert  

注意:

抽取在密钥库数据库中创建的自签名客户机证书时,extract 命令将从密钥库数据库中抽取公用密钥数据,并将其放入指定的文件。但是,不会解压缩与专用密钥相关的信息。如果将此类证书导入其他密钥库数据库,那么仅会导入公共密钥数据,且新密钥库数据库中不存在专用密钥数据。因此,使用新密钥库数据库认证客户机将失败。作为解决方案,整个密钥库数据库需要由不同应用程序共享,或需要为每个客户机生成不同客户机证书。

参考

https://www.ibm.com/docs/zh/db2/10.5?topic=de-configuring-secure-sockets-layer-ssl-support-db2-instance

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值