第 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# 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出证书签名请求(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
# 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.csrCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果旧 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
# certutil -L -d /var/lib/pki/<instance_name>/alias/ -n root_CA_nickname -a > ca_rootca_signing.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 备份内部 LDAP 数据库:
通过检查 CA 的
CS.cfg中的 internaldb.database 的值来查找 CA 数据库的名称:grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg
# grep internaldb.database /etc/pki/<instance_name>/ca/CS.cfg internaldb.database=<CS_database_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在创建实例时,使用
setup-ds.pl生成的实例特定脚本将这个数据库导出到.ldif文件中:cd /usr/lib64/dirsrv/<instance_name> ./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldif
# cd /usr/lib64/dirsrv/<instance_name> # ./db2ldif -n "<CS_database_name>" -a /tmp/old_ca.ldifCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否存在 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-mod "<caSigningCert cert-pki-rootCA>" \ --pkcs12-file ca.p12 --pkcs12-password-file password.txt \ --trust-flags "CTu,Cu,Cu"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除其他证书和密钥。
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
$ 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.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果正在迁移的 CA 也是中间 CA,请从 PKCSrhacm 文件中删除 root CA 证书。
pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txt
$ pki pkcs12-cert-del "<Top-level Root CA Signing Certificate>" --pkcs12-file ca.p12 --pkcs12-password-file password.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
20.1.3. 在新主机上设置 CA 复制链接链接已复制到粘贴板!
从现有实例导出数据后,在新主机上创建和设置证书颁发机构(CA)。
使用旧 CA 的参数,为
pkispawn创建配置文件,如 CA.cfg。此实例在标准端口(389)上运行。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果旧 CA 是中间 CA,请在配置文件中添加以下两行。它们对应于 root CA 证书的路径和在 NSS 数据库中存储证书时要使用的 nickname。
pki_cert_chain_path=<rootca_signing.crt> pki_cert_chain_nickname=<caSigningCert cert-pki-ca>
pki_cert_chain_path=<rootca_signing.crt> pki_cert_chain_nickname=<caSigningCert cert-pki-ca>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在新主机上运行
pkispawn,以创建新 CA 实例:pkispawn -s CA -f ca.cfg -vv
# pkispawn -s CA -f ca.cfg -vvCopy to Clipboard Copied! Toggle word wrap Toggle overflow
有关如何为新 CA 设置新 DS 实例的说明,请参阅安装红帽目录服务器。
20.1.4. 将旧数据导入到新 CA 复制链接链接已复制到粘贴板!
创建新 CA 实例后,将数据导入到新的 CA 数据库中:
停止 CA 服务。
systemctl stop pki-tomcatd@<instance_name>.service
# systemctl stop pki-tomcatd@<instance_name>.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:备份新主机上的 CA 数据库。
dsctl -v idm-qe-01 db2bak
# dsctl -v idm-qe-01 db2bakCopy to Clipboard Copied! Toggle word wrap Toggle overflow 备份存储在
/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"
# ldapdelete -x -w <password< -D 'cn=Directory Manager' "cn=<serial_number<,ou=certificateRepository,ou=ca,o=pki-tomcat-CA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 该条目现在从旧数据导入,以便该条目中的 CRL 属性指向正确的条目。
将数据导入到新数据库中:
ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>
# ldapmodify -x -W <password> -D 'cn=Directory Manager' -a -c -f <path/to/old_ca.ldif>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ldapmodify工具只添加新条目,且不会更新安装 CA 时创建的现有条目。-
可选:验证
import.log文件中的输出。您可以搜索失败的操作,如ldap_add: Invalid syntax (21)。 删除旧的安全域的目录条目。
ldapmodify -W <password> -x -D "cn=Directory Manager"
# ldapmodify -W <password> -x -D "cn=Directory Manager" dn: cn=<server.example.com:9445>,cn=CAList,ou=Security Domain,<o=pki-tomcat-CA> changetype: deleteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/pki/<instance_name>/ca/CS.cfg 文件中启用参数,使 CA 充当证书撤销列表(CRL) master:ca.crl.MasterCRL.enableca.crl.MasterCRL.enable=true
ca.crl.MasterCRL.enable=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 CA 服务:
systemctl start pki-tomcatd@<instance_name>
# systemctl start pki-tomcatd@<instance_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
20.1.5. 将用户重新分配给默认组 复制链接链接已复制到粘贴板!
使用 ldapmodify 工具或 pki 工具手动将成员添加到默认组中。
设置客户端:
pki -c <password> client-init
# pki -c <password> client-init Client initializedCopy to Clipboard Copied! Toggle word wrap Toggle overflow pk12util -i ~/.dogtag/<instance_name>/ca_admin_cert.p12 -d ~/.dogtag/nssdb/
# 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 SUCCESSFULCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将用户帐户添加到
Administrators和Security Domain Administrators组中:pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user_name> "Certificate Manager Agents"
# pki -n "<PKI Administrator for example.com>" -c <password> \ user-membership-add <user_name> "Certificate Manager Agents"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"
# 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"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果要确保证书已被成功迁移,请通过运行 ca-cert-find 命令来检查 新主机上的是否存在。