配置 DB2 实例中的安全套接字层 (SSL) 支持
DB2® 数据库系统支持 SSL,这意味着也支持 SSL 的 DB2 客户机应用程序可以使用 SSL 套接字连接至 DB2 数据库。CLI、CLP 和 .Net Data Provider 客户机应用程序和使用 IBM® 数据服务器 JDBC 和 SQLJ 驱动程序(4 类连接)的应用程序支持 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 实例。
过程
示例
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"
输出显示如下:label : myselfsigned
key size : 1024
version : X509 V3
serial : 96c2db8fa769a09d
issue:CN=myhost.mycompany.com,O=myOrganization,OU=myOrganizationUnit,
L=myLocation,ST=ON,C=CA
subject:CN=myhost.mycompany.com,O=myOrganization,OU=myOrganizationUnit,
L=myLocation,ST=ON,C=CA
not before : Tuesday, 24 February 2009 17:11:50 PM
not after : Thursday, 25 February 2010 17:11:50 PM
public Key
30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01
05 00 03 81 8D 00 30 81 89 02 81 81 00 B6 B8 DC
79 69 62 C9 A5 C1 5C 38 31 53 AB 27 BE 63 C0 DB
DE C6 BC 2E A4 0D 37 45 95 22 0E 83 32 FE 67 A9
2F D7 51 FF 40 A3 76 68 B9 E3 34 CB 7D 4A D8 38
CA B1 6B 32 66 74 8F E2 B8 DA 8F D0 F3 62 04 BE
C4 FE 80 2A D0 FF 27 72 37 9A 36 1D DB D3 A1 33
A1 A6 48 33 E9 64 B9 9B 6B DB 08 60 7D 5E 0E 20
0A 26 AA 62 3A DF D3 78 56 DC 15 DE 9F 0B 91 DD
3B 1B 2B E2 82 FA 24 FF 81 A3 F7 3F C1 02 03 01
00 01
public key type : RSA : 1.2.840.113549.1.1.1
finger print : SHA1 :
2D C1 93 F8 AC A0 8F E2 C2 05 D8 23 D7 5D 87 E6
82 3C 47 EC
signature algorithm : SHA1WithRSASignature : 1.2.840.113549.1.1.5
value
0E 80 24 98 F6 6E 89 43 76 57 76 7F 82 95 18 6A
43 A5 81 EC F4 82 1F 1F F2 3F E5 61 67 48 C0 59
94 17 8E 8F DE 4F 7C 35 0C 5D A7 98 73 2A 34 7D
1E BA 53 78 A5 E4 31 45 D1 08 86 BE 5E 57 C6 9D
B5 E7 A7 01 3F 54 01 5E 8F 8B 2F 66 19 24 1E A4
94 58 B0 D4 40 95 AB 98 C2 EF 1C 5C 4A 29 48 EC
8C C0 A2 B1 AC 2A E9 3C 14 E5 77 B2 A6 55 A8 21
CB 59 81 86 79 F0 46 35 F8 FC 99 2D EC D4 B9 EB
Trusted : enabled
要为您的服务器获得 CA 签名证书(代替自签名证书),需要生成证书签名请求并向知名 CA(如 VeriSign)支付费用以获得证书签名。在您获得已签名的证书后,需要将其接收至服务器密钥数据库。以下示例演示了如何请求和接收证书。该示例中使用了证书的试用版本。- 首先,为 mydbserver.kdb 创建证书签名请求 (CSR)。以下命令用于在指定密钥数据库中创建新 RSA 私人/公用密钥对和 PKCS10 证书请求。对于 CMS
密钥数据库,证书请求信息将保存在扩展名为“.rdb”的文件中。由 -file 选项指定的文件为需要发送至 CA 的文件。
以下命令将列出 my db 服务器的证书请求的详细信息: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"
输出将显示如下:gsk8capicmd_64 -certreq -details -showOID -db "mydbserver.kdb" -pw "mydbserverpw0" -label "mycert"
要显示证书请求文件:label : mycert key size : 1024 subject : Common Name (CN): Type : 2.5.4.3 Value: myhost.mycompany.com Organization (O): Type : 2.5.4.10 Value: myOrganization Organizational Unit (OU): Type : 2.5.4.11 Value: myOrganizationUnit Locality (L): Type : 2.5.6.3 Value: myLocation State (ST): Type : ? Value: Ontario Country or region (C): Type : 2.5.4.6 Value: CA public Key 30 81 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 03 81 8D 00 30 81 89 02 81 81 00 9C B4 62 3C 89 02 4E B0 D8 EA 0B B8 CC 70 63 4A 59 1F 0F FD 98 9A 1A 39 94 E3 43 C1 63 7A CD 21 47 57 D9 86 6F 11 B8 91 08 AC E3 E2 21 32 FE 43 1F 07 C9 F5 40 6B 3E 4D 56 35 05 62 D6 78 0B E3 97 28 F7 27 31 A4 05 BE F2 3A 44 6B D8 D1 FF 1E DA 59 63 E6 49 52 39 45 9C 1E 8E CC DA A1 D9 0F 3A 96 09 66 5C 89 23 2E EE 31 65 8D 87 8E B9 61 C6 69 BC A5 DB EB 03 16 E6 33 85 14 68 BC DD F1 02 03 01 00 01 finger print : e0dcde10ded3a46a53c0190e84cc994e 5d7e4bad attributes signature algorithm1.2.840.113549.1.1.5 value 4F 06 B4 E3 1F 00 B4 81 90 CC A2 99 4A 02 68 D0 84 B5 7F 33 0B F0 04 D5 7D 4C 5C CB 5C D3 37 77 E2 6D 10 17 50 19 D0 7F 61 C7 C8 54 7B DB CD 6F 47 9F 7E 7E 5A CC 64 20 85 95 A8 5E C7 7D FB F4 8A 7F 4B 74 6F 0A C6 EF 09 E7 0A 15 17 CC 1D D2 5D ED 02 A1 BE 1D FC F2 65 EB 0D E2 93 BC 88 4C 4C 73 76 16 9F 1B 12 3B 7A 01 CF E0 63 97 E8 38 02 FB 47 EE F2 17 54 66 4D F7 7F 9E 13 DA 76 A2
如果您需要删除证书请求,请使用类似以下示例的命令:$ cat mycertRequestNew -----BEGIN NEW CERTIFICATE REQUEST----- MIIBrjCCARcCAQAwbjELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8xEDAO BgNVBAcTB01hcmtoYW0xDDAKBgNVBAoTA0lCTTEMMAoGA1UECxMDREIyMR8wHQYD VQQDExZnaWxlcmEudG9yb2xhYi5pYm0uY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQCctGI8iQJOsNjqC7jMcGNKWR8P/ZiaGjmU40PBY3rNIUdX2YZvEbiR CKzj4iEy/kMfB8n1QGs+TVY1BWLWeAvjlyj3JzGkBb7yOkRr2NH/HtpZY+ZJUjlF nB6OzNqh2Q86lglmXIkjLu4xZY2Hjrlhxmm8pdvrAxbmM4UUaLzd8QIDAQABoAAw DQYJKoZIhvcNAQEFBQADgYEATwa04x8AtIGQzKKZSgJo0IS1fzML8ATVfUxcy1zT N3fibRAXUBnQf2HHyFR7281vR59+flrMZCCFlahex3379Ip/S3RvCsbvCecKFRfM HdJd7QKhvh388mXrDeKTvIhMTHN2Fp8bEjt6Ac/gY5foOAL7R+7yF1RmTfd/nhPa dqI= -----END NEW CERTIFICATE REQUEST-----gsk8capicmd_64 -certreq -delete -db "mydbserver.kdb" -pw "mydbserverpw0" -label "mycert" - 然后,访问 VeriSign Web 站点并进行注册,此站点将要求您剪切并粘贴请求文件以提交请求。对于试用版本,您将收到一封包含已签名的证书的电子邮件。
该电子邮件还包含用于下载试用根 CA 证书及试用中间 CA 证书的链接。使用记事本或 vi 将所有三个证书都保存至文件中:
- RootCert.arm
- IntermediateCert.arm
- MyCertificate.arm
使用以下命令将试用根 CA 证书添加至 mydbserver.kdb:
使用以下命令将试用中间 CA 证书添加至 mydbserver.kdb:gsk8capicmd_64 -cert -add -db "mydbserver.kdb" -pw "mydbserverpw0" -label "trialRootCACert" -file RootCert.arm -format ascii
使用以下命令将试用证书接收至 mydbserver.kdb:gsk8capicmd_64 -cert -add -db "mydbserver.kdb" -pw "mydbserverpw0" -label "trialIntermediateCACert" -file IntermediateCert.arm -format ascii
使用以下命令列出 mydbserver.kdb 中的所有证书:$ cat SSLCertificate.cer2 -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQdOydrySM+J4uUPNzbPHhVjANBgkqhkiG9w0BAQUFADCB yzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTAwLgYDVQQL EydGb3IgVGVzdCBQdXJwb3NlcyBPbmx5LiAgTm8gYXNzdXJhbmNlcy4xQjBABgNV BAsTOVRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vY3Bz L3Rlc3RjYSAoYykwNTEtMCsGA1UEAxMkVmVyaVNpZ24gVHJpYWwgU2VjdXJlIFNl cnZlciBUZXN0IENBMB4XDTA5MDIyMzAwMDAwMFoXDTA5MDMwOTIzNTk1OVowgaox CzAJBgNVBAYTAkNBMRAwDgYDVQQIEwdPbnRhcmlvMRAwDgYDVQQHFAdNYXJraGFt MQwwCgYDVQQKFANJQk0xDDAKBgNVBAsUA0RCMjE6MDgGA1UECxQxVGVybXMgb2Yg dXNlIGF0IHd3dy52ZXJpc2lnbi5jb20vY3BzL3Rlc3RjYSAoYykwNTEfMB0GA1UE AxQWZ2lsZXJhLnRvcm9sYWIuaWJtLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAw gYkCgYEAnLRiPIkCTrDY6gu4zHBjSlkfD/2Ymho5lONDwWN6zSFHV9mGbxG4kQis 4+IhMv5DHwfJ9UBrPk1WNQVi1ngL45co9ycxpAW+8jpEa9jR/x7aWWPmSVI5RZwe jszaodkPOpYJZlyJIy7uMWWNh465YcZpvKXb6wMW5jOFFGi83fECAwEAAaOCAdcw ggHTMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgWgMEMGA1UdHwQ8MDowOKA2oDSGMmh0 dHA6Ly9TVlJTZWN1cmUtY3JsLnZlcmlzaWduLmNvbS9TVlJUcmlhbDIwMDUuY3Js MEoGA1UdIARDMEEwPwYKYIZIAYb4RQEHFTAxMC8GCCsGAQUFBwIBFiNodHRwczov L3d3dy52ZXJpc2lnbi5jb20vY3BzL3Rlc3RjYTAdBgNVHSUEFjAUBggrBgEFBQcD AQYIKwYBBQUHAwIwHwYDVR0jBBgwFoAUZiKOgeAxWd0qf6tGxTYCBnAnh1oweAYI KwYBBQUHAQEEbDBqMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC52ZXJpc2lnbi5j b20wQgYIKwYBBQUHMAKGNmh0dHA6Ly9TVlJTZWN1cmUtYWlhLnZlcmlzaWduLmNv bS9TVlJUcmlhbDIwMDUtYWlhLmNlcjBuBggrBgEFBQcBDARiMGChXqBcMFowWDBW FglpbWFnZS9naWYwITAfMAcGBSsOAwIaBBRLa7kolgYMu9BSOJsprEsHiyEFGDAm FiRodHRwOi8vbG9nby52ZXJpc2lnbi5jb20vdnNsb2dvMS5naWYwDQYJKoZIhvcN AQEFBQADggEBAKs1YpIeOAL6mTryIXpYfokkzRdwP5ooDutHhVbRYcPwq9ynOrHM 3gZolv8th5PpSkZAGTPr3HJZG6HnxRiQjPT88PAADR3SEzVMzQEESHfYToF1qBPZ svigphI9eIHcg5IWwv7dyuXtkFGbTCqcvEqJiT3UHhubgMfoTuTGayhNoGt75FGU h4kSJz3af6MNuGmQLs4wzJTepU7srlhGV1C1ujTCydax2BiWfWwO4YaFcckvHxbR 6I7vVj1PTC2RO8n5qcWJYmGU0PG3d58hJETD4E8tAReh21ShBWDgn4+e0k1XtQ8K lB66QpsFYGTLtGyd/4w4BAgq/QLmcs+mpjc= -----END CERTIFICATE----- gsk8capicmd_64 -cert -receive -file MyCertificate.arm -db "mydbserver.kdb" -pw "mydbserverp -format asciigsk8capicmd_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 命令将从密钥库数据库中抽取公用密钥数据,并将其放入指定的文件。但是,不会解压缩与专用密钥相关的信息。如果将此类证书导入其他密钥库数据库,那么仅会导入公共密钥数据,且新密钥库数据库中不存在专用密钥数据。因此,使用新密钥库数据库认证客户机将失败。作为解决方案,整个密钥库数据库需要由不同应用程序共享,或需要为每个客户机生成不同客户机证书。