配置 PostgreSQL 集群作为后端数据库

PostgreSQL 是一款功能强大的开源关系型数据库管理系统(RDBMS),具备容错能力、可扩展性、稳定性等独特特性,专为处理海量工作负载而设计。PAM360 已将 PostgreSQL 作为其默认数据库,该数据库随产品捆绑提供。 如今,为了提升大规模扩展能力并优化应用程序的运行与功能,PAM360 允许用户将 PostgreSQL 集群配置为独立的外部后端数据库。

阅读完本文后,您将掌握如何将 PostgreSQL 集群配置为后端数据库。

1. 将 PostgreSQL 集群配置为后端数据库

  1. 下载安装 PAM360。

    注意

    安装完成后,请勿启动 PAM360 服务。

  2. 下载 并安装 PostgreSQL。
  3. 在随附的 PostgreSQL 中创建一个数据库集群,并拥有数据库所有者的权限。
  4. 创建数据库集群后,请确保扩展下拉菜单中包含“pgcrypto”扩展。如果没有此扩展,请使用以下命令创建:
    CREATE EXTENSION pgcrypto;
  5. 导航至<PostgreSQL_安装目录>pgsql_installation\data并打开文件pg_hba.conf
    1. 在文件末尾添加一条记录,其中包含运行 PAM360 的机器/服务器的 IP 地址。
      例如:host all <用户名> <IP 地址>/32 md5
    2. 补充说明

      上述步骤仅适用于将外部 PostgreSQL 企业版数据库用作后端数据库的用户。对于使用云数据库的用户,该过程将通过自动化流程完成。

  6. 在 Windows 中导航至<PostgreSQL_安装目录>pgsql_installation\data,或在 Linux导航至<PostgreSQL_安装目录>pgsql_installation\main ,并打开文件postgresql.conf
    1. 查找 listen_addresses并输入 PAM360 运行服务器的 IP 地址。
  7. 重启 PostgreSQL 服务器。
  8. 导航至<PAM360_安装目录>\conf并打开customer-config.xml 文件:
    1. 查找startdbserver= true,并将该值改为false
    2. 现在,保存并关闭customer-config.xml 文件。
  9. 导航至 <PAM360-安装目录>\conf文件夹,并打开database_params.conf 文件。
    1. 将 localhost 替换为运行 PostgreSQL 数据库集群的服务器监听器名称。
    2. 将数据库中的端口号更新为 PostgreSQL 集群的实际端口号。默认情况下,PostgreSQL 的初始端口号为5432
    3. 更新用户名密码
    4. 将数据库名称更新为创建集群时提供的名称。
    5. 查找db.password.encrypted=true 并 将其修改为db.password.encrypted=false
    6. 如果您使用的是 PAM360 8000 及以上版本,请删除database_params.conf文件中的superuser_pass条目。
    7. 现在,保存并关闭database_params.conf文件。
    8. 其他详细信息

      此后,此处设置的密码将被加密。

  10. 下载 PostgreSQL 数据库集群的根 CA 证书,并将其导入 PAM360。有关导入证书的详细步骤,请参阅 常见问题解答(FAQ)中“证书”部分的第 11 个问题

    其他详细信息

    如果您不清楚如何为 PostgreSQL 数据库创建 SSL,请按照以下步骤生成所需的 SSL 证书(CA 签名或自签名),并验证 SSL 连接。

  11. 启动 PAM360 服务。

至此,您已成功将 PostgreSQL 集群配置为后端数据库。


2. 为 PostgreSQL 集群生成 SSL 证书

PostgreSQL 数据库集群与 PAM360 应用程序之间建立安全连接需要 SSL 连接。要建立 SSL 连接,需要 PostgreSQL 数据库集群的根 CA。

2.1 为 PostgreSQL 集群使用 CA 签名的 SSL 证书

