更新时间:2023-03-17 GMT+08:00

SSL证书

证书的使用信息仅供参考。有关证书和管理证书及相关文件的安全指南的详细信息,请参见数据库服务器文档。

Data Studio可以使用安全套接字层[SSL]选项连接到数据库。添加连接需要下列文件:

#

证书/密钥

说明

1

客户端SSL证书

由系统/数据库管理员提供。

2

客户端SSL密钥

由系统/数据库管理员提供。

3

Root证书

由系统/数据库管理员提供。

SSL证书生成和服务器配置

生成证书的步骤如下:

  1. 搭建CA环境:假设已创建omm用户,且CA路径为test。

    以root用户登录SUSE Linux操作系统,并切换到omm用户。

    执行如下命令:

    mkdir test
    cd /etc/ssl

    将配置文件openssl. cnf复制到test目录下。

    命令如下:

    cp openssl.cnf ~/test
    cd ~/test

    在test文件夹下建立CA环境。

    在demoCA./demoCA/newcerts./demoCA/private目录下新建一个文件夹。

    命令如下:

    mkdir ./demoCA ./demoCA/newcerts ./demoCA/private
    chmod 777 ./demoCA/private

    创建serial文件,并将01写入其中。

    命令如下:

    echo '01'>./demoCA/serial

    创建index.txt文件。

    命令如下:

    touch /home/omm/test/demoCA/index.txt

    修改配置文件openssl.cnf中的参数。

    命令如下:

    dir = /home/omm/test/demoCA
    default_md = sha256

    CA环境搭建完成。

  2. 生成根私钥:生成CA私钥。

    命令如下:

    openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048

    生成2048-bit的RSA私钥。

  3. 生成根证书请求文件:根证书应用文件名为server.req。

    命令如下:

    openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pem

    输入demoCA/private/cakey.pem的密码。

    输入root私钥密码。

    系统会要求输入证书请求中需包含的信息。

    您所输入的即为所谓的“区分名称”或“DN”。

    其中一些字段可以不填。

    一些字段会显示一个默认值,输入“.”可使字段为空。将如下信息填入生成的服务器和客户端证书。

    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:xxxx
    Locality Name (eg, city) []:xxxx
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc
    Organizational Unit Name (eg, section) []:hello
    -Common name can be any name
    Common Name (eg, YOUR name) []:world
    -Email is optional.
    Email Address []:
    A challenge password []:
    An optional company name []:

  4. 生成自签名根证书

    命令如下:

    openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem

    使用openssl.cnf中的配置。

    输入demoCA/private/cakey.pem的密码。

    输入root私钥密码。

    检查请求与签名是否匹配。

    Signature ok
    Certificate Details:
    Serial Number: 1 (0x1)
    Validity
    Not Before: Feb 28 02:17:11 2017 GMT
    Not After : Feb 28 02:17:11 2018 GMT
    Subject:
    countryName = CN
    stateOrProvinceName = shanxi
    organizationName = Abc
    organizationalUnitName = hello
    commonName = world
    X509v3 extensions:
    X509v3 Basic Constraints:
    CA:FALSE
    Netscape Comment:
    OpenSSL Generated Certificate
    X509v3 Subject Key Identifier:
    F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F
    X509v3 Authority Key Identifier:
    keyid:F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F
    Certificate is to be certified until Feb 28 02:17:11 2018 GMT (365 days)
    Sign the certificate? [y/n]:y
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    已下发名为demoCA/cacert.pem的CA根证书

  5. 生成服务器证书私钥:生成名为server.key的私钥文件。

    命令如下:

    openssl genrsa -aes256 -out server.key 2048

  6. 生成服务器证书请求文件:生成服务器证书请求文件server.req。

    命令如下:

    openssl req -config openssl.cnf -new -key server.key -out server.req

    输入server.key的密码。

    系统会要求输入证书请求中需包含的信息。

    您所输入的即为所谓的“区分名称”或“DN”。

    其中一些字段可以不填。

    一些字段会显示一个默认值,输入“.”可使字段为空。

    配置如下信息,确保与创建CA时内容一致。
    Country Name (2 letter code) [AU]:CN
    State or Province Name (full name) [Some-State]:xxxx
    Locality Name (eg, city) []:xxxx
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc
    Organizational Unit Name (eg, section) []:hello
    -Common name can be any name
    Common Name (eg, YOUR name) []:world
    Email Address []:
    -- The following information is optional.
    A challenge password []:
    An optional company name []:

  7. 生成服务器证书:将demoCA/index.txt.attr属性设为“no”。

    vi demoCA/index.txt.attr

    下发生成的服务器证书请求文件,下发成功后,会生成一个正式的服务器证书server.crt。

    openssl ca -config openssl.cnf -in server.req -out server.crt -days 3650 –md sha256

    使用/etc/ssl/openssl.cnf中的配置。

    输入./demoCA/private/cakey.pem的密码:

    检查请求与签名是否匹配。

    Signature ok
    Certificate Details:
    Serial Number: 2 (0x2)
    Validity
    Not Before: Feb 27 10:11:12 2017 GMT
    Not After : Feb 25 10:11:12 2027 GMT
    Subject:
    countryName = CN
    stateOrProvinceName = shanxi
    organizationName = Abc
    organizationalUnitName = hello
    commonName = world
    X509v3 extensions:
    X509v3 Basic Constraints:
    CA:FALSE
    Netscape Comment:
    OpenSSL Generated Certificate
    X509v3 Subject Key Identifier:
    EB:D9:EE:C0:D2:14:48:AD:EB:BB:AD:B6:29:2C:6C:72:96:5C:38:35
    X509v3 Authority Key Identifier:
    keyid:84:F6:A1:65:16:1F:28:8A:B7:0D:CB:7E:19:76:2A:8B:F5:2B:5C:6A
    Certificate is to be certified until Feb 25 10:11:12 2027 GMT (3650 days)
    -- Choose y to sign and issue the certificate.
    Sign the certificate? [y/n]:y
    -- Select y, the certificate singing and issuing is complete.
    1 out of 1 certificate requests certified, commit? [y/n]y
    Write out database with 1 new entries
    Data Base Updated

    启用私钥密码保护:若服务器私钥的密码保护未启用,用户需执行gs_guc命令加密密码。

    gs_guc encrypt -M server -K root私钥密码 -D ./

    使用gs_guc加密后,会生成私钥密码保护文件server.key.cipher和server.key.rand

  8. 生成客户端证书和私钥:生成客户端私钥。

    openssl genrsa -aes256 -out client.key 2048

    生成客户端证书请求文件。

    openssl req -config openssl.cnf -new -key client.key -out client.req

    生成的客户端证书请求文件签发下发后,会生成正式的客户端证书文件client.crt。

    openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 –md sha256

    若服务器的pg_hba.conf文件中METHOD被设置为cert,客户端必须使用License文件client.crt中配置的用户名username(普通用户)连接数据库。若METHOD被设置为md5或sha256,客户端则没有此用户名限制。

    若不删除客户端私钥的密码保护,则需要使用gs_guc对密码进行加密。

    gs_guc encrypt -M client -K root私钥密码 -D ./  

    使用gs_guc加密后,会生成私钥密码保护文件client.key.cipher和client.key.rand。

