第 20 章 从证书系统 9 升级到证书系统 10


建议用户升级到 Red Hat Certificate System 的最新版本,以通过 Errata-Support 频道获得安全和程序错误修复。目前,RHEL 8.10 上的 RHEL 7.9 和 RHCS 10.8 上是 RHCS 9.7

20.1. 迁移 CA

使用现有证书文件迁移证书系统需要以下步骤:

20.1.1. 导出来自之前系统的数据

在设置新的证书系统实例之前,请使用以下步骤导出当前证书颁发机构(CA)的数据。在本例中,CA 的实例名称为 < pki-rootCA& gt;,位于 /var/lib/pki/<instance_name >。

  1. 导出 CA 签名证书和密钥。

    # grep internal= /var/lib/pki/<instance_name>/conf/password.conf | awk -F= '{print $2;}' > internal.txt
    # echo <Secret.123> > password.txt
    # PKCS12Export -d /var/lib/pki/<instance_name>/alias -p internal.txt -o ca.p12 -w password.txt
  2. 导出证书签名请求(CSR)。

    # echo "-----BEGIN NEW CERTIFICATE REQUEST-----" > ca_signing.csr
    # sed -n "/^ca.signing.certreq=/ s/[=]*=// p" < /var/lib/pki/<instance_name>/ca/conf/CS.cfg >> ca_signing.csr
    # echo "-----END NEW CERTIFICATE REQUEST-----" >> ca_signing.csr
  3. 如果旧 CA 是中间 CA (链中有一个 root CA),请从 NSS 数据库中提取 root CA:

    # certutil -L -d /var/lib/pki/<instance_name>/alias/ -n root_CA_nickname -a > ca_rootca_signing.crt
  4. 备份内部 LDAP 数据库:

    1. 通过检查 CA 的 CS.cfg 中的 internaldb.database 的值来查找 CA 数据库的名称:

      # grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg
      	internaldb.database=<CS_database_name>
    2. 在创建实例时,使用 setup-ds.pl 生成的实例特定脚本将这个数据库导出到 .ldif 文件中:

      # cd /usr/lib64/dirsrv/<instance_name>
      # ./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif

      db2ldif 命令以 DB 用户身份运行,因此它需要具有写入权限的目标文件夹。

  5. old_ca.ldifca_p12ca_signing.csr 文件传输到新的 CA 机器。如果要迁移的 CA 也是中间 CA,还要传输 ca_rootca_signing.crt

20.1.2. 验证 PKCS12 文件

在新 CA 上,新数据库实例在标准端口(389)上运行。PKCS12 文件包含旧系统的所有系统证书。验证该文件是否包含 CA 签名证书和密钥。

注意

在 FIPS 模式中,您必须使用 NSS 数据库运行 pki pkcs12 命令。如需更多信息,请参阅 pki-pkcs12 CLI。

  1. 查找 CA 签名证书和密钥。

    $ echo "<Secret.123>" > password.txt
    $ pki pkcs12-cert-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-key-find --pkcs12-file ca.p12 --pkcs12-password-file password.txt
  2. 验证是否存在 CA 签名证书的信任标记。如果标志不是 "CTu,Cu" 或缺少它们,请添加它们。

    $ pki pkcs12-cert-mod "<caSigningCert cert-pki-rootCA>" \ --pkcs12-file ca.p12 --pkcs12-password-file password.txt \ --trust-flags "CTu,Cu,Cu"
  3. 删除其他证书和密钥。

    $ pki pkcs12-cert-del "<Server-Cert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<subsystemCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<ocspSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
    $ pki pkcs12-cert-del "<auditSigningCert cert-pki-rootCA>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
  4. 如果正在迁移的 CA 也是中间 CA,请从 PKCSrhacm 文件中删除 root CA 证书。

    $ pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt

20.1.3. 在新主机上设置 CA