如果您已拥有由 CA 签名的 SSL 证书,请直接从第 4 步开始进行证书安装。否则,请按照以下第 1 至 3 步生成并安装新的由 CA 签名的证书:

  1. 在终端中执行以下命令,使用 openssl 生成私钥:
    openssl genrsa -des3 -out server.key 2048
    此命令将生成一个 2048 位的 RSA 私钥,并将其保存为server.key,该文件受密码短语保护。
  2. 使用该私钥创建证书签名请求(CSR)。该请求将发送至证书颁发机构(CA)进行签名。请执行以下命令:
    openssl req -new -key server.key -out server.csr
    在此过程中,系统将提示您输入密钥的密码短语,并提供“通用名称”“主机名 ”或“IP 地址”等信息,其中“通用名称”应为您的 PostgreSQL集群的完全合格域名 (FQDN)
  3. 将生成的 CSR(server.csr)提交给第三方 CA,例如 VeriSignThawteRapidSSL 进行签名。有关提交CSR和完成签名流程的说明,请参阅相应CA的文档。请注意,此服务通常需要付费。
    几天后,您将收到已签名的 SSL 证书和 CA 的根证书,格式均为 `.cer` 文件。
  4. 使用 MMC 控制台在 PostgreSQL 集群机器上安装服务器证书:
    1. 单击“开始”,然后选择“运行”。在“运行”对话框中,输入MMC并按回车键。这将打开Microsoft 管理控制台 (MMC)
    2. “控制台”菜单中,选择 “添加/删除管理单元”。
    3. 单击“添加”,然后选择“证书”,再单击“添加”
    4. 在系统提示时,选择管理 “计算机账户”的证书。
    5. 导航至“管理用户证书(本地计算机)” >> “个人” >> “证书”
    6. 右键单击“证书”,选择“所有任务”,然后单击“导入”
    7. 浏览至已签名的服务器证书所在位置,选择该证书,并完成导入过程。
      install-third-party
  5. 请按照以下步骤在 PAM360 中安装 CA 根证书:
    1. 将 CA 根证书复制到<PAM360-安装目录>\bin 文件夹中
    2. <PAM360-安装目录>\bin文件夹中,执行以下命令:
      importCert.bat <证书的绝对路径>
      <证书的绝对路径>替换为您所复制的主证书文件的实际路径。此命令将主证书添加到 PAM360 证书存储中。

遵循以下步骤将帮助您生成私钥和证书请求,由 CA 进行签名,并在相应机器上安装服务器证书和根证书。

2.2 为 PostgreSQL 集群生成自签名 SSL 证书

如果您已拥有自签名 SSL 证书,请直接从第 2.2.1 节开始进行证书安装。否则,请按照以下步骤生成并安装新的自签名证书:

  1. 导航至 <PostgreSQL 安装目录>\data(证书将在此处创建),以管理员身份打开命令提示符,然后执行以下步骤为 PostgreSQL 数据库集群创建 SSL 根 CA。
  2. 执行以下命令以创建私钥和根证书:
    openssl genrsa -passout pass:1111  -des3 -out rootca.key 4096
    这将生成一个 4096 位 RSA 私钥 `rootca.key`,该私钥使用 Triple DES 加密算法并以密码短语 `1111` 进行加密。
    openssl req -passin pass:1111 -new -x509 -days 365 -key rootca.key -out rootca.crt
    这将使用密码短语 `1111` 加密的 RSA 私钥 `rootca.key`,创建一个有效期为365天的自签名根 CA 证书 `rootca.crt`。
  3. 请根据需要输入证书详细信息以创建根证书。例如,将“通用名称”设为服务器名称,并将“SAN 名称”设为服务器 IP 地址。
  4. 执行以下命令以创建服务器私钥和服务器证书请求:
    openssl genrsa -passout pass:1111 -des3 -out server.key 4096
    这将生成一个 4096 位 RSA 私钥 `server.key`,该私钥使用 Triple DES 加密算法,通过密码短语 `1111` 进行加密。
    openssl req -passin pass:1111 -new -key server.key -out server.csr
    这将使用加密密码 `1111` 加密的 RSA 私钥 `server.key` 为服务器生成证书签名请求 (CSR) `server.csr`。
  5. 请根据要求输入证书详细信息以创建服务器证书。例如,将“通用名称”设为服务器名称,并将“SAN名称”设为服务器 IP 地址。
  6. 执行该命令,使用根证书颁发机构(CA)`rootca.crt` 和 `rootca.key` 对服务器 CSR `server.csr` 进行签名,生成有效期为365天的服务器证书 `server.crt`,同时设置序列号并使用密码短语 `1111` 进行解密。
    openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA rootca.crt -CAkey rootca.key -set_serial 01 -out server.crt
    执行上述命令后,`server.csr` 将使用 `rootca.crt` 进行签名。为信任所签发的证书,请将 `rootca.crt` 添加到服务器上的相应信任存储中。 您也可以根据需要自行命名私钥、证书和 CSR。
  7. 注意

    如果您准备为 PostgreSQL 数据库使用通配符证书,请将通配符证书与相应的私钥文件一起放置在<PostgreSQL 安装目录>\data目录路径中。