替换证书

在LibrA中配置SSL连接所需的默认安全证书和私钥。已从CA获取服务器和客户端的正式证书和秘钥。

  1. 准备证书和秘钥。服务器上的配置文件名称约定如下:

    l Certificate name: server.crt
    l Key name: server.key
    l Key password and encrypted file: server.key.cipher and server.key.rand
    Conventions for configuration file names on the client:
    l Certificate name: client.crt
    l Key name: client.key
    l Key password and encrypted file: client.key.cipher and client.key.rand
    l Certificate name: cacert.pem
    l Names of files on in the revoked certificate list: sslcrl-file.crl

  2. 创建压缩包:

    压缩包名称:db-cert-replacement.zip

    压缩包格式:ZIP

    压缩包文件列表:server.crt, server.key,server.key.cipher, server.key.rand, client.crt, client.key, client.key.cipher,client.key.rand, cacert.pem.

    若需要配置证书撤销列表(CRL), 压缩包文件列表必须包含sslcrl-file.crl。

    命令如下:
    zip db-cert-replacement.zip client.crt client.key client.key.cipher client.key.rand server.crt server.key server.key.cipher server.key.rand
    zip -u ../db-cert-replacement.zip cacert.pem

  3. 调用证书替换接口替换证书。将准备好的压缩包db-cert-replacement.zip上传至集群用户的任一路径,如,/home/gaussdba/test/db-cert-replacement.zip。

    执行如下命令替换Coodinator中的证书:

    gs_om -t cert --cert-file=/home/gaussdba/test/db-cert-replacement.zip

    Starting SSL cert files replace.

    Backing up old SSL cert files.

    Backup SSL cert files on BLR1000029898 successfully.

    Backup SSL cert files on BLR1000029896 successfully.

    Backup SSL cert files on BLR1000029897 successfully.

    Backup gds SSL cert files on successfully.

    BLR1000029898 replace SSL cert files successfully.

    BLR1000029896 replace SSL cert files successfully.

    BLR1000029897 replace SSL cert files successfully.

    Replace SSL cert files successfully.

    Distribute cert files on all coordinators successfully.

    可以使用gs_om -t cert --rollback命令远程调用接口和gs_om -t cert --rollback -L命令。

客户端配置

  1. 对客户端密钥文件执行以下命令

    openssl pkcs8 -topk8 -inform PEM -outform DER -in Client.key -out client.pk8

  2. 将前面创建的“client.pk8”, “client.crt”, “cacert.pem”文件复制到客户端。

    在Data Studio上选择“客户端SSL秘钥”时,该秘钥文件不可选,只能选择*.pk8文件。然而,下载后的证书文件不包含该pk8文件。

  3. 在服务器上对客户端配置“双向”SSL认证。

    hostssl      all           all           10.18.158.95/32        cert

    在服务器上对客户端配置“单向”SSL认证。

    hostssl      all           all           10.18.158.95/32        sha256

  4. 登录Data Studio时,密码在双向SSL认证过程中未生效。

    需要输入SSL密码。