Amol D Barsagade
发布: 2019-02-27
引言
Db2 数据库系统支持安全套接字层 (SSL),在这种情况下,客户端可以使用 SSL 套接字与 Db2 服务器建立连接。CLP 和 .Net 数据提供者客户端应用程序以及使用 IBM Data Server Driver for JDBC and SQLJ(第 4 种类型的连接)的应用程序也支持 SSL。本文中的分步方法将向您展示如何将新的 SSL 证书添加到 HADR 环境中的 Db2 服务器。详细步骤还包括如何移除旧 SSL 证书,重新创建和提取新 SSL 证书,以及如何在添加新 SSL 证书后重置 HADR 环境。
相关假设
我们假设已安装了 Db2 v11 HADR 且具有一个数据库。详细信息如下:
1 | Primary server : appduv22d0.ibmsl.cloud.test.group |
Show moreShow more icon
同时还假设我们现有一个 SSL 证书,在主服务器和备用服务器上的标签分别为 Primaryselfsigned 和 _Standbyselfsigned_,并且包含条目 Key Size 1024 和 _Signature Algorithm SHA1WithRSASignature_。
如果您需要添加另一个包含条目 Key Size 2048 和 Signature Algorithm SHA256WithRSASignature 的证书,那么我们首先要禁用 HADR,然后删除现有 SSL 证书,接着创建一个新证书,之后再重新启用 Db2 HADR。
第 1 步:移除旧 SSL 证书和密钥数据库
在主服务器和备用服务器上,继续重新创建新 SSL 证书之前,我们需要删除现有的 SSL 证书和密钥数据库。
- 在主服务器上,移除旧 SSL 证书。
您需要移除标签为 Primaryselfsigned 的旧 SSL 证书。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -delete -db “/home/db2inst1/Primarydb.kdb” - |
Show moreShow more icon
源数据库密码:xxxxxx
- 确认证书已删除。
要确认标签为 Primaryselfsigned 的 SSL 证书已删除,可尝试显示该证书,并确保该证书未显示。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -details -db “/home/db2inst1/Primarydb.kdb” - |
Show moreShow more icon
CTGSK3029W 该数据库不包含标签为 Primaryselfsigned 的证书。
- 移除旧密钥数据库。
移除旧密钥数据库 Primarydb.kdb,这还将移除相关文件。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -keydb -delete -db "/home/db2inst1/Primarydb.kdb" - |
Show moreShow more icon
注意:确认文件已经从密钥数据库位置(即“/home/db2inst1/”)移除,同时也移除旧证书的提取文件,即 primary.arm 和 standby.arm。
第 2 步:创建新密钥数据库
以下命令将创建一个名为 Primarydb.kdb 的密钥数据库和一个名为 Primarydb.sth 的存储文件
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -keydb -create -db "/home/db2inst1/Primarydb.kdb" - |
Show moreShow more icon
-stash 选项将在密钥数据库所在的路径上创建一个存储文件,文件扩展名为 .sth。在实例启动时,GSKit 使用该存储文件获取密钥数据库的密码。
- 确认在密钥数据库位置(即“/home/db2inst1”)中创建了以下文件。
1 | $ ls -ltr | grep -i key |
Show moreShow more icon
第 3 步:将新 SSL 证书添加到密钥数据库
在这里,我们将添加一个大小为 2048 且签名算法为 SHA256WithRSA 的新 SSL 证书,
如下所示:
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -create -db "/home/db2inst1/Primarydb.kdb" - |
Show moreShow more icon
注意:确保更新 Primarydb.kdb 文件的大小和时间戳记。