请按照以下步骤配置 PostgreSQL 数据库集群以使用 SSL:

  1. 导航至 <PostgreSQL 安装目录>\data,并以管理员权限打开postgresql.conf 文件
  2. 在连接设置中查找listen_addresses 参数,并对其进行编辑或验证,因为该参数允许外部主机建立连接。
  3. listen_addresses = '*'

  4. postgresql.conf文件中查找SSL部分,并取消所有 SSL 参数的注释。
  5. 现在,请按照下图所示,使用我们的证书信息编辑 SSL 参数。
  6. ssl =on
    ssl_ca_file ='rootca.crt'
    ssl_cert_file ='server.crt'
    ssl_crl_file = ''
    ssl_crl_dir = ''
    ssl_key_file ='server.key'
    ssl_ciphers = 'HIGH:MEDIUM:+3DES:!aNULL' # 允许的 SSL 加密套件
    ssl_prefer_server_ciphers = on
    ssl_ecdh_curve = 'prime256v1'
    ssl_min_protocol_version = 'TLSv1.2'
    ssl_max_protocol_version = ''
    ssl_dh_params_file = ''
    ssl_passphrase_command = ''
    ssl_passphrase_command_supports_reload = off

    注意

    如果您为 PostgreSQL 数据库使用通配符证书,请将 ssl_ca_file 参数更新为不带任何属性(ssl_ca_file='')。

  7. 现在,将 PostgreSQL 数据库集群的根 CA 证书导入 PAM360。有关导入证书的详细步骤,请参阅 常见问题解答(FAQ)中的“证书”部分
  8. 现在,重启 PostgreSQL 数据库以使更改生效。

2.3 SSL 连接验证

要验证使用 CA 签名或自签名证书的 SSL 连接配置,请执行以下步骤:

  1. 导航至 <PostgreSQL 安装目录>\bin,并 以管理员权限打开命令提示符。
  2. 执行以下命令连接到 PostgreSQL 数据库:
    psql "postgresql://username@hostname/dbname?sslmode=require"
    请将 username、hostname 和 dbname 替换为您 PostgreSQL 集群的实际信息。 例如:psql "postgresql://postgres@127.0.0.1/postgres?sslmode=require"
  3. 现在,请输入您在 PostgreSQL 数据库安装过程中设置的 PostgreSQL 数据库密码。
  4. 输入密码后,系统将显示以下消息,表示 SSL 连接成功。
    pgsql-db
  5. 现在,请导航至<PostgreSQL 安装目录>\data,并将rootca.cert导入 PAM360。有关导入证书的详细步骤,请参阅 常见问题解答(FAQ)中的“问题 11” (常见问题解答中的“证书”部分)。



Top