从现有实例导出数据后,在新主机上创建和设置证书颁发机构(CA)。

  1. 使用旧 CA 的参数,为 pkispawn 创建配置文件,如 CA.cfg。此实例在标准端口(389)上运行。

    [DEFAULT]
    	pki_instance_name=<new_instance_name>
    	pki_admin_password=<caadmin_password>
    	pki_client_pkcs12_password=<pkcs12_file_password>
    	pki_ds_password=<DS_password>
    	pki_ds_ldap_port=389
    	pki_existing=True
    
    [CA]
    	pki_ca_signing_csr_path=<path/to/ca_signing.csr>
    	pki_ca_signing_cert_path=<path/to/ca_signing.crt>
    	pki_ca_signing_nickname=<caSigningCert cert-nickname>
    	pki_ds_base_dn=<o=pki-tomcat-CA>
    	pki_ds_database=<instance_name-CA>
    	pki_master_crl_enable=False

    如果旧 CA 是中间 CA,请在配置文件中添加以下两行。它们对应于 root CA 证书的路径和在 NSS 数据库中存储证书时要使用的 nickname。

    pki_cert_chain_path=<rootca_signing.crt>
    pki_cert_chain_nickname=<caSigningCert cert-pki-ca>
  2. 在新主机上运行 pkispawn,以创建新 CA 实例:

    # pkispawn -s CA -f ca.cfg -vv
注意

有关如何为新 CA 设置新 DS 实例的说明,请参阅安装红帽目录服务器

20.1.4. 将旧数据导入到新 CA

创建新 CA 实例后,将数据导入到新的 CA 数据库中:

  1. 停止 CA 服务。

    # systemctl stop pki-tomcatd@<instance_name>.service
  2. 可选:备份新主机上的 CA 数据库。

    # dsctl -v idm-qe-01 db2bak

    备份存储在 /var/lib/dirsrv/<instance_name>/bak/<host_name-time_stamp>/ 目录中。

  3. 从新的 RHEL 8 内部数据库中删除签名证书条目。

    # ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"

    该条目现在从旧数据导入,以便该条目中的 CRL 属性指向正确的条目。

  4. 将数据导入到新数据库中:

    # ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>

    ldapmodify 工具只添加新条目,且不会更新安装 CA 时创建的现有条目。

  5. 可选:验证 import.log 文件中的输出。您可以搜索失败的操作,如 ldap_add: Invalid syntax (21)
  6. 删除旧的安全域的目录条目。

    # ldapmodify -W <password> -x -D "cn=Directory Manager"
    dn: cn=<server.example.com:9445>,cn=CAList,ou=Security Domain,<o=pki-tomcat-CA>
    changetype: delete
  7. /etc/pki/<instance_name>/ca/CS.cfg 文件中启用 ca.crl. MasterCRL.enable 参数,使 CA 充当证书撤销列表(CRL) master:

    ca.crl.MasterCRL.enable=true
  8. 重启 CA 服务:

    # systemctl start pki-tomcatd@<instance_name>

20.1.5. 将用户重新分配给默认组

使用 ldapmodify 工具或 pki 工具手动将成员添加到默认组中。

  1. 设置客户端:

    # pki -c <password> client-init
    Client initialized
    # pk12util -i ~/.dogtag/<instance_name>/ca_admin_cert.p12 -d ~/.dogtag/nssdb/
    Enter Password or Pin for "NSS Certificate DB":
    Enter password for PKCS12 file:
    pk12util: PKCS12 IMPORT SUCCESSFUL
  2. 将用户帐户添加到 AdministratorsSecurity Domain Administrators 组中:

    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user_name> "Certificate Manager Agents"

    RHCS 9 和 RHCS 10 中的默认(bootstrap)管理员用户具有相同的默认角色,即相同的组成员资格。但是,如果您有一个非默认的 admin 用户,或者在 RHCS 9 中自定义了 admin 角色,则这些更改可能无法正确迁移。在这种情况下,重新配置 RHCS 10 中的角色:

    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user> "Administrators"
    # pki -n "<PKI Administrator for example.com>" -c <password> \
    user-membership-add <user> "Security Domain Administrators"

如果要确保证书已被成功迁移,请通过运行 ca-cert-find 命令来检查 新主机上的是否存在。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.