第 4 步:提取证书
提取刚才创建的证书,以便将其分发给运行客户端的计算机,这些客户端将与您的 Db2 服务器建立 SSL 连接。
注意:移除旧的 Primary.arm(如果存在),并提取包含新文件 Primary.arm 的证书,如下所示:
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -extract -db "/home/db2inst1/Primarydb.kdb" - |
Show moreShow more icon
注意:确保创建了用于提取证书“Primary.arm”的文件。
1 | $ ls -ltr | grep -i my |
Show moreShow more icon
第 5 步:显示证书
在创建和提取新的 SSL 证书之后,您将需要显示该证书并验证参数,例如密钥大小和签名算法。
发出以下命令来显示证书:
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -details -db "/home/db2inst1/Primarydb.kdb" -pw "xxxxxx" -label "Primaryselfsigned" |
Show moreShow more icon
注意:您将看到以下证书:
1 | Label : Primaryselfsigned |
Show moreShow more icon
第 6 步:在备用服务器上重复第 1 步到第 5 步
在备用服务器上,以 Db2 实例所有者的身份登录,并按照以上演示的方法重复第 1 步到第 5 步,即删除旧的 SSL 和密钥数据库,创建一个新的密钥数据库,添加证书,提取并显示该证书。
- 移除旧 SSL 证书和密钥数据库。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -delete -db “/home/db2inst1/Standbydb.kdb” - |
Show moreShow more icon
- 确认证书已删除
要确认标签为 Standbyselfsigned 的 SSL 证书已删除,可尝试显示该证书,
并确保旧证书未显示。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -details -db “/home/db2inst1/Standbydb.kdb” - |
Show moreShow more icon
CTGSK3029W 数据库不包含标签为 Standbyselfsigned 的证书。
- 移除旧密钥数据库
移除旧密钥数据库 _Standbydb.kdb_,这还将移除相关文件。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -keydb -delete -db "/home/db2inst1/Standbydb.kdb" |
Show moreShow more icon
注意:确认文件已经从密钥数据库位置(即“/home/db2inst1/”)移除,同时也移除旧证书的提取文件,即 primary.arm 和 standby.arm。
- 创建新密钥数据库。
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -keydb -create -db "/home/db2inst1/Standbydb.kdb" |
Show moreShow more icon
- 添加证书
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -create -db "/home/db2inst1/Standbydb.kdb" - |
Show moreShow more icon
- 提取证书
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -extract -db "/home/db2inst1/Standbydb.kdb" - |
Show moreShow more icon
- 显示证书
1 | $ /opt/ibm/db2/V11.1/gskit/bin/gsk8capicmd_64 -cert -details -db "/home/db2inst1/Standbydb.kdb" -pw |
Show moreShow more icon
第 7 步:添加主证书和备用证书
现在,将主证书和备用证书添加到每个主实例和备用实例的密钥数据库中。
- 将证书文件从主实例复制到备用实例,反之亦然。
通过 FTP 将包含主实例证书的文件传输到备用实例。在上一步中,此文件已被提取到名为 primary.arm 的文件中。此外,还需要通过 FTP 将包含备用实例证书的文件(即 standby.arm)传输到主实例。将这些文件放入每个实例上创建密钥数据库的目录中。
- 在主实例上,执行以下命令:
1 | $ scp /home/db2inst1/Primary.arm db2inst1@appduv22d1:/home/db2inst1 |
Show moreShow more icon
- 在备用实例上,执行以下命令:
1 | $ scp /home/db2inst1/Standby.arm db2inst1@appduv22d0:/home/db2inst1 |
Show moreShow more icon
- 将主实例的证书添加到备用实例的密钥数据库中。
在备用实例上,执行以下命令:
1 | $ /opt/ibm/db2/V11.1/gaskit/bin/gak8campicmd_64 -cert -add -db “/home/db2inst1/Standbydb.kdb” - |
Show moreShow more icon
注意:添加证书后,Standbydb.kdb 的大小将发生变化。
1 | $ ls -ltr | grep -i key |
Show moreShow more icon
- 将备用实例的证书添加到主实例的密钥数据库中。
在主实例上,执行以下命令:
1 | $ /opt/ibm/db2/V11.1/gaskit/bin/gak8campicmd_64 -cert -add -db “/home/db2inst1/Primarydb.kdb” - |
Show moreShow more icon
注意:添加证书后,Primarydb.kdb 的大小将发生变化。
1 | $ ls -ltr | grep -i key |
Show moreShow more icon
注意:如果存在多个备用数据库,那么必须将 HADR 配置中每个实例的证书导入到每个实例的密钥数据库中,如上所示。
第 8 步:将 Db2 实例设置为支持 SSL
要将 Db2 服务器设置为支持 SSL,以 Db2 实例所有者身份登录并设置以下配置参数。
- 设置 ssl_svr_keydb 配置参数。
将此配置参数设置为密钥数据库文件的标准路径。必须在主数据库和所有备用数据库的 Db2 实例上完成此步骤。
在主数据库上:
1 | $ db2 update dbm cfg using SSL_SVR_KEYDB '/home/db2inst1/Primarydb.kdb' |
Show moreShow more icon
在备用数据库上:
1 | $ db2 update dbm cfg using SSL_SVR_KEYDB '/home/db2inst1/Standbydb.kdb' |
Show moreShow more icon
- 设置 ssl_svr_stash 配置参数
在主数据库上:
1 | $ db2 update dbm cfg using SSL_SVR_STASH '/db2home/db2inst1/Primarydb.sth' |
Show moreShow more icon
在备用数据库上:
1 | $ db2 update dbm cfg using SSL_SVR_STASH '/db2home/db2inst1/Standbydb.sth' |
Show moreShow more icon
- 确认参数已设置
在主数据库上:
1 | $ db2 get dbm cfg | grep SSL |
Show moreShow more icon

在备用数据库上:
1 | $ db2 get dbm cfg | grep SSL |
Show moreShow more icon

第 9 步:重新启动 Db2 实例
在主服务器和备用服务器上重新启动 Db2 实例。
1 | $ db2 deactivate database testdb1 |
Show moreShow more icon
第 10 步:为每个主数据库和备用数据库启用 SSL 通信
在主数据库上:
1 | $ db2 update db cfg for testdb1 using HADR_SSL_LABEL Primaryselfsigned |
Show moreShow more icon
1 | HADR SSL Label Certificate (HADR_SSL_LABEL) = Primaryselfsigned |
Show moreShow more icon
在备用数据库上:
1 | $ db2 update db cfg for testdb1 using HADR_SSL_LABEL Standbyselfsigned |
Show moreShow more icon
1 | HADR SSL Label Certificate (HADR_SSL_LABEL) = Standbyselfsigned |
Show moreShow more icon
注意:如果为其中一个主数据库或备用数据库设置了 hadr_ssl_label,那么必须为配置中的所有主数据库和备用数据库都设置此参数。如果没有为所有数据库设置 hadr_ssl_label,那么主数据库与备用数据库之间的一些 HADR 连接将失败。
如果设置了 hadr_ssl_label,那么必须同时设置 ssl_svr_keydb 和 ssl_svr_stash。否则,HADR 就无法启动,或者主数据库与备用数据库之间的一些 HADR 连接将失败。
第 11 步:重新启动并监控 HADR
在备用数据库上:
1 | $ db2 start hadr on database testdb1 as standby |
Show moreShow more icon

在主数据库上:
1 | $ db2 start hadr on database testdb1 as primary |
Show moreShow more icon

结束语
您已在现有 Db2 HADR 环境中添加了一个新的 SSL 证书。现在,您已更加深入地了解了如何重新创建新的 SSL 证书和密钥数据库,以及如何提取和显示 SSL 数字证书。此外,您现在还能够将 Db2 服务器设置为支持 SSL,以及重置 HADR。
本文翻译自: Configure a new SSL certificate into your existing HADR environment(2019-02-27)