第 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
>。
导出 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
导出证书签名请求(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
如果旧 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
备份内部 LDAP 数据库:
通过检查 CA 的
CS.cfg
中的 internaldb.database 的值来查找 CA 数据库的名称:# grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg internaldb.database=<CS_database_name>
在创建实例时,使用
setup-ds.pl
生成的实例特定脚本将这个数据库导出到.ldif
文件中:# cd /usr/lib64/dirsrv/<instance_name> # ./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif
db2ldif
命令以 DB 用户身份运行,因此它需要具有写入权限的目标文件夹。
-
将
old_ca.ldif
、ca_p12
、ca_signing.csr
文件传输到新的 CA 机器。如果要迁移的 CA 也是中间 CA,还要传输ca_rootca_signing.crt
。
20.1.2. 验证 PKCS12 文件
在新 CA 上,新数据库实例在标准端口(389)上运行。PKCS12 文件包含旧系统的所有系统证书。验证该文件是否包含 CA 签名证书和密钥。
在 FIPS 模式中,您必须使用 NSS 数据库运行 pki pkcs12
命令。如需更多信息,请参阅 pki-pkcs12
CLI。
查找 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
验证是否存在 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"
删除其他证书和密钥。
$ 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
如果正在迁移的 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)。
使用旧 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>
在新主机上运行
pkispawn
,以创建新 CA 实例:# pkispawn -s CA -f ca.cfg -vv
有关如何为新 CA 设置新 DS 实例的说明,请参阅安装红帽目录服务器。
20.1.4. 将旧数据导入到新 CA
创建新 CA 实例后,将数据导入到新的 CA 数据库中:
停止 CA 服务。
# systemctl stop pki-tomcatd@<instance_name>.service
可选:备份新主机上的 CA 数据库。
# dsctl -v idm-qe-01 db2bak
备份存储在
/var/lib/dirsrv/<instance_name>/bak/<host_name-time_stamp>/
目录中。从新的 RHEL 8 内部数据库中删除签名证书条目。
# ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"
该条目现在从旧数据导入,以便该条目中的 CRL 属性指向正确的条目。
将数据导入到新数据库中:
# ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>
ldapmodify
工具只添加新条目,且不会更新安装 CA 时创建的现有条目。-
可选:验证
import.log
文件中的输出。您可以搜索失败的操作,如ldap_add: Invalid syntax (21)
。 删除旧的安全域的目录条目。
# 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
在
/etc/pki/<instance_name>/ca/CS.cfg 文件中启用
参数,使 CA 充当证书撤销列表(CRL) master:ca.crl.
MasterCRL.enableca.crl.MasterCRL.enable=true
重启 CA 服务:
# systemctl start pki-tomcatd@<instance_name>
20.1.5. 将用户重新分配给默认组
使用 ldapmodify
工具或 pki
工具手动将成员添加到默认组中。
设置客户端:
# 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
将用户帐户添加到
Administrators
和Security 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 命令来检查
新主机上的是否存在。