DB2 V9.7 for Linux, UNIX, and Windows

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

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

关于此任务

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 Guideftp://ftp.software.ibm.com/software/webserver/appserv/library/v80/GSK_CapiCmd_UserGuide.pdf

配置 SSL 支持

为了配置 SSL 支持,您首先创建密钥数据库来管理数字证书。这些证书和加密密钥用于建立 SSL 连接。其次,DB2 实例所有者必须为 SSL 支持配置 DB2 实例。

开始之前

在配置 SSL 支持之前,请执行下列步骤:

过程

  1. 创建密钥数据库并设置数字证书。
    1. 使用 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。)

      例如,以下命令创建称为 mydbserver.kdb 的密钥数据库以及称为 mydbserver.sth 的存储文件:
      gsk8capicmd_64 -keydb -create -db "mydbserver.kdb" -pw "myServerPassw0rdpw0" 
            -stash
      -stash 选项会在密钥数据库所在的路径上创建存储文件,其文件扩展名为 .sth。实例启动时,GSKit 会使用存储文件来获取密钥数据库的密码。
      注: 应该对存储文件使用强文件系统保护。缺省情况下,只有实例所有者才具有访问此文件的权限(读写访问权)。

      当创建密钥数据库时,会自动使用来自一些诸如 Verisign 之类的认证中心(CA)的签署者证书对它进行填充。

    2. 将服务器的证书添加至密钥数据库。在 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"
    3. 将刚才创建的证书抽取至文件,以便可将它分发给运行客户机(将与 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 注册表变量。
    1. ssl_svr_keydb 配置参数设置为密钥数据库文件的标准路径。 例如:
      db2 update dbm cfg using SSL_SVR_KEYDB 
               /home/test/sqllib/security/keystore/key.kdb
      如果 ssl_svr_keydb 为 null(未设置),那么不会启用 SSL 支持。
    2. ssl_svr_stash 配置参数设置为存储文件的标准路径。 例如:
      db2 update dbm cfg using SSL_SVR_STASH 
              /home/test/sqllib/security/keystore/mydbserver.sth
      如果 ssl_svr_stash 为 null(未设置),那么不会启用 SSL 支持。
    3. ssl_svr_label 配置参数设置为服务器的数字证书的标签,在步骤 1 中已添加该数字证书。 如果未设置 ssl_svr_label,那么会使用密钥数据库中的缺省证书。如果密钥数据库中不存在任何缺省证书,那么不会启用 SSL。 例如:db2 update dbm cfg using SSL_SVR_LABEL myselfsigned,其中 myselfsigned 是样本标签。
    4. ssl_svcename 配置参数设置为 DB2 数据库系统应该进行侦听以获取 SSL 连接的端口。 如果同时启用了 TCP/IP 和 SSL(DB2COMM 注册表变量设置为“TCPIP, SSL”),那么必须将 ssl_svcename 为与为 svcename 设置的端口不同的端口。svcename 配置参数设置 DB2 数据库系统进行侦听以获取 TCP/IP 连接的端口。如果将 ssl_svcenamesvcename 设置为同一端口,那么将不会启用 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 支持。
    5. (可选)如果要指定服务器可以使用哪些密码套件,那么设置 ssl_cipherspecs 配置参数。 如果将 ssl_cipherspecs 保留为 null(未设置),那么这允许 GSKit 使用同时受客户机和服务器支持的最强可用密码套件。 请参阅受支持的密码套件,以获取有关哪些密码套件可用的信息。
    6. 将值 SSL 添加至 DB2COMM 注册表变量。 例如:
      db2set -i db2inst1 DB2COMM=SSL
      其中 db2inst1 是 DB2 实例名称。 数据库管理器可以同时支持多个协议。例如,要同时启用 TCP/IP 和 SSL 通信协议:
      db2set -i db2inst1 DB2COMM=SSL,TCPIP
    7. 重新启动 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"
输出显示如下:
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)支付费用以获得证书签名。在您获得已签名的证书后,需要将其接收至服务器密钥数据库。以下示例演示了如何请求和接收证书。该示例中使用了证书的试用版本。
  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"
    输出将显示如下:
    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"
  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
                                                                                              
    -----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 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