管理 IdM 中的证书
发布证书、配置基于证书的身份验证和控制证书的有效性
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们致力于为您提供高质量的文档,您的反馈将对我们有很大帮助。为帮助我们改进,您可以通过 Red Hat Jira 跟踪系统提交建议或报告错误。
流程
登录到 Jira 网站。
如果您还没有帐户,请创建一个。
- 单击顶部导航栏中的 Create。
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您对改进的建议。包括文档相关部分的链接。
- 点窗口底部的 Create。
第 1 章 身份管理中的公钥证书 复制链接链接已复制到粘贴板!
您可以使用身份管理(IdM)中的 X.509 公钥证书来验证用户、主机和服务。除了验证外,X.509 证书还支持启用数字签名和加密,以提供隐私性、完整性和不可抵赖性。
证书包含以下信息:
- 证书验证的主题。
- 签发者,即签署证书的 CA。
- 证书有效性的开始和结束日期。
- 证书的有效使用。
- 主题的公钥。
由公钥加密的消息只能由对应的私钥解密。虽然证书及其包含的公钥可以公开提供,但用户、主机或服务必须对其私钥保密。
1.1. IdM 中的证书颁发机构 复制链接链接已复制到粘贴板!
证书颁发机构以信任层次结构运行。在带有内部证书颁发机构(CA)的 IdM 环境中,所有 IdM 主机、用户和服务都信任 CA 签名的证书。除了这个根 CA 外,IdM 还支持子 CA,其 root CA 已授权依次获得签署证书的能力。通常,此类能够签名的子 CA 证书是特定类型的证书,如 VPN 证书。最后,IdM 支持使用外部 CA。下表显示了在 IdM 中使用各个 CA 类型的具体情况。
| CA 的名称 | 描述 | 使用 | 有用的链接 |
|---|---|---|---|
|
| 基于 Dogtag 上游项目的集成 CA | 集成的 CA 可以为用户、主机和服务创建、撤销和发布证书。 | |
| IdM 子 CA |
隶属于 |
IdM 子 CA 是 | |
| 外部 CA | 外部 CA 是集成 IdM CA 或其子 CA 以外的 CA。 | 使用 IdM 工具,您可以将这些 CA 发布的证书添加到用户、服务或主机,也可以删除它们。 |
从证书的角度来看,自签名的 IdM CA 签名的和外部签名的证书之间没有区别。
CA 的角色包括以下目的:
- 它发布数字证书。
- 通过签署证书,它证明证书中命名的对象拥有一个公钥。主题可以是用户、主机或服务。
- 它可以撤销证书,并通过证书撤销列表(CRL)和在线证书状态协议(OCSP)提供撤销状态。
1.2. 证书和 Kerberos 的比较 复制链接链接已复制到粘贴板!
证书执行的功能与 Kerberos 票据执行的功能类似。Kerberos 是一种计算机网络身份验证协议,它根据票据来允许节点通过非安全网络进行通信,从而以安全的方式证明它们相互的身份。下表显示了 Kerberos 和 X.509 证书的比较:
| 特性 | Kerberos | X.509 |
|
| 是 | 是 |
|
| 可选 | 是 |
|
| 可选 | 是 |
|
| 对称 | 非对称 |
|
| 短(1 天) | 长(2 年) |
默认情况下,身份管理中的 Kerberos 仅确保通信双方的身份。
1.3. 使用证书验证 IdM 中用户的优缺点 复制链接链接已复制到粘贴板!
使用证书验证 IdM 中用户的优点包括:
- 与常规密码相比,保护智能卡上私钥的 PIN 通常不复杂、更容易记住。
- 根据设备,无法导出保存在智能卡上的私钥。这提供了额外的安全性。
- 智能卡可以自动注销: IdM 可以配置为在用户从读卡器中删除智能卡时注销用户。
- 窃取私钥需要对智能卡的实际访问,从而使智能卡免受黑客攻击。
- 智能卡验证是一个双因素验证的示例:它需要您拥有的东西(卡)和您知道的东西(PIN)。
- 智能卡比密码更灵活,因为它们提供可用于其他用途的密钥,如加密电子邮件。
- 在作为 IdM 客户端的共享机器上使用智能卡不会给系统管理员带来额外的配置问题。事实上,智能卡验证对共享机器来说是一个理想选择。
使用证书验证 IdM 中用户的缺点包括:
- 用户可能丢失或忘记携带其智能卡或证书,并被有效锁住。
- 错误输入 PIN 多次可能会导致卡被锁。
- 通常,在请求与某些安全官员或批准人的授权之间有一个中间步骤。在 IdM 中,安全官员或管理员必须运行 ipa cert-request 命令。
- 智能卡和读卡器往往特定于供应商和驱动程序:虽然许多读卡器可用于不同的卡,但特定供应商的智能卡可能无法在另一供应商的读卡器或不是为其设计的读卡器类型中工作。
- 证书和智能卡对管理员来说有一个陡峭的学习曲线。
第 2 章 使用 Ansible 管理 IdM 证书 复制链接链接已复制到粘贴板!
使用 ansible-freeipa ipacert 模块为身份管理(IdM)用户、主机和服务请求、撤销和检索 SSL 证书。您还可以恢复已搁置的证书。
2.1. 使用 Ansible 为 IdM 主机、服务和用户请求 SSL 证书 复制链接链接已复制到粘贴板!
使用 Ansible 自动 SSL 证书请求,以在 IdM 实体之间建立加密的可信连接并启用基于证书的身份验证。
以下示例使用 ansible-freeipa freeipa.ansible_freeipa.ipacert 模块从 IdM 证书颁发机构(CA)为 HTTP 服务器请求 SSL 证书。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。 - 您的 IdM 部署有一个集成的 CA。
流程
为您的用户、主机或服务生成证书签名请求(CSR)。例如,要使用
openssl工具为运行在 client.idm.example.com 上的HTTP服务生成一个 CSR,请输入:# openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout new.key \ -out new.csr -subj '/CN=client.idm.example.com,O=IDM.EXAMPLE.COM'因此,CSR 存储在 new.csr 中。
使用以下内容创建 Ansible playbook 文件 request-certificate.yml :
--- - name: Playbook to request a certificate hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Request a certificate for a web server freeipa.ansible_freeipa.ipacert: ipaadmin_password: "{{ ipaadmin_password }}" state: requested csr: | -----BEGIN CERTIFICATE REQUEST----- MIGYMEwCAQAwGTEXMBUGA1UEAwwOZnJlZWlwYSBydWxlcyEwKjAFBgMrZXADIQBs HlqIr4b/XNK+K8QLJKIzfvuNK0buBhLz3LAzY7QDEqAAMAUGAytlcANBAF4oSCbA 5aIPukCidnZJdr491G4LBE+URecYXsPknwYb+V+ONnf5ycZHyaFv+jkUBFGFeDgU SYaXm/gF8cDYjQI= -----END CERTIFICATE REQUEST----- principal: HTTP/client.idm.example.com register: cert将证书请求替换为 new.csr 中的 CSR。
请求证书:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/request-certificate.yml
2.2. 使用 Ansible 为 IdM 主机、服务和用户撤销 SSL 证书 复制链接链接已复制到粘贴板!
您可以使用 ansible-freeipa freeipa.ansible_freeipa.ipacert 模块撤销身份管理(IdM)用户、主机和服务用来向 IdM 进行身份验证的 SSL 证书。
使用以下示例为 HTTP 服务器撤销证书。吊销证书的原因是"keyCompromise"。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。 -
您已得到了证书的序列号,例如通过输入
openssl x509 -noout -text -in <path_to_certificate>命令。在本例中,证书的序列号为 123456789。 - 您的 IdM 部署有一个集成的 CA。
流程
使用以下内容创建 Ansible playbook 文件 revoke-certificate.yml :
--- - name: Playbook to revoke a certificate hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Revoke a certificate for a web server freeipa.ansible_freeipa.ipacert: ipaadmin_password: "{{ ipaadmin_password }}" serial_number: 123456789 revocation_reason: "keyCompromise" state: revoked撤销证书:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/revoke-certificate.yml
2.3. 使用 Ansible 为 IdM 用户、主机和服务恢复 SSL 证书 复制链接链接已复制到粘贴板!
当您恢复私钥并确认在保存期间没有被破坏时,从 使用 Ansible playbook 发布证书。
您可以使用 ansible-freeipa ipacert 模块恢复之前由身份管理(IdM)用户、主机或服务用来向 IdM 进行身份验证的已撤销的 SSL 证书。以下示例描述了如何发布 HTTP 服务的证书。
您只能恢复搁置的证书。您可能已将其搁置,例如,您不确定私钥是否已丢失。但是,您现在已恢复了密钥,并且您确定没有人在同时访问它,所以您希望重新恢复证书。
先决条件
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
- 您的 IdM 部署有一个集成的 CA。
-
您已得到证书的序列号,例如通过输入
openssl x509 -noout -text -in path/to/certificate命令。在本例中,证书序列号为 123456789。
流程
使用以下内容创建 Ansible playbook 文件 restore-certificate.yml :
--- - name: Playbook to restore a certificate hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Restore a certificate for a web service ipacert: ipaadmin_password: "{{ ipaadmin_password }}" serial_number: 123456789 state: released运行 playbook:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/restore-certificate.yml
2.4. 使用 Ansible 为 IdM 用户、主机和服务检索 SSL 证书 复制链接链接已复制到粘贴板!
使用 Ansible 从身份管理(IdM)检索现有的 SSL 证书,并将其存储在受管节点上,供用户、主机或服务使用。
先决条件
在控制节点上:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。 -
您已得到了证书的序列号,例如通过输入
openssl x509 -noout -text -in <path_to_certificate>命令。在本例中,证书的序列号为 123456789,存储检索到的证书的文件是 cert.pem。
流程
使用以下内容创建 Ansible playbook 文件 retrieve-certificate.yml :
--- - name: Playbook to retrieve a certificate and store it locally on the managed node hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Retrieve a certificate and save it to file 'cert.pem' freeipa.ansible_freeipa.ipacert: ipaadmin_password: "{{ ipaadmin_password }}" serial_number: 123456789 certificate_out: cert.pem state: retrieved检索证书:
$ ansible-playbook --vault-password-file=password_file -v -i <path_to_inventory_directory>/hosts <path_to_playbooks_directory>/retrieve-certificate.yml
第 3 章 使用集成的 IdM CA 为用户、主机和服务管理证书 复制链接链接已复制到粘贴板!
管理员通过集成的 IdM 证书颁发机构向用户、主机和服务管理证书生命周期。这种中央控制允许简化整个域基础架构的颁发、吊销和续订。
3.1. 使用 IdM Web UI 为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
您可以使用身份管理(IdM) Web UI 为来自集成 IdM 证书颁发机构(CA)的任何 IdM 实体请求新证书: ipa CA 或其任何子 CA。
IdM 实体包括:
- 用户
- 主机
- 服务
服务通常在其上存储了私钥的专用服务节点上运行。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 以 IdM 管理员身份登录到 IdM Web UI。
流程
-
在
Identity选项卡下,选择Users、Hosts或Services子选项卡。 单击用户、主机或服务的名称,以打开其配置页面。
主机列表
- 单击 → 。
- 可选:选择发布 CA 和配置文件 ID。
-
按照说明使用屏幕上的
certutil命令行(CLI)工具。 - 点 。
3.2. 使用 certutil 从 IdM CA 中为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
您可以使用 certutil 工具在标准的 IdM 环境下为身份管理(IdM)用户、主机或服务请求证书。要确保主机或服务 Kerberos 别名可以使用证书,请 使用 openssl 工具来请求证书。
服务通常在其上存储了私钥的专用服务节点上运行。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 您已经以 IdM 管理员的身份登录到 IdM 命令行界面(CLI)。
流程
为证书数据库创建一个临时目录:
# mkdir ~/certdb/例如,创建一个新的临时证书数据库:
# certutil -N -d ~/certdb/创建 CSR,并将输出重定向到文件。例如,要为 4096 位证书创建一个 CSR,并将主题设为 CN=server.example.com,O=EXAMPLE.COM :
# certutil -R -d ~/certdb/ -a -g 4096 -s "CN=server.example.com,O=EXAMPLE.COM" -8 server.example.com > certificate_request.csr将证书请求文件提交到 IdM 服务器上运行的 CA。指定要与新发布的证书关联的 Kerberos 主体:
# ipa cert-request certificate_request.csr --principal=host/server.example.comIdM 中的
ipa cert-request命令使用以下默认值:caIPAserviceCert证书配置文件要选择自定义配置文件,请使用
--profile-id选项。集成的 IdM root CA
ipa要选择子 CA,请使用
--ca选项。
3.3. 使用 openssl 从 IdM CA 中为用户、主机或服务请求新证书 复制链接链接已复制到粘贴板!
如果要确保主机或服务的 Kerberos 别名可以使用证书,您可以使用 openssl 工具为身份管理(IdM)主机或服务请求证书。在标准情况下,请考虑 使用 certutil 工具来请求一个新证书。
服务通常在其上存储了私钥的专用服务节点上运行。将服务的私钥复制到 IdM 服务器被视为不安全。因此,在为服务请求证书时,请在服务节点上创建证书签名请求(CSR)。
先决条件
- 您的 IdM 部署包含一个集成 CA。
- 您已经以 IdM 管理员的身份登录到 IdM 命令行界面(CLI)。
流程
- 为您的 Kerberos 主体 test/server.example.com 创建一个或多个别名。例如,test1/server.example.com 和 test2/server.example.com。
在 CSR 中,为 dnsName(server.example.com)和 otherName(test2/server.example.com)添加 subjectAltName。要做到这一点,将
openssl.cnf文件配置为包含以下指定 UPN otherName 和 subjectAltName 的行:otherName=1.3.6.1.4.1.311.20.2.3;UTF8:test2/server.example.com@EXAMPLE.COM DNS.1 = server.example.com使用
openssl创建证书请求:# openssl req -new -newkey rsa:2048 -keyout test2service.key -sha256 -nodes -out certificate_request.csr -config openssl.cnf将证书请求文件提交到 IdM 服务器上运行的 CA。指定要与新发布的证书关联的 Kerberos 主体:
# ipa cert-request certificate_request.csr --principal=host/server.example.comIdM 中的
ipa cert-request命令使用以下默认值:caIPAserviceCert证书配置文件要选择自定义配置文件,请使用
--profile-id选项。集成的 IdM root CA
ipa要选择子 CA,请使用
--ca选项。
第 4 章 管理 IdM 用户、主机和服务的外部签名证书 复制链接链接已复制到粘贴板!
管理员使用身份管理(IdM)命令行界面(CLI)和 IdM Web UI 将外部签名的证书与内部帐户关联。此集成允许用户、主机和服务使用第三方或企业证书颁发机构发布的凭据进行身份验证。
4.1. 使用 IdM CLI ,将外部 CA 发布的证书添加到 IdM 用户、主机或服务 复制链接链接已复制到粘贴板!
ipa 命令行工具可让管理员将特定的外部证书附加到 IdM 实体。ipa user-add-cert 等命令接受 Base64 编码的字符串,将外部凭证直接链接到指定用户、主机或服务帐户。
先决条件
- 您已获得管理员用户的票据授予票据。
流程
要为 IdM 用户添加证书,请输入:
$ ipa user-add-cert user --certificate=MIQTPrajQAwg...指定以下信息:
- 用户名
Base64 编码的 DER 证书
注意不是将证书内容复制并粘贴到命令行,您可以将证书转换为 DER 格式,然后将其重新编码为 Base64。例如,要将
user_cert.pem证书添加给user,请输入:$ ipa user-add-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"
您可以在不添加任何选项的情况下,以交互方式运行
ipa user-add-cert命令。-
要将证书添加到 IdM 主机,请输入:
ipa host-add-cert -
要将证书添加到 IdM 服务,请输入:
ipa service-add-cert
4.2. 使用 IdM Web UI 将外部 CA 发布的证书添加到 IdM 用户、主机或服务中 复制链接链接已复制到粘贴板!
IdM Web UI 提供了一个图形界面来上传外部证书。管理员导航到目标实体的配置文件页面,并将 PEM 或 Base64 编码的证书数据直接粘贴到配置字段中以将其关联。
先决条件
- 您以管理用户的身份登录到身份管理(IdM)Web UI。
流程
-
打开
Identity选项卡,然后选择Users、Hosts或Services子选项卡。 - 单击用户、主机或服务的名称,以打开其配置页面。
单击
Certificates条目旁边的 。将证书添加给用户帐户
- 将 Base64 或 PEM 编码格式的证书粘贴到文本字段中,然后单击 。
- 单击 以保存更改。
4.3. 使用 IdM CLI 从 IdM 用户、主机或服务帐户中删除外部 CA 发布的证书 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)CLI 从 IdM 用户的帐户、主机或服务中删除外部签名的证书。
先决条件
- 您已获得管理员用户的票据授予票据。
流程
要从 IdM 用户中删除证书,请输入:
$ ipa user-remove-cert user --certificate=MIQTPrajQAwg...或者,您可以在不添加任何选项的情况下以交互方式运行
ipa user-remove-cert命令。指定以下信息:
- 用户名
- Base64 编码的 DER 证书
注意不是将证书内容复制并粘贴到命令行,您可以将证书转换为 DER 格式,然后将其重新编码为 Base64。例如,要从
user中删除user_cert.pem证书,请输入:$ ipa user-remove-cert user --certificate="$(openssl x509 -outform der -in user_cert.pem | base64 -w 0)"要从 IdM 主机中删除证书,请输入:
-
ipa host-remove-cert
-
要从 IdM 服务中删除证书,请输入:
-
ipa service-remove-cert
-
4.4. 使用 IdM Web UI 从 IdM 用户、主机或服务帐户中删除外部 CA 发布的证书 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以使用身份管理(IdM)Web UI 从 IdM 用户的帐户、主机或服务中删除外部签名的证书。
先决条件
- 您以管理用户的身份登录到身份管理(IdM)Web UI。
流程
-
打开
Identity选项卡,然后选择Users、Hosts或Services子选项卡。 - 单击用户、主机或服务的名称,以打开其配置页面。
- 单击要删除的证书旁边的 ,然后选择 。
- 单击 以保存更改。
第 5 章 转换证书格式以便和 IdM 一起工作 复制链接链接已复制到粘贴板!
管理员正确格式化证书以确保与 IdM 命令兼容。常见任务包括将外部证书加载到用户配置文件中,配置智能卡验证,以及导出凭证以进行浏览器兼容性。
5.1. IdM 中的证书格式和编码 复制链接链接已复制到粘贴板!
IdM 身份验证通过将显示的证书与存储的配置集数据进行比较来验证用户身份。虽然配置文件仅存储公共证书,但用户必须在身份验证过程中证明其具有对应的私钥。
- 系统配置
- IdM 配置文件中存储的内容仅是证书,而不是对应的私钥。在身份验证期间,用户还必须显示其拥有相应的私钥。用户通过显示包含证书和私钥的 PKCS #12 文件或两个文件:一个包含证书,另一个包含私钥,来执行此操作。
因此,将证书加载到用户配置文件的进程只接受不包含私钥的证书文件。
同样,当系统管理员为您提供了外部 CA 证书时,他将仅提供公共数据:不带私钥的证书。为智能卡验证配置 IdM 服务器或 IdM 客户端的 ipa-advise 工具期望输入文件包含外部 CA 的证书,而不是私钥。
- 证书编码
-
有两种常见的证书编码:隐私增强型电子邮件(
PEM)和区分的编码规则(DER)。base64格式与PEM格式几乎相同,但其不包含-----BEGIN CERTIFICATE-----/-----END CERTIFICATE-----页眉和页脚。
已使用 DER 编码的证书是一个二进制 X509 数字证书文件。作为二进制文件,证书不可读。DER 文件有时使用 .der 文件扩展名,但带有 .crt 和 .cer 文件扩展名的文件有时也会包含 DER 证书。包含密钥的 DER 文件可以命名为 .key。
使用 PEM Base64 编码的证书是一个人类可读的文件。文件包含前缀为"-----BEGIN …"行的 ASCII (Base64)装ored 数据。PEM 文件有时使用 .pem 文件扩展名,但具有 .crt 和 .cer 文件扩展名的文件有时也包含 PEM 证书。包含密钥的 PEM 文件可以命名为 .key。
不同的 ipa 命令对其接受的证书类型有不同的限制。例如,ipa user-add-cert 命令只接受以 base64 格式编码的证书,但 ipa-server-certinstall 可接受 PEM, DER, PKCS #7, PKCS #8 和 PKCS #12 证书。
| 编码格式 | 人类可读 | 通用文件扩展名 | 接受编码格式的 IdM 命令示例 |
|---|---|---|---|
| PEM/base64 | 是 | .pem, .crt, .cer | ipa user-add-cert, ipa-server-certinstall, … |
| DER | 否 | .der, .crt, .cer | ipa-server-certinstall, … |
IdM 中与证书相关的命令和格式 列出了将来的 ipa 命令和命令接受的证书格式。
- 用户身份验证
- 在使用 Web UI 访问 IdM 时,用户通过将两者都存储在浏览器的数据库中,证明自己拥有与证书对应的私钥。
当使用 CLI 访问 IdM 时,用户通过以下方法之一证明自己拥有与证书对应的私钥:
用户添加了
kinit -X命令的X509_user_identity参数的值,添加了连接到包含证书和密钥的智能卡的智能模块的路径:$ kinit -X X509_user_identity='PKCS11:opensc-pkcs11.so' idm_user用户添加两个文件作为
kinit -X命令的X509_user_identity参数的值,一个包含证书,另一个包含私钥:$ kinit -X X509_user_identity='FILE:`/path/to/cert.pem,/path/to/cert.key`' idm_user- 有用的证书命令
要查看证书数据,如主题和签发者:
$ openssl x509 -noout -text -in ca.pem要比较两个证书在哪行不同:
$ diff cert1.crt cert2.crt要比较哪行中两个证书与两列中显示的输出不同:
$ diff cert1.crt cert2.crt -y
5.2. 在 IdM CLI 中转换外部证书,并将其加载到 IdM 用户帐户 复制链接链接已复制到粘贴板!
IdM CLI 需要特定剥离的 PEM 格式的证书。管理员使用 OpenSSL 将二进制 DER 或 PKCS.509 文件转换为 PEM 字符串,在使用 ipa user-add-cert 命令将标头和页脚行添加到用户条目前删除它们。
流程
将证书转换为
PEM格式:如果您的证书为
DER格式:$ openssl x509 -in cert.crt -inform der -outform pem -out cert.pem如果您的文件是
PKCS #12格式,其通用文件扩展名为.pfx和.p12,并且包含证书、私钥和其他数据,请使用openssl pkcs12工具提取证书。提示时,输入保护存储在文件中私钥的密码:$ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pemEnter Import Password:
获得管理员凭证:
$ kinit admin根据以下方法之一,使用
IdM CLI将证书添加到用户帐户:在将字符串添加到
ipa user-add-cert命令前,使用sed工具删除PEM文件的第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----):$ ipa user-add-cert some_user --certificate="$(sed -e '/BEGIN CERTIFICATE/d;/END CERTIFICATE/d' cert.pem)"将不包含 第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----)的证书文件的内容复制并粘贴到
ipa user-add-cert命令中:$ ipa user-add-cert some_user --certificate=MIIDlzCCAn+gAwIBAgIBATANBgkqhki...注意您不能直接将包含证书的
PEM文件作为输入传给ipa user-add-cert命令,无需先删除第一行和最后一行(-----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE-----):$ ipa user-add-cert some_user --cert=some_user_cert.pem此命令会导致 "ipa: ERROR: Base64 decoding failed: Incorrect padding"错误消息。
要检查证书是否被系统接受:
$ ipa user-show some_user
5.3. 在 IdM Web UI 中转换外部证书以加载到 IdM 用户帐户 复制链接链接已复制到粘贴板!
IdM Web UI 通过接受带有或不使用标头的标准 PEM 或 Base64 格式来简化证书管理。管理员使用 OpenSSL 转换源文件,并将生成的文本直接粘贴到用户配置集界面中。
流程
使用
CLI,将证书转换为PEM格式:-
如果您的证书为
DER格式:
$ openssl x509 -in cert.crt -inform der -outform pem -out cert.pem如果您的文件是
PKCS #12格式,其通用文件扩展名为.pfx和.p12,并且包含证书、私钥和其他数据,请使用openssl pkcs12工具提取证书。提示时,输入保护存储在文件中私钥的密码:$ openssl pkcs12 -in cert_and_key.p12 -clcerts -nokeys -out cert.pemEnter Import Password:
-
如果您的证书为
-
在编辑器中打开证书,并复制内容。您可以包含 "-----BEGIN CERTIFICATE-----" and "-----END CERTIFICATE-----" 页眉和页脚行,但不必这样做,因为
PEM和base64格式已被 IdM Web UI 接受了。 - 在 IdM Web UI 中,以安全官员身份登录。
-
前往 Identity → Users →
<user_name>。 - 单击 Certificates 旁边的 Add。
- 将证书的 PEM 格式内容粘贴到打开的窗口中。
点击 Add。
如果证书被系统接受,您可以在用户配置文件中看到它列在 Certificates 中。
5.4. 准备将证书加载到浏览器 复制链接链接已复制到粘贴板!
在将用户证书导入到浏览器前,请确保证书和对应的私钥都是 PKCS #12 格式。有两种常见情况需要额外的准备工作:
- 证书位于 NSS 数据库中。有关如何在这种情况下进行操作的详情,请参阅 将 NSS 数据库中的证书和私钥导出到一个 PKCS #12 文件。
-
证书和私钥位于两个单独的
PEM文件中。有关如何在这种情况下进行操作的详情,请参考 将证书和私钥 PEM 文件合并到一个 PKCS #12 文件中。
之后,要将 PEM 格式的 CA 证书和 PKCS #12 格式的用户证书导入到浏览器中,请按照 配置浏览器来启用证书身份验证 和 使用证书作为身份管理用户来验证到身份管理 Web UI 中描述的流程。
5.4.1. 将证书和私钥从 NSS 数据库导出到 PKCS #12 文件中 复制链接链接已复制到粘贴板!
pk12util 工具将 NSS 数据库的加密对导出为可移植的格式。此命令将指定的证书及其私钥提取到适合浏览器导入的 .p12 文件中。
流程
使用
pk12util命令将证书从 NSS 数据库导出为PKCS12格式。例如,要将昵称为some_user的证书从存储在~/certdb目录中的 NSS 数据库导出到~/some_user.p12文件中:$ pk12util -d ~/certdb -o ~/some_user.p12 -n some_userEnter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL为
.p12文件设置合适的权限:# chmod 600 ~/some_user.p12由于
PKCS #12文件也包含私钥,因此必须对其进行保护以防止其他用户使用该文件。否则,他们能够模拟用户。
5.4.2. 将证书和私钥 PEM 文件合并到 PKCS #12 文件中 复制链接链接已复制到粘贴板!
您可以使用 openssl 命令将存储在单独的 PEM 文件中的证书和对应密钥合并到 PKCS automationhub 文件中。
流程
将存储在
certfile.cer中的证书和存储在certfile.key中的密钥合并到包含证书和密钥的certfile.p12文件中:$ openssl pkcs12 -export -in certfile.cer -inkey certfile.key -out certfile.p12
第 6 章 在身份管理中创建和管理证书配置文件 复制链接链接已复制到粘贴板!
证书授权机构(CA)在签名证书时使用证书配置文件,以确定证书签名请求(CSR)是否可接受,如果可接受,则证书中存在哪些功能和扩展。证书配置文件与发布特定类型的证书相关联。通过组合证书配置文件和 CA 访问控制列表(ACL),您可以定义和控制对自定义证书配置文件的访问。
在描述如何创建证书配置文件时,流程使用 S/MIME 证书作为示例。某些电子邮件程序支持使用安全多用途 Internet 邮件扩展(S/MIME)协议进行数字签名和加密的电子邮件。使用 S/MIME 签名或加密电子邮件消息,要求消息的发件人具有 S/MIME 证书。
6.1. 什么是证书配置文件? 复制链接链接已复制到粘贴板!
您可以使用证书配置文件确定证书的内容,以及发布证书的限制,如下所示:
- 用于加密证书签名请求的签名算法。
- 证书的默认有效期。
- 用于吊销证书的吊销原因。
- 如果主体的通用名称被复制到主题替代名称字段。
- 证书中应存在的特性和扩展。
单个证书配置文件与签发特定类型的证书相关联。您可以为 IdM 中的用户、服务和主机定义不同的证书配置文件。IdM 默认包括以下证书配置文件:
-
caIPAserviceCert -
IECUserRoles -
KDCs_PKINIT_Certs(内部使用)
另外,您可以创建和导入自定义配置文件,允许您为特定目的发布证书。例如,您可以将特定配置文件的使用限制为一个用户或一个组,防止其他用户和组使用该配置文件发布证书进行身份验证。要创建自定义证书配置文件,请使用 ipa certprofile 命令。
6.2. 创建证书配置文件 复制链接链接已复制到粘贴板!
您可以通过创建用于请求 S/MIME 证书的配置文件,通过命令行创建证书配置文件。
流程
通过复制现有的默认配置文件来创建自定义配置文件:
$ ipa certprofile-show --out smime.cfg caIPAserviceCert------------------------------------------------ Profile configuration stored in file 'smime.cfg' ------------------------------------------------ Profile ID: caIPAserviceCert Profile description: Standard profile for network services Store issued certificates: TRUE在文本编辑器中打开新创建的配置文件。
$ vi smime.cfg将
Profile ID更改为反映配置文件用法的名称,如smime。注意当您导入新创建的配置文件时,如果有
profileId字段,则其必须与命令行中指定的 ID 匹配。更新扩展的密钥用法配置。默认的扩展的密钥用法扩展配置用于 TLS 服务器和客户端身份验证。例如,对于 S/MIME,必须为电子邮件保护配置扩展的密钥用法:
policyset.serverCertSet.7.default.params.exKeyUsageOIDs=1.3.6.1.5.5.7.3.4导入新配置文件:
$ ipa certprofile-import smime --file smime.cfg \ --desc "S/MIME certificates" --store TRUE------------------------ Imported profile "smime" ------------------------ Profile ID: smime Profile description: S/MIME certificates Store issued certificates: TRUE
验证
验证新证书配置文件已被导入:
$ ipa certprofile-find------------------ 4 profiles matched ------------------ Profile ID: caIPAserviceCert Profile description: Standard profile for network services Store issued certificates: TRUE Profile ID: IECUserRoles Profile description: User profile that includes IECUserRoles extension from request Store issued certificates: TRUE Profile ID: KDCs_PKINIT_Certs Profile description: Profile for PKINIT support by KDCs Store issued certificates: TRUE Profile ID: smime Profile description: S/MIME certificates Store issued certificates: TRUE ---------------------------- Number of entries returned 4 ----------------------------
6.3. 什么是 CA 访问控制列表? 复制链接链接已复制到粘贴板!
证书颁发机构访问控制列表(CA ACL)规则定义哪些配置文件可用于向哪些主体发布证书。您可以使用 CA ACL 来执行此操作,例如:
- 确定可以使用特定配置文件向哪些用户、主机或服务发布证书
- 确定允许哪个 IdM 证书颁发机构或子 CA 发布证书
例如,使用 CA ACL ,您可以将只用于伦敦办事处工作的员工的配置文件限制为与伦敦办事处相关的 IdM 用户组的成员。
用于管理 CA ACL 规则的 ipa caacl 工具允许特权用户添加、显示、修改或删除指定的 CA ACL。
6.4. 定义 CA ACL 以控制对证书配置文件的访问 复制链接链接已复制到粘贴板!
您可以使用 caacl 工具定义 CA 访问控制列表(ACL)规则,以允许组中的用户访问自定义证书配置文件。在这种情况下,流程描述了如何创建 S/MIME 用户的组以及 CA ACL,以允许该组中的用户访问 smime 证书配置文件。
先决条件
- 确保您已获取 IdM 管理员的凭据。
流程
为证书配置文件的用户创建一个新组:
$ ipa group-add smime_users_group--------------------------------- Added group "smime users group" --------------------------------- Group name: smime_users_group GID: 75400001创建一个新用户来添加到
smime_user_group组中:$ ipa user-add smime_userFirst name: smime Last name: user---------------------- Added user "smime_user" ---------------------- User login: smime_user First name: smime Last name: user Full name: smime user Display name: smime user Initials: TU Home directory: /home/smime_user GECOS: smime user Login shell: /bin/sh Principal name: smime_user@IDM.EXAMPLE.COM Principal alias: smime_user@IDM.EXAMPLE.COM Email address: smime_user@idm.example.com UID: 1505000004 GID: 1505000004 Password: False Member of groups: ipausers Kerberos keys available: False将
smime_user添加到smime_users_group组中:$ ipa group-add-member smime_users_group --users=smime_userGroup name: smime_users_group GID: 1505000003 Member users: smime_user------------------------- Number of members added 1 -------------------------创建 CA ACL 以允许组中的用户访问证书配置文件:
$ ipa caacl-add smime_acl------------------------ Added CA ACL "smime_acl" ------------------------ ACL name: smime_acl Enabled: TRUE将用户组添加到 CA ACL 中:
$ ipa caacl-add-user smime_acl --group smime_users_groupACL name: smime_acl Enabled: TRUE User Groups: smime_users_group------------------------- Number of members added 1 -------------------------向 CA ACL 中添加证书配置文件:
$ ipa caacl-add-profile smime_acl --certprofile smimeACL name: smime_acl Enabled: TRUE Profiles: smime User Groups: smime_users_group------------------------- Number of members added 1 -------------------------
验证
查看您创建的 CA ACL 的详情:
$ ipa caacl-show smime_aclACL name: smime_acl Enabled: TRUE Profiles: smime User Groups: smime_users_group ...
6.5. 使用证书配置文件和 CA ACL 发布证书 复制链接链接已复制到粘贴板!
当证书颁发机构访问控制列表(CA ACL)允许时,您可以使用证书配置文件来请求证书。按照以下流程,使用自定义证书配置文件为用户请求 S/MIME 证书,该配置文件已通过 CA ACL 授予了访问权限。
先决条件
- 您的证书配置文件已创建。
- 允许用户使用所需证书配置文件请求证书的 CA ACL已创建。
您可以绕过 CA ACL 检查用户是否执行了 cert-request 命令:
-
是
admin用户。 -
具有
请求忽略 CA ACL 的证书权限。
流程
为用户生成证书请求。例如,使用 OpenSSL:
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -keyout private.key -out cert.csr -subj '/CN=smime_user'为用户从 IdM CA 请求新证书:
$ ipa cert-request cert.csr --principal=smime_user --profile-id=smime可选:将 --ca sub-CA_name 选项传给命令,来从子 CA 而不是根 CA 中请求证书。
验证
验证新发布的证书是否已分配给用户:
$ ipa user-show userUser login: _user_ ... Certificate: MIICfzCCAWcCAQA... ...
6.6. 修改证书配置文件 复制链接链接已复制到粘贴板!
您可以使用 ipa certprofile-mod 命令直接通过命令行修改证书配置文件。
流程
确定您要修改的证书配置文件的证书配置文件 ID。显示当前存储在 IdM 中的所有证书配置文件:
# ipa certprofile-find------------------ 4 profiles matched ------------------ Profile ID: caIPAserviceCert Profile description: Standard profile for network services Store issued certificates: TRUE Profile ID: IECUserRoles ... Profile ID: smime Profile description: S/MIME certificates Store issued certificates: TRUE -------------------------- Number of entries returned --------------------------修改证书配置文件描述。例如,如果您使用现有的配置文件为 S/MIME 证书创建了自定义证书配置文件,请按照新用法更改描述:
# ipa certprofile-mod smime --desc "New certificate profile description"------------------------------------ Modified Certificate Profile "smime" ------------------------------------ Profile ID: smime Profile description: New certificate profile description Store issued certificates: TRUE在文本编辑器中打开您的客户证书配置文件,并进行修改以满足您的要求:
# vi smime.cfg有关可以在证书配置文件中配置哪些选项的详情,请查看 证书配置文件配置参数。
更新现有证书配置文件:
# ipa certprofile-mod profile_ID --file=smime.cfg
验证
验证证书配置文件是否已更新:
$ ipa certprofile-show smimeProfile ID: smime Profile description: New certificate profile description Store issued certificates: TRUE
6.7. 证书配置文件配置参数 复制链接链接已复制到粘贴板!
配置文件使用参数和策略集来定义证书颁发机构行为。这些设置控制输入、输出、默认值和验证限制,允许管理员微调 CA 进程和批准特定证书请求的方式。
证书配置文件配置参数存储在 CA 配置文件目录 /var/lib/pki/pki-tomcat/ca/profiles/ca 中的 profile_name.cfg 文件中。配置文件的所有参数 - 默认值、输入、输出和约束 - 都在单个策略集中配置。为证书配置集设置的策略具有名称 policyset.policyName.policyNumber。例如,对于策略设置 serverCertSet :
policyset.list=serverCertSet
policyset.serverCertSet.list=1,2,3,4,5,6,7,8
policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl
policyset.serverCertSet.1.constraint.name=Subject Name Constraint
policyset.serverCertSet.1.constraint.params.pattern=CN=[^,]+,.+
policyset.serverCertSet.1.constraint.params.accept=true
policyset.serverCertSet.1.default.class_id=subjectNameDefaultImpl
policyset.serverCertSet.1.default.name=Subject Name Default
policyset.serverCertSet.1.default.params.name=CN=$request.req_subject_name.cn$, OU=pki-ipa, O=IPA
policyset.serverCertSet.2.constraint.class_id=validityConstraintImpl
policyset.serverCertSet.2.constraint.name=Validity Constraint
policyset.serverCertSet.2.constraint.params.range=740
policyset.serverCertSet.2.constraint.params.notBeforeCheck=false
policyset.serverCertSet.2.constraint.params.notAfterCheck=false
policyset.serverCertSet.2.default.class_id=validityDefaultImpl
policyset.serverCertSet.2.default.name=Validity Default
policyset.serverCertSet.2.default.params.range=731
policyset.serverCertSet.2.default.params.startTime=0
每个策略集都包含按照策略 ID 号为证书配置文件配置的策略列表,以它们的评估顺序排列。服务器为其收到的每个请求评估每个策略集。收到单个证书请求时,将评估一个集合,并忽略配置文件中的任何其他集合。发布双密钥对后,对第一个证书请求评估第一个策略集,对第二个证书请求评估第二个策略集。在发布双密钥对时,在发布单个证书或多个集合时,您不需要多个策略集。
| 参数 | 描述 |
|---|---|
| desc |
证书配置文件的自由文本描述,显示在终端实体页面上。例如, |
| enable |
启用配置文件,使它可通过终端实体页面访问。例如: |
| auth.instance_id |
设置身份验证管理者插件,用来验证证书请求。要进行自动注册,如果身份验证成功,CA 会立即发布证书。如果身份验证失败或者没有指定身份验证插件,则会将请求排队,来由代理手动批准。例如, |
| authz.acl |
指定授权约束。这主要用于设置组评估访问控制列表(ACL)。例如,
在基于目录的用户证书续订中,此选项用于确保原始请求者和当前验证的用户是同一个。在评估授权前,实体必须验证(绑定或登录到系统)。 |
| name |
证书配置文件的名称。例如, |
| input.list |
按名称列出证书配置文件允许的输入。例如, |
| input.input_id.class_id |
按输入 ID(在 input.list 中列出的输入名称)表示输入的 java 类名称。例如, |
| output.list |
按名称列出证书配置文件可能的输出格式。例如 |
| output.output_id.class_id |
为在 output.list 中命名的输出格式指定 java 类名称。例如: |
| policyset.list |
列出配置的证书配置文件规则。对于双证书,一组规则适用于签名密钥,另一组规则适用于加密密钥。单个证书仅使用一组证书配置文件规则。例如, |
| policyset.policyset_id.list |
按照策略 ID 号,按评估的顺序,列出为证书配置文件配置的策略集合中的策略。例如: |
| policyset.policyset_id.policy_number.constraint.class_id | 表示配置文件规则中配置的默认约束插件集的 java 类名称。例如, policyset.serverCertSet.1.constraint.class_id=subjectNameConstraintImpl。 |
| policyset.policyset_id.policy_number.constraint.name | 提供用户定义的约束名称。例如,policyset.serverCertSet.1.constraint.name=Subject Name Constraint。 |
| policyset.policyset_id.policy_number.constraint.params.attribute | 为约束的允许的属性指定值。可能的属性因约束类型而异。例如, policyset.serverCertSet.1.constraint.params.pattern=CN=.*. |
| policyset.policyset_id.policy_number.default.class_id | 给出配置文件规则中默认集的 java 类名称。例如, policyset.serverCertSet.1.default.class_id=userSubjectNameDefaultImpl |
| policyset.policyset_id.policy_number.default.name | 给出用户定义的默认值的名称。例如: policyset.serverCertSet.1.default.name=Subject Name Default |
| policyset.policyset_id.policy_number.default.params.attribute | 为默认值的允许的属性指定值。可能的属性因默认类型而异。例如: policyset.serverCertSet.1.default.params.name=CN=(Name)$request.requestor_name$. |
第 7 章 管理 IdM 中证书的有效性 复制链接链接已复制到粘贴板!
在身份管理(IdM)中,您可以管理现有证书和未来要发布的证书的有效性,但方法有所不同。
7.1. 管理 IdM CA 发布的现有证书的有效性 复制链接链接已复制到粘贴板!
管理员通过监控过期日期并更新有效证书或立即撤销被入侵的凭据来保持安全性。certmonger 和 certutil 等工具处理这些生命周期操作。
您可以使用以下方法管理 IdM CA 发布的现有证书的有效性:
通过使用原始证书签名请求(CSR)或私钥生成的新 CSR 请求新的证书来续订证书。您可以使用以下工具请求新证书:
- certmonger
-
您可以使用
certmonger请求服务证书。证书到期之前,certmonger将自动续订证书,从而确保服务证书持续有效。详情请参阅 使用 certmonger 为服务获取 IdM 证书。 - certutil
-
您可以使用
certutil续订用户、主机和服务证书。有关请求用户证书的详情,请参阅 请求新的用户证书并将其导出到客户端。 - openssl
-
您可以使用
openssl续订用户、主机和服务证书。
- 吊销证书。
- 如果证书已被临时吊销,则恢复证书。
7.2. 管理 IdM CA 发布的未来证书的有效性 复制链接链接已复制到粘贴板!
要管理 IdM CA 发布的未来证书的有效性,请修改、导入或创建证书配置文件。详情请参阅在 在身份管理中创建和管理证书配置文件。
7.3. 在 IdM WebUI 中查看证书的过期日期 复制链接链接已复制到粘贴板!
您可以使用 IdM WebUI 查看 IdM CA 发布的所有证书的到期日期。
先决条件
- 确保您已获取管理员的凭证。
流程
-
在
Authentication菜单中,点击Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
证书列表
-
在证书信息页面中,找到
Expires On信息。
7.4. 在 CLI 中查看证书的到期日期 复制链接链接已复制到粘贴板!
您可以使用命令行(CLI)查看证书的到期日期。
流程
使用
openssl工具以人类可读的格式打开文件:$ openssl x509 -noout -text -in ca.pemCertificate: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: sha256WithRSAEncryption Issuer: O = IDM.EXAMPLE.COM, CN = Certificate Authority Validity Not Before: Oct 30 19:39:14 2017 GMT Not After : Oct 30 19:39:14 2037 GMT
7.5. 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您知道您已丢失证书的私钥,则您必须吊销证书以防止其被滥用。您可以使用以下方法撤销带有集成 IdM CA 的证书:
7.5.1. 证书吊销原因 复制链接链接已复制到粘贴板!
已撤销的证书无效,无法用于身份验证。所有取消都是永久的,除了原因 6:证书冻结。
默认的吊销原因为 0:未指定。
| ID | 原因 | 解释 |
|---|---|---|
| 0 | 未指定 | - |
| 1 | 密钥泄露 | 签发证书的密钥不再被信任。 可能的原因是包括丢失的令牌或不正确的访问文件。 |
| 2 | CA 泄露 | 签发证书的 CA 不再被信任。 |
| 3 | 隶属关系更改了 | 可能的原因包括:
|
| 4 | 被取代 | 较新的证书替换了当前的证书。 |
| 5 | 停止操作 | 主机或服务将被停用。 |
| 6 | 证书冻结 | 证书被临时吊销。您可稍后恢复证书。 |
| 8 | 从 CRL 中删除 | 证书不再包含在证书吊销列表(CRL)中。 |
| 9 | 特权收回 | 用户、主机或服务不再被允许使用证书。 |
| 10 | 属性授权(AA)泄露 | AA 证书不再被信任。 |
7.5.2. 使用 IdM Web UI 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您知道您已丢失证书的私钥,则您必须吊销证书以防止其被滥用。您可以使用 IdM WebUI 吊销 IdM CA 发布的证书。
流程
-
点击
Authentication>Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
证书列表
- 在证书信息页面中,单击 → 。
- 选择吊销的原因,然后单击 。详情请参阅 证书吊销原因。
7.5.3. 使用 IdM CLI 吊销带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
如果您知道您已丢失证书的私钥,则您必须吊销证书以防止其被滥用。您可以使用 IdM CLI 吊销 IdM CA 发布的证书。
流程
使用
ipa cert-revoke命令,并指定:- 证书序列号
吊销原因的 ID 号;有关详细信息,请参阅 证书吊销原因
例如,因为原因 1 :
密钥泄露,要吊销序列号为1032的证书,请输入:$ ipa cert-revoke 1032 --revocation-reason=1
7.6. 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
管理员可以重新置于"证书冻结"中。恢复临时撤销的凭证以进行身份验证,而无需新的颁发请求。
7.6.1. 使用 IdM WebUI 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
IdM Web UI 简化了暂停证书的恢复功能。管理员在注册表中找到序列号,并删除 hold 状态,以立即验证凭据。
流程
-
在
Authentication菜单中,点击Certificates>Certificates。 单击证书的序列号,来打开证书信息页面。
IdM Web UI 中证书的列表
- 在证书信息页面中,单击 → 。
7.6.2. 使用 IdM CLI 恢复带有集成 IdM CA 的证书 复制链接链接已复制到粘贴板!
ipa cert-remove-hold 命令会重新激活当前处于 hold 状态的证书。管理员使用目标序列号执行此工具,以便临时撤销和恢复访问。
流程
使用
ipa cert-remove-hold命令并指定证书序列号。例如:$ ipa cert-remove-hold 1032
第 8 章 为智能卡验证配置身份管理 复制链接链接已复制到粘贴板!
身份管理(IdM)支持使用内部或外部授权机构发布的证书进行智能卡验证。配置 rootca.pem 文件,以便为外部证书颁发机构建立信任,从而实现了跨域的安全访问。
目前,IdM 不支持导入多个共享相同主题区分名称(DN)但加密方式不同的 CA。
8.1. 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
ipa-advise 工具生成一个配置脚本,来在服务器上启用智能卡验证。此脚本会自动设置 Apache HTTP 服务器、密钥分发中心(KDC)公钥加密,用于 Kerberos (PKINIT)的初始身份验证,以及用于证书处理的 IdM Web UI。
了解如何为证书由身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。
先决条件
- 有到 IdM 服务器的 root 访问权限。
您有 root CA 证书和所有中间 CA 证书:
- 为 <EXAMPLE.ORG> CA 直接发布证书的根 CA 的证书,或使用一个或多个其子 CA 发布证书。您可以从颁发机构发布证书的网页下载证书链。
-
IdM CA 证书。您可以从运行 IdM CA 实例的 IdM 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 所有中间 CA 的证书,即介于 <EXAMPLE.ORG> CA 和 IdM CA 之间。
流程
创建要进行配置的目录:
[root@server]# mkdir ~/SmartCard/进入该目录:
[root@server]# cd ~/SmartCard/获取存储在 PEM 格式文件中的相关 CA 证书。如果您的 CA 证书存储再不同格式的文件中,如 DER,请将其转换为 PEM 格式。IdM 证书颁发机构证书采用 PEM 格式,位于
/etc/ipa/ca.crt文件中。将 DER 文件转换为 PEM 文件:
# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM为方便起见,将证书复制到您要进行配置的目录中:
[root@server SmartCard]# cp /tmp/rootca.pem ~/SmartCard/[root@server SmartCard]# cp /tmp/subca.pem ~/SmartCard/[root@server SmartCard]# cp /tmp/issuingca.pem ~/SmartCard/可选:如果您使用外部证书颁发机构的证书,请使用
openssl x509工具查看PEM格式的文件的内容,以检查Issuer和Subject值是否正确:[root@server SmartCard]# openssl x509 -noout -text -in rootca.pem | more使用管理员特权,通过内置的
ipa-advise工具生成配置脚本:[root@server SmartCard]# kinit admin[root@server SmartCard]# ipa-advise config-server-for-smart-card-auth > config-server-for-smart-card-auth.shconfig-server-for-smart-card-auth.sh脚本执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
执行脚本,将包含根 CA 和子 CA 证书的 PEM 文件添加为参数:
[root@server SmartCard]# chmod +x config-server-for-smart-card-auth.sh[root@server SmartCard]# ./config-server-for-smart-card-auth.sh rootca.pem subca.pem issuingca.pemTicket cache:KEYRING:persistent:0:0 Default principal: \admin@IDM.EXAMPLE.COM [...] Systemwide CA database updated. The ipa-certupdate command was successful注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
可选:如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,则您可能需要禁用 OCSP 检查,以对 IdM Web UI 进行身份验证:
在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off重启 Apache 守护进程(httpd)使更改立即生效:
[root@server SmartCard]# systemctl restart httpd
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。该服务器现在被配置为智能卡验证。
注意要在整个拓扑中启用智能卡验证,请在每个 IdM 服务器中运行操作过程。
8.2. 使用 Ansible 为智能卡验证配置 IdM 服务器 复制链接链接已复制到粘贴板!
Ansible 使用 ipasmartcard_server 角色自动执行服务器配置。此 playbook 使用清单文件中指定的根和中间 CA 证书来配置 Apache 和 KDC。
您可以使用 Ansible 为其证书是由身份管理(IdM) CA 信任的 <EXAMPLE.ORG> 域的证书颁发机构(CA)发布的用户启用智能卡验证。要做到这一点,您必须获取以下证书,以便在运行具有 ipasmartcard_server ansible-freeipa 角色脚本的 Ansible playbook 时使用它们:
- 为 <EXAMPLE.ORG> CA 直接发布证书的根 CA 的证书,或使用一个或多个其子 CA 发布证书。您可以从颁发机构发布证书的网页下载证书链。详情请参阅 配置浏览器以启用证书验证 中的步骤 4。
-
IdM CA 证书。您可以从任何 IdM CA 服务器上的
/etc/ipa/ca.crt文件获取 CA 证书。 - 介于<EXAMPLE.ORG> CA 和 IdM CA 之间的所有 CA 的证书。
先决条件
-
您有到 IdM 服务器的
root访问权限。 -
您需要知道 IdM
admin密码。 - 您有根 CA 证书、IdM CA 证书以及所有中间 CA 证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。
流程
如果您的 CA 证书存储在不同格式(如
DER)的文件中,请将其转换为PEM格式:# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMIdM 证书颁发机构证书采用
PEM格式,位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:# openssl x509 -noout -text -in root-ca.pem | more进入您的 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/创建专用于 CA 证书的子目录:
$ mkdir SmartCard/为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中:
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/# cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/# cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 服务器。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- 根 CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件类似如下:
[ipaserver] ipaserver.idm.example.com [ipareplicas] ipareplica1.idm.example.com ipareplica2.idm.example.com [ipacluster:children] ipaserver ipareplicas [ipacluster:vars] ipaadmin_password= "{{ ipaadmin_password }}" ipasmartcard_server_ca_certs=/home/<user_name>/MyPlaybooks/SmartCard/root-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/intermediate-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/ipa-ca.crt使用以下内容创建一个
install-smartcard-server.ymlplaybook:--- - name: Playbook to set up smart card authentication for an IdM server hosts: ipaserver become: true roles: - role: ipasmartcard_server state: present保存该文件。
有关 FreeIPA Ansible 集合中的示例 playbook,请参阅控制节点上的
/usr/share/ansible/collections/ansible_collections/ansible_freeipa/playbooks/目录。运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-server.ymlipasmartcard_serverAnsible 角色执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
可选:如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,则您可能需要禁用 OCSP 检查,以对 IdM Web UI 进行身份验证:
以
root用户身份连接到 IdM 服务器:ssh root@ipaserver.idm.example.com在
/etc/httpd/conf.d/ssl.conf文件中将SSLOCSPEnable参数设为off:SSLOCSPEnable off重启 Apache 守护进程(httpd)使更改立即生效:
# systemctl restart httpd
警告如果您只使用 IdM CA 发出的用户证书,不要禁用 OCSP 检查。OCSP 响应器是 IdM 的一部分。
有关如何保持 OCSP 检查处于启用状态,同时防止 IdM 服务器拒绝用户证书(如果 IdM 服务器不包含有关颁发用户证书的 CA 侦听 OCSP 服务请求的位置的信息)的说明,请参阅 Apache mod_ssl 配置选项 中的
SSLOCSPDefaultResponder指令。清单文件中列出的服务器现在已被配置为进行智能卡验证。
注意要在整个拓扑中启用智能卡验证,请将 Ansible playbook 中的
hosts变量设为ipacluster:--- - name: Playbook to set up smartcard for IPA server and replicas hosts: ipacluster [...]
8.3. 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
IdM 客户端需要特定的配置来支持 SSH、GDM 和控制台会话的智能卡登录。您可以在服务器上生成设置脚本,并在目标客户端上执行它来配置 SSSD 和系统信任存储。
您可以为智能卡验证配置 IdM 客户端。这个过程需要运行在每个 IdM 系统、客户端或服务器上,您希望在使用智能卡进行身份验证时连接到这些系统。例如,若要启用从主机 A 到主机 B 的 ssh 连接,需要在主机 B 上运行脚本。
作为管理员,运行这个流程来使用如下方法启用智能卡身份验证
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 其上运行浏览器的机器。机器可以在 IdM 域之外。
-
其上运行
httpd的 IdM 服务器。
以下流程假设您在 IdM 客户端,而不是 IdM 服务器上配置智能卡身份验证。因此,您需要两台计算机:生成配置脚本的 IdM 服务器,以及运行脚本的 IdM 客户端。
先决条件
- 为智能卡验证配置了您的 IdM 服务器,如 为智能卡验证配置 IdM 服务器 所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有 root CA 证书和所有中间 CA 证书。
-
您使用
--mkhomedir选项安装了 IdM 客户端,以确保远程用户可以成功登录。如果您没有创建主目录,则默认登录位置为目录结构的根目录/。
流程
在 IdM 服务器上,使用管理员权限通过
ipa-advise生成配置脚本:[root@server SmartCard]# kinit admin[root@server SmartCard]# ipa-advise config-client-for-smart-card-auth > config-client-for-smart-card-auth.shconfig-client-for-smart-card-auth.sh脚本执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
- 它配置系统安全服务守护进程 (SSSD),允许用户使用其用户名和密码或其智能卡进行验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
从 IdM 服务器中,将脚本复制到 IdM 客户端机器中选择的目录中:
[root@server SmartCard]# scp config-client-for-smart-card-auth.sh root@client.idm.example.com:/root/SmartCard/Password: config-client-for-smart-card-auth.sh 100% 2419 3.5MB/s 00:00为了方便起见,将 IdM 服务器上的 PEM 格式的 CA 证书文件复制到 IdM 客户端机器上与在上一步中所使用的相同的目录中:
[root@server SmartCard]# scp {rootca.pem,subca.pem,issuingca.pem} root@client.idm.example.com:/root/SmartCard/Password: rootca.pem 100% 1237 9.6KB/s 00:00 subca.pem 100% 2514 19.6KB/s 00:00 issuingca.pem 100% 2514 19.6KB/s 00:00在客户端机器上执行脚本,将包含 CA 证书的 PEM 文件添加为参数:
[root@client SmartCard]# kinit admin[root@client SmartCard]# chmod +x config-client-for-smart-card-auth.sh[root@client SmartCard]# ./config-client-for-smart-card-auth.sh rootca.pem subca.pem issuingca.pemTicket cache:KEYRING:persistent:0:0 Default principal: \admin@IDM.EXAMPLE.COM [...] Systemwide CA database updated. The ipa-certupdate command was successful注意在任何子 CA 证书前,确保将根 CA 的证书添加为参数,并且 CA 或子 CA 证书还没有过期。
现在为智能卡验证配置了客户端。
8.4. 使用 Ansible 为智能卡验证配置 IdM 客户端 复制链接链接已复制到粘贴板!
ipasmartcard_client Ansible 角色同时自动设置多个客户端。此 playbook 配置智能卡守护进程、系统信任存储和 SSSD 配置集,以允许整个基础架构中基于证书的身份验证。
为使用以下任一方式访问 IdM 的 IdM 用户启用智能卡验证:
ssh协议详情请查看 使用智能卡验证配置 SSH 访问。
- 控制台登录
- GNOME 显示管理器(GDM)
-
su命令
对于向 IdM Web UI 进行身份验证,不需要此流程。向 IdM Web UI 进行身份验证涉及两个主机,它们都不必是 IdM 客户端:
- 其上运行浏览器的机器。机器可以在 IdM 域之外。
-
其上运行
httpd的 IdM 服务器。
先决条件
- 您的 IdM 服务器已被配置为进行智能卡验证,如 使用 Ansible 为智能卡验证配置 IdM 服务器 中所述。
- 有对 IdM 服务器和 IdM 客户端的 root 访问权限。
- 您有根 CA 证书、IdM CA 证书以及所有中间 CA 证书。
您已配置了 Ansible 控制节点以满足以下要求:
- 您在使用 Ansible 版本 2.15 或更高版本。
-
您已安装了
ansible-freeipa软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个具有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了您的
ipaadmin_password,并且您可以访问存储了保护 secret.yml 文件的密码的文件。
-
目标节点(也就是在其上执行
freeipa.ansible_freeipa模块的节点)作为 IdM 客户端、服务器或副本,是 IdM 域的一部分。
流程
如果您的 CA 证书存储在不同格式(如
DER)的文件中,请将其转换为PEM格式:# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEMIdM CA 证书采用
PEM格式,位于/etc/ipa/ca.crt文件中。可选:使用
openssl x509工具查看PEM格式的文件内容,以检查Issuer和Subject值是否正确:# openssl x509 -noout -text -in root-ca.pem | more在 Ansible 控制节点上,导航到 ~/MyPlaybooks/ 目录:
$ cd ~/MyPlaybooks/创建专用于 CA 证书的子目录:
$ mkdir SmartCard/为方便起见,将所有必需的证书复制到 ~/MyPlaybooks/SmartCard/ 目录中,例如:
# cp /tmp/root-ca.pem ~/MyPlaybooks/SmartCard/# cp /tmp/intermediate-ca.pem ~/MyPlaybooks/SmartCard/# cp /etc/ipa/ca.crt ~/MyPlaybooks/SmartCard/ipa-ca.crt在 Ansible 清单文件中指定以下内容:
- 要为智能卡验证配置的 IdM 客户端。
- IdM 管理员密码。
CA 证书的路径按以下顺序:
- 根 CA 证书文件
- 中间 CA 证书文件
- IdM CA 证书文件
文件类似如下:
[ipaclients] ipaclient1.example.com ipaclient2.example.com [ipaclients:vars] ipaadmin_password=SomeADMINpassword ipasmartcard_client_ca_certs=/home/<user_name>/MyPlaybooks/SmartCard/root-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/intermediate-ca.pem,/home/<user_name>/MyPlaybooks/SmartCard/ipa-ca.crt使用以下内容创建
install-smartcard-clients.ymlplaybook:--- - name: Playbook to set up smart card authentication for an IdM client hosts: ipaclients become: true roles: - role: ipasmartcard_client state: present保存该文件。
有关 FreeIPA Ansible 集合中的示例 playbook,请参阅控制节点上的
/usr/share/ansible/collections/ansible_collections/ansible_freeipa/playbooks/目录。运行 Ansible playbook。指定 playbook 和清单文件:
$ ansible-playbook --vault-password-file=password_file -v -i inventory install-smartcard-clients.ymlipasmartcard_clientAnsible 角色执行以下操作:- 它配置智能卡守护进程。
- 它设置系统范围的信任存储。
它将系统安全服务守护进程(SSSD)配置为允许用户使用其用户名和密码或者智能卡进行身份验证。有关智能卡验证的 SSSD 配置集选项的详情,请参考 RHEL 中的智能卡验证选项。
清单文件的 ipaclients 部分中列出的客户端现在配置为进行智能卡验证。
注意如果您使用
--mkhomedir选项安装了 IdM 客户端,则远程用户将能够登录到其主目录。否则,默认登录位置是目录结构的根目录,/。
8.5. 在 IdM Web UI 的用户条目中添加证书 复制链接链接已复制到粘贴板!
您可以使用 IdM Web UI 将外部证书直接上传到用户配置集。此操作将物理智能卡中的特定凭证与相应的身份管理用户帐户相关联。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请参阅 配置身份验证的证书映射规则。
如果用户的证书已由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照以下流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
- 如果要给另一个用户添加证书,请以管理员身份登录到 IdM Web UI。要在您自己的配置文件中添加证书,您不需要管理员的凭证。
-
导航到
Users→Active users→sc_user。 -
找到
Certificate选项,并单击Add。 在命令行上,使用
cat工具或文本编辑器以PEM格式显示证书:[user@client SmartCard]$ cat testuser.crt- 将证书从 CLI 复制并粘贴到 Web UI 中打开的窗口中。
点击
Add。sc_user条目现在包含一个外部证书。
8.6. 在 IdM CLI 中向用户条目中添加证书 复制链接链接已复制到粘贴板!
命令行界面允许您将外部证书映射到用户条目。您必须在执行 ipa user-add-cert 命令前格式化证书字符串来删除标头和 footers。
也可以将证书映射数据上传到 IdM 中的用户条目,而不必上传整个证书。包含完整证书或证书映射数据的用户条目可以和相应的证书映射规则一起使用,以便于系统管理员配置智能卡身份验证。详情请参阅 配置身份验证的证书映射规则。
如果用户的证书已由 IdM 证书颁发机构发布,则证书已存储在用户条目中,您不需要按照以下流程操作。
先决条件
- 您有要添加到用户条目的证书。
流程
如果要给另一个用户添加证书,请以管理员身份登录到 IdM CLI:
[user@client SmartCard]$ kinit admin要在您自己的配置文件中添加证书,您不需要管理员的凭证。
[user@client SmartCard]$ kinit <smartcard_user>创建一个包含证书的环境变量,该变量移除了标头和页脚,并串联成一行,这是
ipa user-add-cert命令期望的格式:[user@client SmartCard]$ export CERT=`openssl x509 -outform der -in testuser.crt | base64 -w0 -`请注意,
testuser.crt文件中的证书必须是PEM格式。使用
ipa user-add-cert命令将证书添加到 <smartcard_user> 的配置文件中:[user@client SmartCard]$ ipa user-add-cert <smartcard_user> --certificate=$CERT<smartcard_user>条目现在包含一个外部证书。
8.7. 安装用来管理和使用智能卡的工具 复制链接链接已复制到粘贴板!
配置智能卡需要特定的中间件和管理工具,如 OpenSC 和 GnuTLS 软件包。启用 pcscd 服务,以便于系统和卡阅读器之间的通信。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:# dnf -y install opensc gnutls-utils启动
pcscd服务。# systemctl start pcscd
验证
验证
pcscd服务是否已启动并正在运行:# systemctl status pcscd
8.8. 准备智能卡并将证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
pkcs15-init 工具初始化空白智能卡并管理其加密内容。使用这个实用程序擦除卡,定义 PIN,创建存储插槽,并上传所需的私钥和证书。
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
$ pkcs15-init --erase-card --use-default-transport-keysUsing reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123Using reader with a card: Reader namepcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478Using reader with a card: Reader name标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214Using reader with a card: Reader name注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214Using reader with a card: Reader name可选:在智能卡的新插槽中保存并标记公钥:
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214Using reader with a card: Reader name注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
$ pkcs15-init -F在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
8.9. 使用智能卡登录到 IdM 复制链接链接已复制到粘贴板!
用户通过选择证书身份验证选项来安全地访问 IdM Web UI。浏览器提示输入智能卡 PIN 解锁设备并针对服务器验证用户身份。
先决条件
- web 浏览器被配置为使用智能卡验证。
- IdM 服务器被配置为智能卡验证。
- 在您的智能卡中安装的证书由 IdM 服务器发出,或者已添加到 IdM 的用户条目中。
- 您知道解锁智能卡所需的 PIN。
- 智能卡已插入到读取器中。
流程
- 在浏览器中打开 IdM Web UI。
- 点使用证书登陆。
如果 Password Required 对话框打开,请添加 PIN 来解锁智能卡,然后单击 OK 按钮。
此时会打开 User Identification Request 对话框。
如果智能卡包含多个证书,请在 选择用于验证的证书 下方的下拉列表中选择您要用于身份验证的证书。
点确定按钮。
现在,您已成功登录到 IdM Web UI。
8.10. 在 IdM 客户端中使用智能卡验证登录到 GDM 复制链接链接已复制到粘贴板!
GNOME 显示管理器(GDM)支持使用智能卡硬件直接登录。用户插入他们的卡,并输入 PIN 进行身份验证,自动获取会话的 Kerberos Ticket Granting Ticket (TGT)。
先决条件
- 为智能卡验证配置了系统。详情请参阅为智能卡验证配置 IdM 客户端。
- 该智能卡包含您的证书和私钥。
- 该用户帐户是 IdM 域的成员。
智能卡中的证书使用以下之一映射到用户条目:
- 为特定用户条目分配证书。详情请参阅 Adding a certificate to a user entry in the IdM Web UI 或 Adding a certificate to a user entry in the IdM CLI。
- 应用到该帐户的证书映射数据。详情请查看用于 在智能卡上配置身份验证的证书映射规则。
流程
- 在读取器中插入智能卡。
- 输入智能卡 PIN。
点 Sign In。
您成功登录到 RHEL 系统,并且您有一张由 IdM 服务器提供的 TGT。
验证
在 Terminal 中输入
klist,并检查结果:$ klistTicket cache: KEYRING:persistent:1358900015:krb_cache_TObtNMd Default principal: example.user@REDHAT.COM Valid starting Expires Service principal 04/20/2020 13:58:24 04/20/2020 23:58:24 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 04/27/2020 08:58:15
8.11. 在 su 命令中使用智能卡验证 复制链接链接已复制到粘贴板!
su 命令支持切换用户上下文的智能卡验证。当您配置它时,系统会提示用户输入智能卡 PIN,而不是输入密码来授权特权升级。
先决条件
为智能卡验证配置了您的 IdM 服务器和客户端。
- 该卡插入读卡器并连接到计算机。
流程
在终端窗口中,使用
su命令切换到其他用户:$ su - <user_name>PIN for smart_card如果配置正确,会提示您输入智能卡 PIN。
第 9 章 为 IdM 中智能卡验证配置 ADCS 发布的证书 复制链接链接已复制到粘贴板!
您可以使用 Active Directory (AD)证书服务(ADCS)为 IdM 智能卡用户发布凭证。此配置会在 IdM 环境中集成 AD 发布的证书,利用跨林信任在两个域间验证用户。
9.1. 先决条件 复制链接链接已复制到粘贴板!
- 身份管理(IdM)和活动目录(AD)信任已安装
- 活动目录证书服务(ADCS)已安装,并且用户证书已生成
9.2. 信任配置和证书使用量所需的 Windows 服务器设置 复制链接链接已复制到粘贴板!
配置 Windows 服务器涉及准备证书颁发机构来发布兼容凭证。您必须将密钥长度设置为至少 2048 位,并启用私钥导出来生成有效的 PKCS lorax (.PFX)文件。
您必须在 Windows 服务器上配置以下内容:
- 已安装活动目录证书服务(ADCS)
- 创建证书颁发机构
- 可选:如果您使用证书颁发机构 Web 注册,则必须配置互联网信息服务(IIS)
导出的证书必须满足以下条件:
-
密钥必须有
2048位或更多 - 包括一个私钥
您将需要以下格式的证书:个人信息交换—
PKCS #12(.PFX)- 启用证书隐私
9.3. 使用 sftp 从 Active Directory 复制证书 复制链接链接已复制到粘贴板!
要启用跨平台信任,您必须将特定证书文件从 Windows Server 传送到 Linux 环境。您必须将 root CA 证书安全地复制到 IdM 服务器和用户的私钥文件到客户端。
为了可以使用智能卡验证,您需要复制以下证书文件:
-
CER格式的根 CA 证书:IdM 服务器上的adcs-winserver-ca.cer。 -
具有
PFX格式私钥的用户证书:IdM 客户端上的aduser1.pfx。
这个过程预期 SSH 访问是允许的。如果 SSH 不可用,用户必须将 文件从 AD 服务器复制到 IdM 服务器和客户端。
流程
从 IdM 服务器 连接,并将
adcs-winserver-ca.cer根证书复制到 IdM 服务器:root@idmserver ~]# sftp Administrator@winserver.ad.example.comAdministrator@winserver.ad.example.com's password: Connected to Administrator@winserver.ad.example.com. sftp> cd <path_to_certificates> sftp> ls adcs-winserver-ca.cer aduser1.pfx sftp> sftp> get adcs-winserver-ca.cer Fetching <path_to_certificates>/adcs-winserver-ca.cer to adcs-winserver-ca.cer <path_to_certificates>/adcs-winserver-ca.cer 100% 1254 15KB/s 00:00 sftp quit从 IdM 客户端 连接,并将
aduser1.pfx用户证书复制到客户端:[root@client1 ~]# sftp Administrator@winserver.ad.example.comAdministrator@winserver.ad.example.com's password: Connected to Administrator@winserver.ad.example.com. sftp> cd /<path_to_certificates> sftp> get aduser1.pfx Fetching <path_to_certificates>/aduser1.pfx to aduser1.pfx <path_to_certificates>/aduser1.pfx 100% 1254 15KB/s 00:00 sftp quit现在,CA 证书保存在 IdM 服务器上,用户证书存储在客户端机器上。
9.4. 使用 ADCS 证书为智能卡身份验证配置 IdM 服务器和客户端 复制链接链接已复制到粘贴板!
ipa-advise 工具为 ADCS 集成自动配置身份管理(IdM)组件。生成服务器和客户端脚本,以安装必要的软件包、配置 Kerberos PKINIT,并将 CA 证书放在正确的系统目录中。
通过选择其中一个选项,为智能卡验证配置服务器和客户端:
-
在 IdM 服务器中:准备
ipa-advise脚本来为智能卡验证配置 IdM 服务器。 -
在 IdM 服务器中:准备
ipa-advise脚本来为智能卡验证配置 IdM 客户端。 -
在 IdM 服务器上:使用 AD 证书应用 IdM 服务器上的
ipa-advise服务器脚本。 - 将客户端脚本移到 IdM 客户端机器中。
-
在 IdM 客户端上:使用 AD 证书在 IdM 客户端上应用
ipa-advise客户端脚本。
先决条件
- 证书已复制到 IdM 服务器。
- 获取 Kerberos 票据。
- 以具有管理权限的用户身份登录。
流程
在 IdM 服务器上,使用
ipa-advise脚本来配置客户端:[root@idmserver ~]# ipa-advise config-client-for-smart-card-auth > sc_client.sh在 IdM 服务器上,使用
ipa-advise脚本来配置服务器:[root@idmserver ~]# ipa-advise config-server-for-smart-card-auth > sc_server.sh在 IdM 服务器中执行脚本:
[root@idmserver ~]# sh -x sc_server.sh adcs-winserver-ca.cer- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
将
sc_client.sh脚本复制到客户端系统中:[root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/rootPassword: sc_client.sh 100% 2857 1.6MB/s 00:00将 Windows 证书复制到客户端系统中:
[root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/rootPassword: adcs-winserver-ca.cer 100% 1254 952.0KB/s 00:00在客户端系统中运行客户端脚本:
[root@idmclient1 ~]# sh -x sc_client.sh adcs-winserver-ca.cerCA 证书现在以正确的格式安装在 IdM 服务器和客户端系统上。下一步是将用户证书复制到智能卡上。
9.5. 转换 PFX 文件 复制链接链接已复制到粘贴板!
智能卡工具需要特定格式的证书和密钥。您必须使用 OpenSSL 将从 Active Directory 导出的 PKCSautomationhub (.PFX)文件转换为单独的 PEM 格式的私钥和证书文件。
先决条件
- PFX 文件被复制到 IdM 客户端机器中。
流程
在 IdM 客户端上,将文件转换为 PEM 格式:
[root@idmclient1 ~]# openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodesEnter Import Password:将密钥提取到单独的文件中:
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.key将公共证书提取到单独的文件中:
[root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crt此时,您可以将
aduser1.key和aduser1.crt存储在智能卡中。
9.6. 安装用来管理和使用带有 ADCS 证书的智能卡的工具 复制链接链接已复制到粘贴板!
管理智能卡内容需要特定的软件工具,如 opensc 和 gnutls-utils 软件包。您必须启动 pcscd 服务,以启用系统和智能卡读取器之间的通信。
先决条件
-
您有
root权限。
流程
安装
opensc和gnutls-utils软件包:# dnf -y install opensc gnutls-utils启动
pcscd服务。# systemctl start pcscd
验证
验证
pcscd服务是否已启动并正在运行:# systemctl status pcscd
9.7. 准备智能卡并将 ADCS 证书和密钥上传到智能卡 复制链接链接已复制到粘贴板!
使用 pkcs15-init 工具,您可以初始化智能卡并使用 ADCS 凭证置备它们。初始化涉及删除卡、设置 PIN,并将转换的私钥和证书文件上传到新存储插槽。
pkcs15-init 工具可能无法使用所有智能卡。您必须使用您使用智能卡的工具。
先决条件
已安装
opensc软件包,其中包括pkcs15-init工具。如需了解更多详细信息,请参阅 安装用于管理和使用智能卡的工具。
- 该卡插入读卡器并连接到计算机。
-
您有一个要存储在智能卡上的私钥、公钥和证书。在此流程中,
testuser.key、testuserpublic.key和testuser.crt是用于私钥、公钥和证书的名称。 - 您有当前的智能卡用户 PIN 和 Security Officer PIN (SO-PIN)。
流程
擦除智能卡并使用您的 PIN 验证自己:
$ pkcs15-init --erase-card --use-default-transport-keysUsing reader with a card: Reader name PIN [Security Officer PIN] required. Please enter PIN [Security Officer PIN]:这个卡已经被清除。
初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:
$ pkcs15-init --create-pkcs15 --use-default-transport-keys \ --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123Using reader with a card: Reader namepcks15-init工具在智能卡上创建一个新插槽。为插槽设置标签和验证 ID:
$ pkcs15-init --store-pin --label testuser \ --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478Using reader with a card: Reader name标签设置为人类可读的值,在本例中为
testuser。auth-id必须是两个十六进制值,在本例中设为01。在智能卡的新插槽中存储并标记私钥:
$ pkcs15-init --store-private-key testuser.key --label testuser_key \ --auth-id 01 --id 01 --pin 963214Using reader with a card: Reader name注意在存储您的私钥并将证书存储在下一步中时,您为
--id指定的值必须相同。建议为--id指定自己的值,否则它们将更复杂的值由工具计算。在智能卡上的新插槽中存储并标记该证书:
$ pkcs15-init --store-certificate testuser.crt --label testuser_crt \ --auth-id 01 --id 01 --format pem --pin 963214Using reader with a card: Reader name可选:在智能卡的新插槽中保存并标记公钥:
$ pkcs15-init --store-public-key testuserpublic.key \ --label testuserpublic_key --auth-id 01 --id 01 --pin 963214Using reader with a card: Reader name注意如果公钥与私钥或证书对应,请指定与私钥或证书的 ID 相同的 ID。
可选:某些智能卡要求您通过锁定设置来完成卡:
$ pkcs15-init -F在这个阶段,您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。
9.8. 在 sssd.conf 中配置超时 复制链接链接已复制到粘贴板!
因为硬件延迟或虚拟化,智能卡操作可能会超过默认的 SSSD 超时值。您可以在 sssd.conf 中扩展 p11_child_timeout 和 krb5_auth_timeout 参数,以防止预处理身份验证失败。
使用智能卡证书进行身份验证的时间可能比 SSSD 使用的默认超时时间更长。超时时间可能是由以下原因造成的:
- 很慢的读卡器
- 从物理设备转发到虚拟环境
- 保存在智能卡上的证书太多
- 如果使用 OCSP 来验证证书,则来自 OCSP(在线证书状态协议)响应器的响应较慢
先决条件
- 您必须以 root 身份登录。
流程
打开
sssd.conf文件:[root@idmclient1 ~]# vim /etc/sssd/sssd.conf更改
p11_child_timeout的值:[pam] p11_child_timeout = 60更改
krb5_auth_timeout的值:[domain/IDM.EXAMPLE.COM] krb5_auth_timeout = 60保存设置。
现在,在验证超时失败前,允许与智能卡的交互运行 1 分钟(60 秒)。
9.9. 为智能卡身份验证创建证书映射规则 复制链接链接已复制到粘贴板!
证书映射规则将单个智能卡证书链接到跨 AD 和 IdM 的多个用户帐户。管理员在 IdM 服务器上配置这些规则,以便使用相同的物理令牌在两个域中启用无缝身份验证。
如果要将一个证书用于 AD(Active Directory)和 IdM(身份管理)中的帐户,您可以在 IdM 服务器上创建证书映射规则。
创建此类规则后,用户可以在两个域中使用其智能卡进行身份验证。
有关证书映射规则的详情,请参阅 用于配置身份验证的证书映射规则。
第 10 章 身份管理中的证书映射规则 复制链接链接已复制到粘贴板!
证书映射规则是一种便捷的方式,当身份管理(IdM)管理员无法访问某些用户的证书时,用户可以使用证书进行身份验证。这通常是因为证书已由外部证书颁发机构发布。
10.1. 用于配置身份验证的证书映射规则 复制链接链接已复制到粘贴板!
在以下情况下可能需要配置证书映射规则:
- 证书已由与 IdM 域处于信任关系的活动目录(AD)的证书系统发布。
- 证书已由外部证书颁发机构发布。
- IdM 环境较大,很多用户使用智能卡的用户。在这种情况下,添加完整证书可能会比较复杂。在大多数情况下,主题和签发者是可预测的,因此与完整证书相比,更容易提前添加。
作为系统管理员,您可以创建证书映射规则,并在向特定用户签发证书之前,为用户条目添加证书映射数据。签发证书后,用户可以使用该证书登录,即使完整证书尚未上传到用户条目。
另外,因为证书会定期续订,所以证书映射规则减少了管理开销。续订用户证书时,管理员不必更新用户条目。例如,如果映射基于 Subject 和 Issuer 值,如果新证书的主题和签发者与旧证书相同,则映射仍适用。如果使用完整证书,则管理员必须将新证书上传到用户条目以替换旧证书。
设置证书映射:
- 管理员必须将证书映射数据或完整的证书加载到用户帐户中。
- 管理员必须创建证书映射规则,以允许其帐户包含与证书上信息匹配的证书映射数据条目的用户成功登录到 IdM。
创建证书映射规则后,当最终用户提供存储在 文件系统 或 智能卡 上的证书时,身份验证成功。
-
密钥分发中心(KDC)有一个用于证书映射规则的缓存。缓存在第一个
certauth请求时填充,它有一个 300 秒的硬编码超时。KDC 不会看到对证书映射规则的任何更改,除非它重启了或缓存过期了。 - 您的证书映射规则可取决于您使用证书的用例。例如,如果您使用带有证书的 SSH,则必须有从证书中提取公钥的完整证书。
10.2. IdM 中身份映射规则的组件 复制链接链接已复制到粘贴板!
当在 IdM 中创建 身份映射规则 时,您可以配置不同的组件。每个组件都有一个可覆盖的默认值。您可以在 Web UI 或 CLI 中定义这些组件。在 CLI 中,身份映射规则使用 ipa certmaprule-add 命令创建。
- 映射规则
映射规则组件将证书与一个或多个用户帐户关联(或 映射)。规则定义将证书与预期用户帐户关联的 LDAP 搜索过滤器。
不同证书颁发机构(CA)发布的证书可能具有不同的属性,并可在不同的域中使用。因此,IdM 不适用于无条件地应用映射规则,而只适用于适当的证书。使用 匹配规则 定义适当的证书。
请注意,如果您将映射规则选项留空,则证书将在
userCertificate属性中作为 DER 编码的二进制文件进行搜索。利用
--maprule选项,在 CLI 中定义映射规则。- 匹配规则
匹配的规则组件选择您要应用映射规则的证书。默认匹配规则与具有
digitalSignature 密钥用法和clientAuth 扩展密钥用法的证书匹配。对于匹配,存储在
DER编码的ASN.1中的主题名称会根据 RFC 4514 转换为字符串。这意味着最具体的名称组件排在第一位。使用
--matchrule选项,在 CLI 中定义匹配的规则。例如,带有匹配规则的
ipa certmaprule-mod:<ISSUER>C=US,O=EXAMPLE.COM,CN=Global CA1不适用于带有issuer=C=US,O=EXAMPLE.COM,CN=Global CA1的证书。匹配规则的正确语法应该是
<ISSUER>CN=Global CA1,O=EXAMPLE.COM,C=US,其中最具体的组件CN和O排在C之前,例如:# ipa certmaprule-mod "Certificate mapping match" --matchrule '<ISSUER>CN=Global CA1,O=EXAMPLE.COM,C=US'---------------------------------------------------------------------- Modified Certificate Identity Mapping Rule "Certificate mapping match" ---------------------------------------------------------------------- Rule name: Certificate mapping match Mapping rule: (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}) Matching rule: <ISSUER>CN=Global CA1,O=EXAMPLE.COM,C=US Priority: 1 Enabled: True- 域列表
域列表指定您希望 IdM 在处理身份映射规则时搜索用户的身份域。如果您未指定 选项,IdM 仅在 IdM 客户端所属的本地域中搜索用户。
利用
--domain选项,在 CLI 中定义域。- 优先级
当多个规则适用于证书时,优先级最高的规则优先。所有其他规则将被忽略。
- 数字值越低,身份映射规则的优先级越高。例如,具有优先级 1 的规则的优先级高于优先级 2 的规则。
- 如果规则没有定义优先级值,它具有最低的优先级。
使用
--priority选项,在 CLI 中定义映射规则优先级。- 证书映射规则示例
要使用 CLI 定义称为
simple_rule的证书映射规则,如果该证书上的Subject与 IdM 中用户帐户中的certmapdata条目匹配,则允许对EXAMPLE.ORG机构的智能卡 CA发布的证书进行身份验证:# ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'
10.3. 从证书获取数据,以便在匹配规则中使用 复制链接链接已复制到粘贴板!
您可以从证书获取数据,以便您可以将其复制并粘贴到证书映射规则的匹配规则中。要获得匹配规则所需的数据,请使用 sssctl cert-show 或 sssctl cert-eval-rule 命令。
先决条件
- 您有 PEM 格式的用户证书。
流程
创建指向证书的变量,该变量还可确保正确编码,以便您可以检索所需的数据。
# CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)使用
sssctl cert-eval-rule来确定匹配的数据。在以下示例中,使用了证书序列号。# sssctl cert-eval-rule $CERT --match='<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --map='LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'Certificate matches rule. Mapping filter: (altSecurityIdentities=X509:<I>DC=com,DC=example,DC=ad,CN=adcs19-WIN1-CA<SR>0F0000000000DB8852DD7B246C9C0F0000003B)在这种情况下,将
altSecurityIdentities=后的所有内容添加到 AD 中用户的altSecurityIdentities属性中。如果使用 SKI 映射,请使用--map='LDAPU1: (altSecurityIdentities=X509:<SKI>{subject_key_id!hex_u})'。可选:要在 CLI 中基于匹配规则创建一个新的映射规则,该规则必须与
ad.example.com域的adcs19-WIN1-CA匹配,证书的序列号必须与用户帐户中的altSecurityIdentities条目匹配:# ipa certmaprule-add simple_rule --matchrule '<ISSUER>CN=adcs19-WIN1-CA,DC=AD,DC=EXAMPLE,DC=COM' --maprule 'LDAPU1:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})'
10.4. 使用 Active Directory 域信任的证书映射规则 复制链接链接已复制到粘贴板!
IdM 支持基于信任配置的活动目录用户的灵活证书映射。场景包括将存储在 AD 中的完整证书映射到使用 altSecurityIdentities 属性或完全处理 IdM 端的身份验证。
根据 AD 配置,可能会出现以下情况:
- 如果证书是由 AD 证书系统发布的,但用户和证书存储在 IdM 中,则身份验证请求的映射和整个处理发生在 IdM 端。有关配置此场景的详情,请参阅 为存储在 IdM 中的用户配置证书映射。
如果用户存储在 AD 中,则身份验证请求的处理会在 AD 中发生。有三个不同的子案例:
- AD 用户条目包含整个证书。有关在这种情况下配置 IdM 的详情,请参考为 AD 用户条目包含整个证书的用户配置证书映射。
-
AD 配置为将用户证书映射到用户帐户。在本例中,AD 用户条目不包含整个证书,而是包含名为
altSecurityIdentities 的属性。有关如何在这种场景中配置 IdM 的详情,请参阅在将 AD 配置为将用户证书映射到用户帐户时配置证书 映射。 AD 用户条目既不包含整个证书,也不包含映射数据。在这种情况下,有两个选项:
- 如果用户证书是由 AD 证书系统发布的,则证书会包含作为 Subject Alternative Name (SAN)的用户主体名称,或者如果最新的更新被应用到 AD,则用户的 SID在证书的 SID 扩展中。它们都可用于将证书映射到用户。
-
如果用户证书位于智能卡上,要启用带有智能卡的 SSH,SSSD 必须从证书生成公共 SSH 密钥,因此需要完整证书。唯一的解决方案是使用
ipa idoverrideuser-add命令将整个证书添加到 IdM 中 AD 用户的 ID 覆盖中。详情请参阅 在 AD 用户条目不包含证书或映射数据时配置证书映射。
AD 域管理员可以使用 altSecurityIdentities 属性手动将证书映射到 AD 中的用户。此属性有六个支持的值,但三个映射被视为不安全。作为 2022 年 5 月 10 日安全更新 的一部分,在安装之后,所有设备都处于兼容模式,如果证书被弱映射到用户,则身份验证如预期发生。但是,会记录警告消息,标识任何与完整执行模式不兼容的证书。从 2023 年 11 月 14 日起,所有设备都将更新为完整的强制模式,如果证书不满足强映射标准,则身份验证将被拒绝。
例如,当 AD 用户请求带有证书(PKINIT)的 IdM Kerberos 票据时,AD 需要在内部将证书映射到用户,并为此使用新的映射规则。但是,在 IdM 中,如果 IdM 被用于将证书映射到 IdM 客户端上的用户,则以前的规则可以继续工作。
IdM 支持新的映射模板,使 AD 管理员更易于使用新规则,而不维护这两个模板。IdM 现在支持添加到活动目录的新映射模板,来包括:
- 序列号:LDAPU1: (altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<SR>{serial_number!hex_ur})
- 主题 Key Id: LDAPU1: (altSecurityIdentities=X509:<SKI>{subject_key_id!hex_u})
- 用户 SID:LDAPU1: (objectsid={sid})
如果您不想使用新的 SID 扩展重新发布证书,您可以通过将适当的映射字符串添加到 AD 中的 altSecurityIdentities 属性来创建一个手动映射。
第 11 章 为存储在 IdM 中的用户配置证书映射 复制链接链接已复制到粘贴板!
如果配置的证书身份验证的用户存储在 IdM 中,您可以在 IdM 中启用证书映射。您必须完成以下任务:
- 设置证书映射规则,以便具有与映射规则及其证书映射数据条目中指定的条件匹配的证书的 IdM 用户可以向 IdM 进行身份验证。
- 将证书映射数据输入到 IdM 用户条目中,以便用户可以使用多个证书进行身份验证,只要它们都包含证书映射数据条目中指定的值。
11.1. 先决条件 复制链接链接已复制到粘贴板!
- 用户在 IdM 中有一个帐户。
- 管理员拥有要添加到用户条目的整个证书或证书映射数据。
11.2. 在 IdM Web UI 中为存储在 IdM 中的用户添加证书映射规则 复制链接链接已复制到粘贴板!
IdM Web UI 提供了一个图形界面来定义映射策略。管理员配置规则以根据发行者过滤证书,并定义系统如何提取身份信息以匹配存储的用户记录。
流程
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 点击
Add。在 IdM Web UI image::new-certmaprule-add.png[Screenshot 的 IdM Web UI 中添加一个新的证书映射规则,从 Authentication 选项卡中显示 "Certificate Identity Mapping Rules" 子选项卡。突出显示页面右侧的"添加"按钮。]
- 输入规则名称。
输入映射规则。例如,要让 IdM 搜索提供给它们的任何证书中的
Issuer和Subject条目,并根据所显示证书的两个条目中提供的信息做出验证决定:(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})输入匹配的规则。例如,只允许
EXAMPLE.ORG机构智能卡 CA发布的证书来验证用户到 IdM:<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG在 IdM Web UI image::certmaprule-add-details1.png[Screenshot of the "Add Certificate Identity Mapping Rule" 弹出窗口中输入证书映射规则 的详情: Rule name (需要)- 匹配规则。Priority 字段为空,域名标签旁边还有一个 Add 按钮。]
-
单击对话框底部的
Add,以添加该规则并关闭该框。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
# systemctl restart sssd现在,您设置了证书映射规则,可将在智能卡证书中找到的映射规则中指定的数据类型与 IdM 用户条目中的证书映射数据进行比较。找到匹配项后,它将对匹配的用户进行身份验证。
11.3. 在 IdM CLI 中为存储在 IdM 中的用户添加证书映射规则 复制链接链接已复制到粘贴板!
ipa certmaprule-add 命令直接从终端定义映射策略。管理员使用此实用程序编写规则的创建,按签发者过滤证书,并为用户识别提取特定的属性。
流程
获得管理员凭证:
# kinit admin输入映射规则以及映射规则所基于的匹配规则。例如,要让 IdM 搜索所呈现的任何证书中的
发行者和Subject条目,并基于所显示证书的两个条目中找到的信息进行身份验证,仅识别由EXAMPLE.ORG机构的智能卡 CA发布的证书:# ipa certmaprule-add rule_name --matchrule '<ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG' --maprule '(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})'------------------------------------------------------- Added Certificate Identity Mapping Rule "rule_name" ------------------------------------------------------- Rule name: rule_name Mapping rule: (ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}) Matching rule: <ISSUER>CN=Smart Card CA,O=EXAMPLE.ORG Enabled: TRUE系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
# systemctl restart sssd现在,您设置了证书映射规则,可将在智能卡证书中找到的映射规则中指定的数据类型与 IdM 用户条目中的证书映射数据进行比较。找到匹配项后,它将对匹配的用户进行身份验证。
11.4. 在 IdM 中为存储在 IdM Web UI 中的用户,将证书映射数据添加到用户条目中 复制链接链接已复制到粘贴板!
管理员使用 IdM Web UI 将身份验证凭据链接到用户帐户。此界面支持上传完整的证书文件,或者手动输入验证用户身份所需的特定 Issuer 和 Subject 字符串。
流程
- 以管理员身份登录 IdM Web UI。
-
导航到
Users→Active users→idm_user。 -
查找
证书映射数据选项并单击Add。 选择以下选项之一:
如果您有
idm_user的证书:在命令行上,使用
cat工具或文本编辑器显示证书:[root@server ~]# cat idm_user_certificate.pem-----BEGIN CERTIFICATE----- MIIFFTCCA/2gAwIBAgIBEjANBgkqhkiG9w0BAQsFADA6MRgwFgYDVQQKDA9JRE0u RVhBTVBMRS5DT00xHjAcBgNVBAMMFUNlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0x ODA5MDIxODE1MzlaFw0yMDA5MDIxODE1MzlaMCwxGDAWBgNVBAoMD0lETS5FWEFN [...output truncated...]- 复制证书。
在 IdM Web UI 中,单击
Certificate旁边的Add,并将证书粘贴到打开的窗口中。添加一个用户的证书映射数据: certificate image::user-add-cert.png[Screenshot of a pages of the user "demouser" with a Identity Settings column on the left with an Identity Settings column with a entries, as Job Title - First name - Last name - Full name - Display name."帐户设置"列位于右侧,包含条目(如用户登录 - 密码 - UID - GID)。突出显示"证书"条目的"添加"按钮。]
-
如果您没有
idm_user证书,但知道证书的Issuer和Subject,请检查Issuer and subject单选按钮,并在两个框中分别输入值。
添加用户证书映射数据:签发者和主题镜像::user-add-certdata.png[选择"Add Certificate Mapping Data"弹出窗口的 Screenshot of the and two radial 按钮选项: "Certificate mapping data" 和 "Issuer and subject." "Issuer and subject" is selected,其两个字段(Issuer and Subject)已填写。]
-
如果您没有
-
点击
Add。
验证
如果您可以访问 .pem 格式的整个证书,请验证是否用户和证书已链接:
使用
sss_cache程序在 SSSD 缓存中使idm_user记录无效,并强制重新载入idm_user信息:# sss_cache -u idm_user使用包含 IdM 用户证书的文件名称运行
ipa certmap-match命令:# ipa certmap-match idm_user_cert.pem-------------- 1 user matched -------------- Domain: IDM.EXAMPLE.COM User logins: idm_user ---------------------------- Number of entries returned 1 ----------------------------输出确认您现在已将证书映射数据添加到
idm_user,并且存在对应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的任何证书,以idm_user进行身份验证。
11.5. 在 IdM CLI 中,为存储在 IdM 中的用户将证书映射数据添加到用户条目中 复制链接链接已复制到粘贴板!
ipa user-add-certmapdata 命令将证书属性链接到用户条目。管理员使用此工具上传编码的证书或定义特定的 Subject 和 Issuer 字符串,从而建立身份验证所需的信任关系。
流程
获得管理员凭证:
# kinit admin选择以下选项之一:
如果您有
idm_user的证书,请使用ipa user-add-cert命令将证书添加到用户帐户中:# CERT=$(openssl x509 -in idm_user_cert.pem -outform der|base64 -w0)# ipa user-add-certmapdata idm_user --certificate $CERT如果您没有
idm_user的证书,但知道用户证书的Issuer和Subject:# ipa user-add-certmapdata idm_user --subject "O=EXAMPLE.ORG,CN=test" --issuer "CN=Smart Card CA,O=EXAMPLE.ORG"-------------------------------------------- Added certificate mappings to user "idm_user" -------------------------------------------- User login: idm_user Certificate mapping data: X509:<I>O=EXAMPLE.ORG,CN=Smart Card CA<S>CN=test,O=EXAMPLE.ORG
验证
如果您可以访问 .pem 格式的整个证书,请验证是否用户和证书已链接:
使用
sss_cache程序在 SSSD 缓存中使idm_user记录无效,并强制重新载入idm_user信息:# sss_cache -u idm_user使用包含 IdM 用户证书的文件名称运行
ipa certmap-match命令:# ipa certmap-match idm_user_cert.pem-------------- 1 user matched -------------- Domain: IDM.EXAMPLE.COM User logins: idm_user ---------------------------- Number of entries returned 1 ----------------------------输出确认您现在已将证书映射数据添加到
idm_user,并且存在对应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的任何证书,以idm_user进行身份验证。
第 12 章 为 AD 用户条目包含整个证书的用户配置证书映射 复制链接链接已复制到粘贴板!
如果 IdM 部署与 Active Directory (AD)信任中,您可以在 IdM 中启用证书映射,该用户存储在 AD 中,AD 中的用户条目包含整个证书。
12.1. 先决条件 复制链接链接已复制到粘贴板!
- 用户在 IdM 中没有帐户。
- 用户在 AD 中有一个包含证书的帐户。
- IdM 管理员有权访问 IdM 证书映射规则可以基于的数据。
为确保 PKINIT 对用户正常工作,必须满足以下条件之一:
- 用户条目中的证书包括用户的用户主体名称或 SID 扩展。
-
AD 中的用户条目在
altSecurityIdentities属性中有一个合适的条目。
12.2. 在 IdM Web UI 中,为其 AD 条目包含整个证书的用户添加证书映射规则 复制链接链接已复制到粘贴板!
IdM Web UI 允许管理员创建与 AD 中的 userCertificate 属性与提供的证书二进制 blob 匹配的规则。这可确保用户拥有存储在 目录中的准确凭据。
流程
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 点击
Add。在 IdM Web UI image::new-certmaprule-add.png[Screenshot 的 IdM Web UI 中添加一个新的证书映射规则,从 Authentication 选项卡中显示 "Certificate Identity Mapping Rules" 子页。突出显示右侧的"添加"按钮。]
- 输入规则名称。
输入映射规则。与 AD 中的可用内容相比,要向 IdM 提供整个证书以进行身份验证:
(userCertificate;binary={cert!bin})注意如果使用完整证书进行映射,如果续订了证书,您必须确保将新证书添加到 AD 用户对象中。
输入匹配的规则。例如,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行身份验证:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com存储在 AD image::certmaprule-add-details-ad-cert.png[Screenshot of the "Add Certificate Identity Mapping Rule" pop-up 窗口中的证书映射规则,填写以下字段: Rule name (需要)- 映射规则 - 匹配规则。Priority 字段为空,"Domain name"标签旁边还有一个"添加"按钮。]
-
点击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即加载新创建的规则,请在 CLI 中重启 SSSD:
# systemctl restart sssd
12.3. 在 IdM CLI 中,为其 AD 条目包含整个证书的用户添加证书映射规则 复制链接链接已复制到粘贴板!
使用 IdM CLI 定义强制执行严格的二进制匹配的映射规则。ipa certmaprule-add 命令将所提供的证书链接到 AD 中的 userCertificate 属性,验证用户身份。
流程
获得管理员凭证:
# kinit admin输入映射规则以及映射规则所基于的匹配规则。要获得与 AD 中可用证书相比的用于身份验证的完整证书,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书来进行验证:# ipa certmaprule-add simpleADrule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(userCertificate;binary={cert!bin})' --domain ad.example.com------------------------------------------------------- Added Certificate Identity Mapping Rule "simpleADrule" ------------------------------------------------------- Rule name: simpleADrule Mapping rule: (userCertificate;binary={cert!bin}) Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com Domain name: ad.example.com Enabled: TRUE注意如果使用完整证书进行映射,如果续订了证书,您必须确保将新证书添加到 AD 用户对象中。
系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
# systemctl restart sssd
第 13 章 如果将 AD 配置为将用户帐户映射到用户帐户,则配置证书映射 复制链接链接已复制到粘贴板!
如果 IdM 部署与 Active Directory (AD)信任中,您可以在 IdM 中启用证书映射,该用户存储在 AD 中,AD 中的用户条目包含证书映射数据。
13.1. 先决条件 复制链接链接已复制到粘贴板!
- 用户在 IdM 中没有帐户。
-
用户在 AD 中有一个帐户,其中包含
altSecurityIdentities 属性,即 IdMcertmapdata属性的 AD 等效。 - IdM 管理员有权访问 IdM 证书映射规则可以基于的数据。
13.2. 如果 AD 被配置为将用户证书映射到用户帐户,请在 IdM Web UI 中添加证书映射规则 复制链接链接已复制到粘贴板!
IdM Web UI 可让管理员创建将提供的证书映射到 Active Directory 中的 altSecurityIdentities 属性的规则。配置规则,以提取针对可信域进行身份验证的特定 Issuer 和 Subject 信息。
流程
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 点击
Add。在 IdM Web UI image::new-certmaprule-add.png[Screenshot 的 IdM Web UI 中添加一个新的证书映射规则,从 Authentication 选项卡中显示 "Certificate Identity Mapping Rules" 子选项卡。突出显示页面右侧的"添加"按钮。]
- 输入规则名称。
输入映射规则。例如,要使 AD DC 搜索所呈现的任何证书中的
Issuer和Subject条目,并决定根据所出示证书的两个条目中提供的信息进行验证:(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})输入匹配的规则。例如,要只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书来向 IdM 验证用户:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com输入域:
ad.example.com如果 AD 被配置为映射 image::certmaprule-add-details-ad-map.png[Screenshot of the "Add Certificate Identity Mapping Rule" pop-up window with the fields filled in: Rule name (需要)- Mapping rule - Matching rule."Priority"字段为空,"Domain name"标签旁边还有一个"添加"按钮。]
-
点击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即加载新创建的规则,请在 CLI 中重启 SSSD:
# systemctl restart sssd
13.3. 如果 AD 被配置为将用户证书映射到用户帐户,请在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
您可以使用 IdM CLI 添加所需的证书映射规则,以使用 Active Directory (AD)完成身份验证链接。使用这个规则,IdM 可以正确地将 AD 用户证书映射到其 IdM 帐户。
流程
获得管理员凭证:
# kinit admin输入映射规则以及映射规则所基于的匹配规则。例如,要让 AD 搜索所提供的任何证书中的
Issuer和Subject条目,并且只允许AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书:# ipa certmaprule-add ad_configured_for_mapping_rule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500})' --domain=ad.example.com------------------------------------------------------- Added Certificate Identity Mapping Rule "ad_configured_for_mapping_rule" ------------------------------------------------------- Rule name: ad_configured_for_mapping_rule Mapping rule: (altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}) Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com Domain name: ad.example.com Enabled: TRUE系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
# systemctl restart sssd
13.4. 检查 AD 端的证书映射数据 复制链接链接已复制到粘贴板!
altSecurityIdentities 属性是与 IdM 中的 certmapdata 用户属性等效的 Active Directory(AD)。当将可信 AD 域配置为将用户帐户映射到用户帐户时,IdM 系统管理员需要检查 AD 中的用户条目是否正确设置了 altSecurityIdentities 属性。
先决条件
- 用户帐户必须具有用户管理访问权限。
流程
要检查 AD 是否包含 AD 中存储的用户的正确信息,请使用
ldapsearch命令。例如,输入以下命令检查adserver.ad.example.com服务器是否适用以下条件:-
altSecurityIdentities属性在ad_user的用户条目中设置。 matchrule 满足以下条件:
-
ad_user用于向 AD 进行身份验证的证书由ad.example.com域的AD-ROOT-CA签发。 主题为
<S>DC=com,DC=example,DC=ad,CN=Users,CN=ad_user:$ ldapsearch -o ldif-wrap=no -LLL -h adserver.ad.example.com \ -p 389 -D cn=Administrator,cn=users,dc=ad,dc=example,dc=com \ -W -b cn=users,dc=ad,dc=example,dc=com "(cn=ad_user)" \ altSecurityIdentitiesEnter LDAP Password: dn: CN=ad_user,CN=Users,DC=ad,DC=example,DC=com altSecurityIdentities: X509:<I>DC=com,DC=example,DC=ad,CN=AD-ROOT-CA<S>DC=com,DC=example,DC=ad,CN=Users,CN=ad_user
-
-
第 14 章 如果 AD 用户条目不包含证书或映射数据,则配置证书映射 复制链接链接已复制到粘贴板!
如果 IdM 部署与 Active Directory (AD)信任中,您可以在 IdM 中启用证书映射,该用户存储在 AD 中,AD 中的用户条目既不包含整个证书或证书映射数据。
14.1. 先决条件 复制链接链接已复制到粘贴板!
- 用户在 IdM 中没有帐户。
-
用户在 AD 中有一个帐户,它不包含整个证书和
altSecurityIdentities 属性,即 IdMcertmapdata属性的 AD 等效。 IdM 管理员已完成了以下操作之一:
-
将整个 AD 用户证书添加到 IdM 中的 AD
用户 ID 覆盖中。 - 创建一个映射到证书中备用字段的证书映射规则,如 Subject Alternative Name 或用户的 SID。
-
将整个 AD 用户证书添加到 IdM 中的 AD
14.2. 如果 AD 用户条目不包含证书或映射数据,请在 IdM Web UI 中添加证书映射规则 复制链接链接已复制到粘贴板!
IdM Web UI 允许管理员定义与提供的证书与 ID 覆盖匹配的规则。通过指定类似 (userCertificate;binary={cert!bin}) 的映射规则,系统会将二进制证书数据与 IdM 中创建的覆盖条目进行比较。
流程
- 以管理员身份登录 IdM Web UI。
-
导航到
Authentication→Certificate Identity Mapping Rules→Certificate Identity Mapping Rules。 点击
Add。在 IdM Web UI image::new-certmaprule-add.png[Screenshot 的 IdM Web UI 中添加一个新的证书映射规则,从 Authentication 选项卡中显示 "Certificate Identity Mapping Rules" 子页。突出显示右侧的"添加"按钮]
- 输入规则名称。
输入映射规则。与存储在 IdM 中的 AD 用户条目的用户 ID 覆盖条目中的证书相比,为 IdM 提供整个证书进行身份验证:
(userCertificate;binary={cert!bin})注意因为证书还包含作为 SAN 的用户主体名称或最新更新、证书 SID 扩展中的用户的 SID ,所以您也可以使用这些字段将证书映射到用户。例如,如果使用用户的 SID,请将此映射规则替换为
LDAPU1:(objectsid={sid})。有关证书映射的更多信息,请参阅您系统上的sss-certmap手册页。输入匹配的规则。例如,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行身份验证:<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com输入域名。例如,要在
ad.example.com域中搜索用户:没有存储在 AD image::certmaprule-add-details-ad-cert.png[Screenshot of the "Add Certificate Identity Mapping Rule" 弹出窗口中的用户的证书映射规则,填写以下字段: Rule name (需要)- 映射规则 - 匹配规则。"Priority"字段为空,"Domain name"标签旁边还有一个 Add 按钮。]
-
点击
Add。 系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,在 CLI 中重启 SSSD:
# systemctl restart sssd
14.3. 如果 AD 用户条目不包含证书或映射数据,请在 IdM CLI 中添加证书映射规则 复制链接链接已复制到粘贴板!
管理员通过使用 IdM CLI 将证书链接到 AD 用户来定义映射规则。ipa certmaprule-add 命令创建与证书二进制数据或特定属性与 Default Trust View 中存储的 ID 覆盖条目匹配的策略。
流程
获得管理员凭证:
# kinit admin输入映射规则以及映射规则所基于的匹配规则。要获得与存储在 IdM 中的 AD 用户条目的用户 ID 覆盖条目中的证书相比的用于认证的整个证书,只允许
AD.EXAMPLE.COM域的AD-ROOT-CA发布的证书进行验证:# ipa certmaprule-add simpleADrule --matchrule '<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' --maprule '(userCertificate;binary={cert!bin})' --domain ad.example.com------------------------------------------------------- Added Certificate Identity Mapping Rule "simpleADrule" ------------------------------------------------------- Rule name: simpleADrule Mapping rule: (userCertificate;binary={cert!bin}) Matching rule: <ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com Domain name: ad.example.com Enabled: TRUE注意因为证书还包含作为 SAN 的用户主体名称或最新更新、证书 SID 扩展中的用户的 SID ,所以您也可以使用这些字段将证书映射到用户。例如,如果使用用户的 SID,请将此映射规则替换为
LDAPU1:(objectsid={sid})。有关证书映射的更多信息,请参阅您系统上的sss-certmap手册页。系统安全服务守护进程(SSSD)定期重新读取证书映射规则。要强制立即载入新创建的规则,重启 SSSD:
# systemctl restart sssd
14.4. 在 IdM Web UI 中添加证书到 AD 用户的 ID 覆盖中 复制链接链接已复制到粘贴板!
通过 ID 覆盖,管理员可以将特定的证书附加到 IdM 中的 AD 用户身份。此 IdM Web UI 流程将证书数据存储在 Default Trust View 中,使系统可以根据映射规则验证身份验证请求。
流程
-
导航到
Identity→ID Views→Default Trust View。 点击
Add。在 IdM Web UI image::new-useridoverride-add.png[Screenshot 的 IdM Web UI 中添加新用户 ID 覆盖,显示 Identity 选项卡中的 "ID Views" 页面。右侧的 Add 按钮会被突出显示。]
-
在
User to override字段中,输入ad_user@ad.example.com。 将
ad_user的证书复制并粘贴到Certificate字段中。为 AD 用户镜像配置用户 ID 覆盖 :useridoverride-add-details.png[Screenshot 显示带有以下字段的"添加用户 ID override"弹出窗口: User to override (需要)- User login - user login - UID - GID - 证书(已填写了证书的明文版本)。]
-
点击
Add。
验证
使用
sss_cache程序在 SSSD 缓存中使ad_user@ad.example.com记录无效,并强制重新载入ad_user@ad.example.com信息:# sss_cache -u ad_user@ad.example.com使用包含 AD 用户证书的文件名称运行
ipa certmap-match命令:# ipa certmap-match ad_user_cert.pem-------------- 1 user matched -------------- Domain: AD.EXAMPLE.COM User logins: ad_user@ad.example.com ---------------------------- Number of entries returned 1 ----------------------------输出确认,您具有的证书验证数据被添加到
ad_user@ad.example.com,并存在在 Adding a certificate mapping rule if the AD user entry contains no certificate or mapping data 中定义的相应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的证书作为ad_user@ad.example.com进行身份验证。
14.5. 在 IdM CLI 中在 AD 用户的 ID 覆盖中添加证书 复制链接链接已复制到粘贴板!
ipa idoverrideuser-add-cert 命令可将 Base64 编码的证书直接链接到 AD 用户的 ID 覆盖中。此 CLI 方法为证书映射规则建立必要的数据关联,以成功验证用户。
流程
获得管理员凭证:
# kinit admin将证书 blob 保存在名为
CERT的新变量中:# CERT=$(openssl x509 -in /path/to/certificate -outform der|base64 -w0)使用
ipa idoverrideuser-add-cert命令将ad_user@ad.example.com的证书添加到用户帐户中:# ipa idoverrideuser-add-cert ad_user@ad.example.com --certificate $CERT
验证
使用
sss_cache程序在 SSSD 缓存中使ad_user@ad.example.com记录无效,并强制重新载入ad_user@ad.example.com信息:# sss_cache -u ad_user@ad.example.com使用包含 AD 用户证书的文件名称运行
ipa certmap-match命令:# ipa certmap-match ad_user_cert.pem-------------- 1 user matched -------------- Domain: AD.EXAMPLE.COM User logins: ad_user@ad.example.com ---------------------------- Number of entries returned 1 ----------------------------输出确认,您具有的证书验证数据被添加到
ad_user@ad.example.com,并存在在 Adding a certificate mapping rule if the AD user entry contains no certificate or mapping data 中定义的相应的映射规则。这意味着,您可以使用与定义的证书映射数据匹配的证书作为ad_user@ad.example.com进行身份验证。
第 15 章 将多个身份映射规则合并到一个规则中 复制链接链接已复制到粘贴板!
要将多个身份映射规则组合成一个组合规则,请使用 | (或)字符在单个映射规则前前,并使用 () 方括号将它们分隔,例如:
证书映射过滤器的示例
$ ipa certmaprule-add ad_cert_for_ipa_and_ad_users \
--maprule='(|(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=AD-ROOT-CA,DC=ad,DC=example,DC=com' \
--domain=ad.example.com
在上例中,--maprule 选项中的过滤器定义包括以下条件:
-
ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}是一个过滤器,它将智能卡证书中的主题和签发者链接到 IdM 用户帐户中ipacertmapdata属性的值。 -
altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}是一个过滤器,它将智能卡证书中的主题和签发者链接到 AD 用户帐户中altSecurityIdentities属性的值。 -
添加
--domain=ad.example.com选项意味着映射到给定证书的用户不仅在本地idm.example.com域中搜索,还要在ad.example.com域中搜索
在 --maprule 选项中的过滤器定义接受逻辑操作符 | (或),以便您可以指定多个条件。在这种情况下,规则映射了至少满足其中一个条件的所有用户帐户。
证书映射过滤器的示例
$ ipa certmaprule-add ipa_cert_for_ad_users \
--maprule='(|(userCertificate;binary={cert!bin})(ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500})(altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}))' \
--matchrule='<ISSUER>CN=Certificate Authority,O=REALM.EXAMPLE.COM' \
--domain=idm.example.com --domain=ad.example.com
在上例中,--maprule 选项中的过滤器定义包括以下条件:
-
userCertificate;binary={cert!bin}是一个过滤器,它返回包含整个证书的用户条目。 -
ipacertmapdata=X509:<I>{issuer_dn!nss_x500}<S>{subject_dn!nss_x500}是一个过滤器,它将智能卡证书中的主题和签发者链接到 IdM 用户帐户中ipacertmapdata属性的值。 -
altSecurityIdentities=X509:<I>{issuer_dn!ad_x500}<S>{subject_dn!ad_x500}是一个过滤器,它将智能卡证书中的主题和签发者链接到 AD 用户帐户中altSecurityIdentities属性的值。
在 --maprule 选项中的过滤器定义接受逻辑操作符 | (或),以便您可以指定多个条件。在这种情况下,规则映射了至少满足其中一个条件的所有用户帐户。
第 16 章 使用存储在 IdM 客户端桌面的证书配置身份验证 复制链接链接已复制到粘贴板!
通过配置身份管理(IdM),IdM 系统管理员可以使用向用户签发的证书颁发机构(CA)的证书,使用户能够向 IdM Web UI 和命令行界面(CLI)进行身份验证。证书存储在 IdM 客户端的桌面上。
Web 浏览器可以在不属于 IdM 域的系统中运行。
在使用证书配置身份验证时请注意以下几点:
- 如果您要使用证书进行身份验证的用户已有证书,您可以跳过 请求新用户证书并将其导出到客户端 ;
- 如果用户的证书已由 IdM CA 发布,您可以跳过 确保证书和用户链接在一起。
只有 IdM 用户可以使用证书登录到 Web UI。Active Directory 用户可使用其用户名和密码登录。
16.1. 在 Web UI 中为证书验证配置身份管理服务器 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以允许用户使用证书为您的 IdM 环境进行身份验证。
流程
在 IdM 服务器上,获取管理员特权并创建 shell 脚本来配置服务器。
运行
ipa-advise config-server-for-smart-card-auth命令,并将其输出保存到一个文件中,例如server_certificate_script.sh:# kinit admin# ipa-advise config-server-for-smart-card-auth > server_certificate_script.sh使用
chmod实用程序为文件添加执行权限:# chmod +x server_certificate_script.sh
在 IdM 域中的所有服务器上,运行
server_certificate_script.sh脚本如果 IdM CA 是唯一一个您允许向用户签发证书用于验证的 CA,使用 IdM Certificate Authority 证书
/etc/ipa/ca.crt的路径:# ./server_certificate_script.sh /etc/ipa/ca.crt如果不同的外部 CA 签署您想要为其启用证书验证的用户证书,则使用路径作为输入:
# ./server_certificate_script.sh /tmp/ca1.pem /tmp/ca2.pem
注意如果要为整个拓扑中启用用户的证书身份验证,请不要忘记在将来添加到系统的每个新副本上运行 脚本。
16.2. 请求新的用户证书并将其导出到客户端 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以为 IdM 环境中的用户创建证书,并将其导出到您要为用户启用证书身份验证的 IdM 客户端。
如果要使用证书进行身份验证的用户已有证书,则不需要按照此路程操作。
流程
可选:创建一个新目录,如
~/certdb/,并使其成为一个临时证书数据库。当系统提示时,创建一个 NSS 证书数据库密码来加密后续步骤中生成的证书的密钥:# mkdir ~/certdb/# certutil -N -d ~/certdb/Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password:创建证书签名请求(CSR),并将输出重定向到文件。例如,要为
IDM.EXAMPLE.COM域中的idm_user用户创建一个名称为certificate_request.csr的4096位 CSR,请将证书私钥的昵称设为idm_user以便于查找,并将主题设为CN=idm_user,O=IDM.EXAMPLE.COM:# certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr提示时,输入与您在使用
certutil创建临时数据库时输入的相同的密码。然后继续随机输入,直到被告知停止:Enter Password or Pin for "NSS Certificate DB": A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full:将证书请求文件提交到服务器。指定要与新发布的证书关联的 Kerberos 主体、存储证书的输出文件,以及可选的证书配置集。例如,为
idm_user@IDM.EXAMPLE.COM获取IECUserRoles配置集(添加了用户角色扩展的配置集)的证书,把它保存在~/idm_user.pem文件中:# ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --certificate-out=~/idm_user.pem将证书添加到 NSS 数据库。使用
-n选项设置与之前创建 CSR 时使用的相同的昵称,以便证书与 NSS 数据库中的私钥匹配。-t选项设置信任级别。详情请查看 certutil(1)man page。-i选项指定输入证书文件。例如,要将带有在~/idm_user.pem文件中定义的idm_user别名的证书添加到~/certdb/数据库的 NSS数据库:# certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem验证 NSS 数据库中的密钥是否没有将
(orphan)显示为其昵称。例如,要验证存储在~/certdb/数据库中的证书不是孤立的:# certutil -K -d ~/certdb/< 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_user使用
pk12util命令将证书从 NSS 数据库导出为 PKCS12 格式。例如,要将来自/root/certdbNSS 数据库的带有idm_user别名的证书导出到~/idm_user.p12文件中:# pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_userEnter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL将证书传输到您要在其上为
idm_user启用证书身份验证的主机:# scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/在传输了证书的主机上,出于安全原因使 'pkcs12 文件被 'other' 组无法访问的目录:
# chmod o-rwx /home/idm_user/出于安全考虑,请从服务器中删除临时 NSS 数据库和 .pkcs12 文件:
# rm ~/certdb/# rm ~/idm_user.p12
16.3. 确保证书和用户链接在一起 复制链接链接已复制到粘贴板!
如果用户的证书已由 IdM CA 发布,则不需要按照此流程操作。
要使证书身份验证发挥作用,您需要确保证书链接到将使用证书进行身份管理(IdM)身份验证的用户。
- 如果证书由不是您的身份管理环境一部分的证书颁发机构提供,请将用户和证书连接在一起。
- 如果证书由 Identity Management CA 提供,则证书会自动添加到用户条目中,您不必将该证书链接到用户帐户。有关在 IdM 中创建新证书的详情,请参阅 请求新的用户证书并将其导出到客户端。
16.4. 配置浏览器以启用证书身份验证 复制链接链接已复制到粘贴板!
若要在使用 Web UI 登录身份管理(IdM)时通过证书进行身份验证,您需要将用户和相关证书颁发机构(CA)证书导入到 Mozilla Firefox 或 Google Chrome 浏览器。浏览器运行的主机本身不必是 IdM 域的一部分。
IdM 支持以下浏览器来连接到 WebUI:
- Mozilla Firefox 38 及更新的版本
- Google Chrome 46 及更新的版本
以下流程演示了如何配置 Mozilla Firefox 57.0.1 浏览器。
先决条件
- 您有 PKCS#12 格式的、要导入到浏览器的 用户证书。
流程
打开 Firefox,然后导航到
Preferences→Privacy & Security。Preferences 中的隐私和安全部分
单击 。
查看隐私和安全性中的证书
-
在
Your Certificates选项卡中,单击 。以 PKCS12 格式查找并打开用户证书,然后点 和 。 确保 Identity Management 证书授权机构被 Firefox 认可为可信颁发机构:
在本地保存 IdM CA 证书:
通过在 Firefox 地址栏中写入 IdM 服务器的名称,导航到 IdM Web UI。在 Insecure Connection 警告页面上单击
Advanced。不安全的连接
添加例外.单击View。查看证书的详情
在
Details选项卡中,突出显示Certificate Authority字段。导出 CA 证书
-
单击 。保存 CA 证书,例如
CertificateAuthority.crt文件,然后点 ,和 。
将 IdM CA 证书导入 Firefox 作为可信证书颁发机构证书:
打开 Firefox,导航到 Preferences 并点击 。
Preferences 中的隐私和安全部分
单击 。
查看隐私和安全性中的证书
-
在
Authorities选项卡中,单击 。查找并打开您在之前步骤中在CertificateAuthority.crt文件中保存的 CA 证书。信任证书来识别网站,然后点 和 。
- 继续 使用证书,以身份管理用户身份验证到身份管理 Web UI。
16.5. 以身份管理用户的身份使用证书向身份管理 Web UI 进行身份验证 复制链接链接已复制到粘贴板!
选择 certificate login 选项,安全地访问 IdM Web UI。浏览器向服务器提供导入的客户端证书,在无需密码的情况下对用户进行身份验证。
流程
-
在浏览器中,导航到 IdM Web UI,例如
https://server.idm.example.com/ipa/ui。 单击 Login Using Certificate。
IdM Web UI 中的 Login Using Certificate 按钮
应该已经选择了用户的证书。取消选中 Remember this decision,然后单击 OK。
现在,您被验证为与证书对应的用户。
16.6. 配置 IdM 客户端以使用证书启用对 CLI 的身份验证 复制链接链接已复制到粘贴板!
要使 IdM 用户在 IdM 客户端的命令行界面(CLI)中为 IdM 用户提供证书身份验证,请将 IdM 用户的证书和私钥导入到 IdM 客户端。有关创建并传输用户证书的详情,请参阅 请求新的用户证书并将其导出到客户端。
流程
登录 IdM 客户端,并让包含用户证书和私钥的 .p12 文件准备好。要获取并缓存 Kerberos ticket 授予 ticket(TGT),请使用带用户主体的
-X选项和X509_username:/path/to/file.p12属性的kinit命令,指定在哪里查找用户的 X509 身份信息。例如,要获取idm_user的 TGT,使用保存在~/idm_user.p12文件中的用户身份信息:$ kinit -X X509_idm_user='PKCS12:~/idm_user.p12' idm_user注意该命令还支持 .pem 文件格式: kinit -X X509_username='FILE:/path/to/cert.pem,/path/to/key' user_principal
第 17 章 使用 IdM CA 续订服务器 复制链接链接已复制到粘贴板!
单一身份管理(IdM) CA 续订服务器管理 IdM 中共享系统证书的生命周期。此指定节点续订关键凭证并将其复制到其他 CA 服务器,确保一致性并防止拓扑出现身份验证失败。
17.1. IdM CA 续订服务器解释 复制链接链接已复制到粘贴板!
在使用嵌入式证书颁发机构(CA)的身份管理(IdM)部署中,CA 续订服务器维护并更新 IdM 系统证书。它确保了强大的 IdM 部署。
IdM 系统证书包括:
-
IdM CA证书 -
OCSP签名证书 -
IdM CA 子系统证书 -
IdM CA 审计签名证书 -
IdM 续订代理(RA)证书 -
KRA传输和存储证书
对系统证书进行定性的特征是,它们的密钥由所有 CA 副本共享。相比之下,IdM 服务证书(如 LDAP、HTTP 和 PKINIT 证书)在不同的 IdM CA 服务器上具有不同的密钥对和主题名称。
在 IdM 拓扑中,默认情况下,第一个 IdM CA 服务器是 CA 续订服务器。
在上游文档中,IdM CA 称为 Dogtag。
- CA 续订服务器的角色
IdM CA、IdM CA 子系统和IdM RA证书对 IdM 部署至关重要。每个证书都存储在/etc/pki/pki-tomcat/目录中的 NSS 数据库以及 LDAP 数据库条目中。存储在 LDAP 中的证书必须与存储在 NSS 数据库中的证书匹配。如果不匹配,在 IdM 框架和 IdM CA 之间以及 IdM CA 和 LDAP 之间会发生身份验证失败。所有 IdM CA 副本都有针对每个系统证书的跟踪请求。如果带有集成 CA 的 IdM 部署不包含 CA 续订服务器,则每个 IdM CA 服务器都会单独请求续订系统证书。这会导致发生各种系统证书和身份验证失败的不同 CA 副本。
将一个 CA 副本用作续订服务器,可以在需要时完全续订一次系统证书,从而避免身份验证失败。
- CA 副本上的
certmonger 服务的角色 -
在所有 IdM CA 副本上运行的
certmonger 服务使用dogtag-ipa-ca-renew-agent续订帮助程序来跟踪 IdM 系统证书。续订帮助程序读取 CA 续订服务器配置。在不是 CA 续订服务器的每个 CA 副本上,续订帮助程序从ca_renewalLDAP 条目检索最新的系统证书。由于正好发生证书续订尝试时,dogtag-ipa-ca-renew-agent帮助程序有时会在 CA 续订服务器实际续订证书前尝试更新系统证书。如果发生这种情况,旧的、即将扩展的证书将返回到 CA 副本上的certmonger 服务。在意识到它的证书服务已存储在其数据库中,证书服务会一直尝试在单独尝试之间延迟更新证书,直到它可以从 CA 续订服务器检索更新的证书。 - IdM CA 续订服务器正常功能
带有嵌入式 CA 的 IdM 部署是一个 IdM 部署,安装有 IdM CA - 或者稍后安装了 IdM CA 服务器。带有嵌入式 CA 的 IdM 部署必须始终有一个 CA 副本配置为续订服务器。续订服务器必须在线且功能完整,并且必须与其他服务器正确复制。
如果正在使用
ipa server-del、ipa-replica-manage del、ipa-csreplica-manage del或ipa-server-install --uninstall命令删除当前的 CA 续订服务器,则另一个 CA 副本会自动被分配为 CA 续订服务器。此策略确保续订服务器配置保持有效。该政策不包括以下情况:
17.2. 更改并重置 IdM CA 续订服务器 复制链接链接已复制到粘贴板!
在停用当前服务器或配置无效时更改或重置身份管理(IdM) CA 续订服务器,以便证书续订可以继续正常工作。
当证书颁发机构(CA)续订服务器停用时,身份管理(IdM)会自动从 IdM CA 服务器列表中选择一个新的 CA 续订服务器。系统管理员无法影响选择。
为了能够选择新的 IdM CA 续订服务器,系统管理员必须手动执行替换操作。在开始停用当前续订服务器的过程之前,选择新的 CA 续订服务器。
如果当前的 CA 续订服务器配置无效,请重置 IdM CA 续订服务器。
先决条件
您有 IdM 管理员凭证:
$ kinit adminPassword for admin@IDM.EXAMPLE.COM:
流程
可选:要找出部署中哪些 IdM 服务器有资格成为新的 CA 续订服务器的必需的 CA 角色:
$ ipa server-role-find --role 'CA server'---------------------- 2 server roles matched ---------------------- Server name: server.idm.example.com Role name: CA server Role status: enabled Server name: replica.idm.example.com Role name: CA server Role status: enabled ---------------------------- Number of entries returned 2 ----------------------------部署中有两个 CA 服务器。
可选:要找出哪个 CA 服务器是当前的 CA 续订服务器,请输入:
$ ipa config-show | grep 'CA renewal'IPA CA renewal master: server.idm.example.com当前续订服务器为
server.idm.example.com。要更改续订服务器配置,请使用
ipa config-mod实用程序和--ca-renewal-master-server选项:$ ipa config-mod --ca-renewal-master-server replica.idm.example.com | grep 'CA renewal'IPA CA renewal master: replica.idm.example.com重要您还可以使用以下命令切换到新的 CA 续订服务器:
-
ipa-cacert-manage --renew命令。此命令会续订 CA 证书 ,并使 您在其上执行新 CA 续订服务器的 CA 服务器。 -
ipa-cert-fix命令。当证书过期时,该命令会恢复部署。它还使您在其上执行该命令的 CA 服务器成为新的 CA 续订服务器。
-
第 18 章 管理外部签名的 CA 证书 复制链接链接已复制到粘贴板!
身份管理(IdM)提供不同类型的证书颁发机构(CA)配置。您可以选择安装带有集成 CA 或外部 CA 的 IdM。您必须指定在安装过程中使用的 CA 类型。但是,安装后,您可以从外部签名的 CA 移到自签名 CA,反之亦然。另外,当自动续订自签名 CA 时,您必须确保续订外部签名的 CA 证书。请参考管理外部签名的 CA 证书所需的相关部分。
安装带有外部签名 CA 的 IdM:
- 从外部签名的 CA 切换到自签名 CA。
- 从自签名 CA 切换到外部签名的 CA。
- 续订外部签名的 CA 证书。
- 更新 IdM 中的外部 CA 公共证书。
18.1. 在 IdM 中从外部签名的 CA 切换到自签名 CA 复制链接链接已复制到粘贴板!
您可以从外部签名切换到身份管理(IdM)证书颁发机构(CA)的自签名证书。使用自签名 CA 时,自动管理 CA 证书的续订:系统管理员不需要向外部机构提交证书签名请求(CSR)。
从外部签名切换到自签名 CA 只替换 CA 证书。之前 CA 签名的证书仍有效且仍在使用。例如,即使您移至自签名 CA 后,LDAP 证书的证书链也会保持不变:
external_CA certificate > IdM CA certificate > LDAP certificate
先决条件
-
您有访问 IdM CA 续订服务器和所有 IdM 客户端及服务器的
root权限。
流程
在 IdM CA 续订服务器上,将 CA 证书更新为自签名:
# ipa-cacert-manage renew --self-signedRenewing CA certificate, please wait CA certificate successfully renewed The ipa-cacert-manage command was successful以
root身份SSH到所有剩余的 IdM 服务器和客户端。例如:# ssh root@idmclient01.idm.example.com在 IdM 客户端上,使用来自服务器的证书更新本地 IdM 证书数据库:
[idmclient01 ~]# ipa-certupdateSystemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successful
验证
要检查您的更新是否成功,并且新的 CA 证书是否已添加到
/etc/ipa/ca.crt文件中:[idmclient01 ~]$ openssl crl2pkcs7 -nocrl -certfile /etc/ipa/ca.crt | openssl pkcs7 -print_certs -text -noout[...] Certificate: Data: Version: 3 (0x2) Serial Number: 39 (0x27) Signature Algorithm: sha256WithRSAEncryption Issuer: O=IDM.EXAMPLE.COM, CN=Certificate Authority Validity Not Before: Jul 1 16:32:45 2019 GMT Not After : Jul 1 16:32:45 2039 GMT Subject: O=IDM.EXAMPLE.COM, CN=Certificate Authority [...]输出显示更新已成功,因为新 CA 证书使用旧的 CA 证书列出。
18.2. 在 IdM 中从自签名 CA 切换到外部签名的 CA 复制链接链接已复制到粘贴板!
在 IdM 中,您可以从自签名 CA 切换到外部签名的 CA。在 IdM 中切换到外部签名的 CA 后,您的 IdM CA 服务器变为外部 CA 的子 CA。另外,不会自动管理 CA 证书的续订,系统管理员必须向外部颁发机构提交证书签名请求(CSR)。
流程
- 要切换到外部签名的 CA,CSR 必须由外部 CA 签名。按照 使用外部 CA 续订 IdM CA 续订服务器证书 中的步骤切换到 IdM 中的自签名 CA。
18.3. 使用外部 CA 续订 IdM CA 续订服务器证书 复制链接链接已复制到粘贴板!
使用外部 CA 续订身份管理(IdM)证书颁发机构(CA)证书,为证书签名请求(CSR)签名。在这个配置中,您的 IdM CA 服务器是外部 CA 的 subCA。外部 CA 可以(但不必)是 Active Directory 证书服务器(AD CS)。
如果外部证书颁发机构是 AD CS,您可以在 CSR 中为 IdM CA 证书指定您想要的模板。证书模板定义收到证书请求时使用的策略和规则。AD 中的证书模板与 IdM 中的证书配置集对应。
您可以通过其对象标识符(OID)定义特定的 AD CS 模板。OID 是不同发布机构发布的唯一数字值,用于唯一标识分布式应用中的数据元素、语法和其他部分。
另外,您还可以根据名称来定义特定的 AD CS 模板。例如,IdM CA 向 AD CS 提交的 CSR 中使用的默认配置集的名称是 subCA。
要通过在 CSR 中指定 OID 或名称来定义配置集,请使用 external-ca-profile 选项。详情请查看您系统上的 ipa-cacert-manage 手册页。
除了使用现成的证书模板外,您还可以在 AD CS 中创建自定义证书模板,并在 CSR 中使用它。
完成此流程以使用外部签名续订 IdM CA 的证书,无论当前的 CA 证书是自签名还是外部签名。
先决条件
- 您具有对 IdM CA 续订服务器的 root 访问权限。
流程
创建要提交到外部 CA 的 CSR:
如果外部 CA 是 AD CS,请使用
--external-ca-type=ms-cs选项。如果要使用与默认subCA模板不同的模板,请使用--external-ca-profile选项指定它:# ipa-cacert-manage renew --external-ca --external-ca-type=ms-cs [--external-ca-profile=PROFILE]Exporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successful如果外部 CA 不是 AD CS:
# ipa-cacert-manage renew --external-caExporting CA certificate signing request, please wait The next step is to get /var/lib/ipa/ca.csr signed by your CA and re-run ipa-cacert-manage as: ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate The ipa-cacert-manage command was successful输出显示已创建了 CSR,并存储在
/var/lib/ipa/ca.csr文件中。
-
将位于
/var/lib/ipa/ca.csr 中的 CSR提交到外部 CA。这个过程根据要用作外部 CA 的服务的不同而有所不同。 检索发布的证书和 CA 证书链,用于在基本的 64 编码 Blob 中发布 CA,即:
- 如果外部 CA 不是 AD CS,则为 PEM 文件。
如果外部 CA 是 AD CS,则为 Base_64 证书。
每个证书服务的进程都有所不同。通常,网页或通知电子邮件中的下载链接允许管理员下载所有需要的证书。
如果外部 CA 是 AD CS,且您已通过 Microsoft Windows 认证授权机构管理窗口使用已知模板提交 CSR,AD CS 会立即发出证书,且 Save Certificate 对话框会出现在 AD CS Web 界面中,询问如何保存颁发的证书。
再次运行
ipa-cacert-manage renewal 命令,添加提供完整证书链所需的所有 CA 证书文件。多次使用--external-cert-file选项,根据需要指定任意文件:# ipa-cacert-manage renew --external-cert-file=/path/to/signed_certificate --external-cert-file=/path/to/external_ca_certificate_1 --external-cert-file=/path/to/external_ca_certificate_2在所有 IdM 服务器和客户端中,使用来自服务器的证书更新本地 IdM 证书数据库:
[client ~]$ ipa-certupdateSystemwide CA database updated. Systemwide CA database updated. The ipa-certupdate command was successful
验证
要检查您的更新是否成功,并且新的 CA 证书是否已添加到
/etc/ipa/ca.crt文件中:[client ~]$ openssl crl2pkcs7 -nocrl -certfile /etc/ipa/ca.crt | openssl pkcs7 -print_certs -text -noout[...] Certificate: Data: Version: 3 (0x2) Serial Number: 39 (0x27) Signature Algorithm: sha256WithRSAEncryption Issuer: O=IDM.EXAMPLE.COM, CN=Certificate Authority Validity Not Before: Jul 1 16:32:45 2019 GMT Not After : Jul 1 16:32:45 2039 GMT Subject: O=IDM.EXAMPLE.COM, CN=Certificate Authority [...]输出显示更新已成功,因为新 CA 证书使用旧的 CA 证书列出。
18.4. 更新 IdM 中的外部 CA 公共证书 复制链接链接已复制到粘贴板!
更新外部 CA 公共证书可确保 IdM 拓扑识别续订的根授权。在所有服务器和客户端中分发新的证书链,维护信任并防止整个环境进行身份验证失败。
在此配置中,您的 IdM CA 续订服务器是外部 CA 的子 CA。当外部 CA 续订时,例如,如果它达到其过期日期,您必须在 IdM 拓扑中更新其证书。
先决条件
- 在具有多个服务器和客户端的测试环境中运行,以确保操作和时间顺序正确。
-
确保您有新更新的外部 CA 公共证书,并在单独的
.crt文件中组成其链的所有证书。
流程
安装新的外部 CA 证书以及外部 CA 的完整 CA 证书链作为 IdM 的额外 CA 证书。系统接受 PEM、DER、PKCS""7、PKCS""8、原始私钥和 PKCSPOST 格式的证书文件。
在拓扑中的一个 IdM 服务器上,将更新的外部 CA 证书和证书链从
.crt文件添加到 IdM:# ipa-cacert-manage install /path/to/ca.crtCA 证书被安装到 LDAP 存储,
cn=certificates,cn=ipa,cn=etc,dc=realm,dc=name中。将其余证书链作为额外的 CA 证书安装到 IdM 中。因为
ipa-cacert-manage install命令只读取文件中的第一个证书,所以您必须一次安装一个证书的完整 CA 链。例如,如果链包含两个证书,请将每个证书保存在单独的文件中,并为每个文件单独运行ipa-cacert-manage install:# ipa-cacert-manage install /path/to/intermediate-ca.crt# ipa-cacert-manage install /path/to/root-ca.crt
运行
ipa-certupdate来更新拓扑中的所有其他 IdM 服务器,以使用 LDAP 同步本地 NSS 数据库和/etc/ipa/ca.crt:# ipa-certupdate更新 IdM 服务器后,更新所有 IdM 客户端上的外部 CA 证书。
# ipa-certupdate从 IdM LDAP 存储检索所有数据,并将其置于
/etc/ipa/ca.crt的主证书链中。
验证
要检查您的更新是否成功,并将新的外部 CA 证书添加到
/etc/ipa/ca.crt文件中:[client ~]$ openssl crl2pkcs7 -nocrl -certfile /etc/ipa/ca.crt | openssl pkcs7 -print_certs -text -noout[...] Certificate: Data: Version: 3 (0x2) Serial Number: 39 (0x27) Signature Algorithm: sha256WithRSAEncryption Issuer: O=IDM.EXAMPLE.COM, CN=Certificate Authority Validity Not Before: Jul 1 16:32:45 2019 GMT Not After : Jul 1 16:32:45 2039 GMT Subject: O=IDM.EXAMPLE.COM, CN=Certificate Authority [...]输出显示更新已成功,因为新 CA 证书使用旧的 CA 证书列出。
第 19 章 IdM 离线时续订过期的系统证书 复制链接链接已复制到粘贴板!
过期的系统证书阻止身份管理(IdM)服务启动。管理员使用 ipa-cert-fix 工具在系统离线时更新这些凭证,确保 LDAP 服务在启动修复前处于活跃状态。
19.1. 先决条件 复制链接链接已复制到粘贴板!
-
通过在主机上输入
ipactl start --ignore-service-failures命令来确保 LDAP 服务正在运行。
19.2. 在 CA 续订服务器上续订过期的系统证书 复制链接链接已复制到粘贴板!
ipa-cert-fix 工具分析并更新过期的证书可防止系统启动。在继续之前,创建完整系统备份,因为此工具会无关地修改 LDAP 数据库和 NSS 数据库。
如果您在不是 CA 续订服务器的 CA(证书授权机构)主机上运行 ipa-cert-fix 工具,并且 实用程序续订共享证书,则该主机会自动成为域中的新 CA 续订服务器。域中必须始终只有一个 CA 续订服务器,以避免不一致。
先决条件
您必须以管理员身份登录到服务器。.Procedure
-
可选:备份系统。这强烈推荐,因为
ipa-cert-fix对nssdb进行了不可逆更改。因为ipa-cert-fix也对 LDAP 进行了更改,因此也建议备份整个集群。 启动
ipa-cert-fix工具,以分析系统并列出需要续订的过期证书:# ipa-cert-fix... The following certificates will be renewed: Dogtag sslserver certificate: Subject: CN=ca1.example.com,O=EXAMPLE.COM 201905222205 Serial: 13 Expires: 2019-05-12 05:55:47 ... Enter "yes" to proceed:输入
yes以开始续订过程:Enter "yes" to proceed: trueProceeding. Renewed Dogtag sslserver certificate: Subject: CN=ca1.example.com,O=EXAMPLE.COM 201905222205 Serial: 268369925 Expires: 2021-08-14 02:19:33 ... Becoming renewal master. The ipa-cert-fix command was successfulipa-cert-fix更新所有过期证书前最多可能需要一分钟的时间。
-
可选:备份系统。这强烈推荐,因为
验证
验证所有服务现在是否都在运行:
# ipactl statusDirectory Service: RUNNING krb5kdc Service: RUNNING kadmin Service: RUNNING httpd Service: RUNNING ipa-custodia Service: RUNNING pki-tomcatd Service: RUNNING ipa-otpd Service: RUNNING ipa: INFO: The ipactl command was successful
此时,证书已被续订,服务正在运行。下一步是检查 IdM 域中的其他服务器。
后续步骤
如果您需要修复跨多个 CA 服务器的证书:
-
确保 LDAP 复制在拓扑中正常工作后,根据上述流程,首先在一台 CA 服务器上运行
ipa-cert-fix。 -
在另一台 CA 服务器上运行
ipa-cert-fix之前,请通过getcert-resubmit(在另一台 CA 服务器上)触发共享证书的 Certmonger 续订,以避免不必要的共享证书的续订。
19.3. 续订后验证 IdM 域中的其他 IdM 服务器 复制链接链接已复制到粘贴板!
恢复续订服务器后,强制重新启动所有其他域副本。验证 certmonger 是否已成功检索新证书。如果特定副本无法访问,请在这些主机上本地执行 ipa-cert-fix。
先决条件
- 您必须以管理员身份登录到服务器。
流程
使用
--force参数重启 IdM:# ipactl restart --force使用
--force参数时,ipactl实用程序会忽略单个服务启动失败。例如,如果服务器也是证书过期的 CA,pki-tomcat服务将无法启动。这是预期并忽略的,因为使用了--force参数。重启后,验证
certmonger 服务是否已更新证书(certificate 状态显示 MONITORING):# getcert list | egrep '^Request|status:|subject:'# ipactl restart --forceRequest ID '20190522120745': status: MONITORING subject: CN=IPA RA,O=EXAMPLE.COM 201905222205 Request ID '20190522120834': status: MONITORING subject: CN=Certificate Authority,O=EXAMPLE.COM 201905222205 ...在
certmonger续订副本上的共享证书之前,可能需要一些时间,。如果服务器也是 CA,以上命令会报告
pki-tomcat服务使用的证书的CA_UNREACHABLE:Request ID '20190522120835': status: CA_UNREACHABLE subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205 ...要续订此证书,请使用
ipa-cert-fix工具:# ipa-cert-fix# ipactl restart --forceDogtag sslserver certificate: Subject: CN=ca2.example.com,O=EXAMPLE.COM Serial: 3 Expires: 2019-05-11 12:07:11 Enter "yes" to proceed: true Proceeding. Renewed Dogtag sslserver certificate: Subject: CN=ca2.example.com,O=EXAMPLE.COM 201905222205 Serial: 15 Expires: 2019-08-14 04:25:05 The ipa-cert-fix command was successful
第 20 章 如果 web 服务器和 LDAP 服务器证书还没有在 IdM 副本上过期,请替换它们 复制链接链接已复制到粘贴板!
作为身份管理(IdM)系统管理员,您可以手动替换由运行在 IdM 服务器上的 Web (或 httpd)和 LDAP (或目录 )服务使用的证书。如果证书接近过期,并且 certmonger 工具没有配置为自动续订,或者证书由外部证书颁发机构(CA)签名,这可能是必需的。
这个示例描述了如何为在 server.idm.example.com IdM 服务器中运行的服务安装证书。您从外部 CA 获取证书。
httpd 和 LDAP 服务证书在不同的 IdM 服务器上有不同的密钥对和主题名称,因此您必须单独在每个 IdM 服务器上更新证书。
先决条件
-
在 IdM 服务器具有复制协议的拓扑中的至少一个其他的 IdM 副本上,Web 和 LDAP 证书仍有效。这是
ipa-server-certinstall命令的先决条件,它要求TLS连接与其他 IdM 副本通信。如果证书无效,则无法建立连接,命令会失败。在这种情况下,请参阅 如果已在整个 IdM 部署中过期,替换 web 服务器和 LDAP 服务器证书。 -
您有到 IdM 服务器的
root访问权限。 -
您知道
目录管理器密码。 -
如果新的
httpd/LDAP 证书将由与旧 CA 不同的外部 CA 签名,您可以访问存储外部 CA 证书链的文件。
流程
如果新的
httpd/LDAP 证书将由与旧 CA 不同的 CA 签名,请安装新的外部 CA 证书,以及外部 CA 的整个 CA 证书链作为 IdM 的额外 CA 证书。存储证书的文件在 PEM 和 DER 证书、PKCS""7 证书链、PKCS""8 和原始私钥和 PKCSThycotic 格式中接受。安装 CA 证书:
# ipa-cacert-manage install /path/to/ca.crt重要如果新的外部 CA 证书的主题与旧 CA 证书相同,但有所不同,因为它使用不同的密钥,则只能在满足以下条件时使用它:
- 这两个证书具有相同的信任标记。
- CA 共享相同的 nickname。
-
证书中列出的 X509 扩展包括授权密钥
标识符(AKI)扩展。
将其余证书链作为额外的 CA 证书安装到 IdM 中。因为
ipa-cacert-manage install命令只读取文件中的第一个证书,所以您必须一次安装一个证书的完整 CA 链。例如,如果链包含两个证书,请将每个证书保存在单独的文件中,并为每个文件单独运行ipa-cacert-manage install:# ipa-cacert-manage install /path/to/intermediate-ca.crt# ipa-cacert-manage install /path/to/root-ca.crt使用证书链中的证书更新本地 IdM 证书数据库:
# ipa-certupdate
使用
OpenSSL工具生成私钥和证书签名请求(CSR):$ openssl req -new -newkey rsa:4096 -days 365 -nodes -keyout new.key -out new.csr -addext "subjectAltName = DNS:server.idm.example.com" -subj '/CN=server.idm.example.com,O=IDM.EXAMPLE.COM'将 CSR 提交给外部 CA。这个过程根据要用作外部 CA 的服务的不同而有所不同。在 CA 为证书签名后,将证书导入到 IdM 服务器。
在 IdM 服务器上,将 Apache Web 服务器的旧私钥和证书替换为新密钥和新签名的证书:
# ipa-server-certinstall -w --pin=password new.key new.crt在以上命令中:
-
-w选项指定您要将证书安装到 Web 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 将 LDAP 服务器的旧私钥和证书替换为新密钥和新签名的证书:
# ipa-server-certinstall -d --pin=password new.key new.cert在以上命令中:
-
-d选项指定您要将证书安装到 LDAP 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 重启
httpd服务:# systemctl restart httpd.service重启
Directory服务:# systemctl restart dirsrv@IDM.EXAMPLE.COM.service如果在服务器上删除或替换了子 CA,请更新客户端:
# ipa-certupdate
第 21 章 如果 web 服务器和 LDAP 服务器证书已在整个 IdM 部署中过期,请替换它们 复制链接链接已复制到粘贴板!
管理员必须手动替换过期的 HTTP 和 LDAP 证书才能恢复系统功能。这个恢复过程涉及生成新的签名请求,获取外部签名,并在拓扑中的每个副本上安装更新的凭证。
在没有集成证书颁发机构(CA)的 IdM 部署中,certmonger 服务默认不会跟踪 IdM 服务证书或提供过期警告。如果 IdM 系统管理员没有手动配置证书跟踪或设置通知,证书可能会在没有通知的情况下过期。
按照以下步骤,手动将 server.idm.example.com IdM 服务器上运行的 httpd 和 LDAP 服务过期的证书替换为有效的证书链。
httpd 和 LDAP 服务证书在不同的 IdM 服务器上有不同的密钥对和主题名称。因此,您必须单独更新每个 IdM 服务器上的证书。
先决条件
-
httpd和 LDAP 证书已在 拓扑中的所有 IdM 副本上过期。如果没有过期,请参阅 如果还没有在 IdM 副本 上过期,替换 web 服务器和 LDAP 服务器证书。 -
您有访问 IdM 服务器和副本的
root权限。 -
您知道
目录管理器密码。 您已创建了以下目录和文件的备份:
-
/etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -
/etc/httpd/alias -
/var/lib/certmonger -
/var/lib/ipa/certs/
-
-
如果新的
httpd/LDAP 证书将由与旧 CA 不同的外部 CA 签名,或者如果已安装的 CA 证书不再有效,则您可以访问存储外部 CA 证书链的文件。
流程
-
可选:执行
/var/lib/ipa/private和/var/lib/ipa/passwds的备份。 如果您没有使用相同的证书颁发机构(CA)为新证书签名,或者如果已安装的 CA 证书不再有效,请使用包含外部 CA 证书链的文件更新本地数据库中有关外部 CA 的信息。这些文件接受 PEM 和 DER 证书、PKCS#7 证书链、PKCS""8 和原始私钥,以及 PKCSedServiceSet 格式。
安装 CA 证书:
# ipa-cacert-manage install /path/to/ca.crt重要如果新的外部 CA 证书的主题与旧 CA 证书相同,但有所不同,因为它使用不同的密钥,则只能在满足以下条件时使用它:
- 这两个证书具有相同的信任标记。
- CA 共享相同的 nickname。
-
证书中列出的 X509 扩展包括授权密钥
标识符(AKI)扩展。
将其余证书链作为额外的 CA 证书安装到 IdM 中。因为
ipa-cacert-manage install命令只读取文件中的第一个证书,所以您必须一次安装一个证书的完整 CA 链。例如,如果链包含两个证书,请将每个证书保存在单独的文件中,并为每个文件单独运行ipa-cacert-manage install:# ipa-cacert-manage install /path/to/intermediate-ca.crt# ipa-cacert-manage install /path/to/root-ca.crt使用证书链中的证书更新本地 IdM 证书数据库:
# ipa-certupdate
请求
httpd和 LDAP 的证书:使用
OpenSSL工具,为在 IdM 实例上运行的 Apache Web 服务器创建到第三方 CA 的证书签名请求(CSR)。创建新私钥是可选的。如果您仍然有原始私钥,您可以将
-in选项与openssl req命令一起使用,以指定要从中读取请求的输入文件名:$ openssl req -new -nodes -in /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:_server.idm.example.com_, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'如果要创建一个新密钥:
$ openssl req -new -newkey rsa:2048 -nodes -keyout /var/lib/ipa/private/httpd.key -out /tmp/http.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:HTTP/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'
使用
OpenSSL工具,为在 IdM 实例上运行的 LDAP 服务器创建一个到第三方证书的签名请求(CSR):$ openssl req -new -newkey rsa:2048 -nodes -keyout ~/ldap.key -out /tmp/ldap.csr -addext 'subjectAltName = DNS:server.idm.example.com, otherName:1.3.6.1.4.1.311.20.2.3;UTF8:ldap/server.idm.example.com@IDM.EXAMPLE.COM' -subj '/O=IDM.EXAMPLE.COM/CN=server.idm.example.com'-
将 CSR、/tmp/http.csr 和 tmp/ldap.csr 提交给外部 CA,并获取
httpd的证书和 LDAP 的证书。这个过程根据要用作外部 CA 的服务的不同而有所不同。
安装
httpd的证书:# cp /path/to/httpd.crt /var/lib/ipa/certs/将 LDAP 证书安装到 NSS 数据库中:
可选:列出可用的证书:
# certutil -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -LCertificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Server-Cert u,u,u默认证书别名是 Server-Cert,但可能应用了不同的名称。
使用上一步中的证书别名,从 NSS 数据库(
NSSDB)中删除旧的无效的证书:# certutil -D -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -n 'Server-Cert' -f /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt创建一个 PKCS12 文件,以简化导入到
NSSDB的过程:# openssl pkcs12 -export -in ldap.crt -inkey ldap.key -out ldap.p12 -name Server-Cert将创建的 PKCS#12 文件安装到
NSSDB中:# pk12util -i ldap.p12 -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ -k /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt检查新证书是否已成功导入:
# certutil -L -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM/
重启
httpd服务:# systemctl restart httpd.service重启
Directory服务:# systemctl restart dirsrv@IDM-EXAMPLE-COM.service-
在所有 IdM 副本上执行之前所有的步骤。这是在副本之间建立
TLS连接的先决条件。 将新证书注册到 LDAP 存储:
将 Apache Web 服务器的旧私钥和证书替换为新密钥和新签名的证书:
# ipa-server-certinstall -w --pin=password /var/lib/ipa/private/httpd.key /var/lib/ipa/certs/httpd.crt在以上命令中:
-
-w选项指定您要将证书安装到 Web 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 将 LDAP 服务器的旧私钥和证书替换为新密钥和新签名的证书:
# ipa-server-certinstall -d --pin=password /etc/dirsrv/slapd-IDM-EXAMPLE-COM/ldap.key /path/to/ldap.crt在以上命令中:
-
-d选项指定您要将证书安装到 LDAP 服务器中。 -
pin选项指定保护私钥的密码。
-
-
出现提示时,输入
目录管理器密码。 重启
httpd服务:# systemctl restart httpd.service重启
Directory服务:# systemctl restart dirsrv@IDM-EXAMPLE-COM.service
- 在所有其他受影响的副本上执行上一步中的命令。
第 22 章 从过期的系统证书中恢复 复制链接链接已复制到粘贴板!
如果身份管理(IdM)证书过期了,核心服务(如 Web UI、LDAP 和证书颁发)失败。ipa-certupdate 和 ipa-cacert-manage 等命令无法正常工作,因为系统无法建立安全连接。以下章节提供了几个关键故障场景的流程。
在进行任何更改之前,请创建 IdM 服务器的完整备份。至少,在每台服务器上创建一个关键数据的文件级备份:
# tar czvf /root/pki-backup_$(hostname -f)_$(date +%F).tar.gz /etc/dirsrv/slapd-* /etc/pki/pki-tomcat/ /var/lib/ipa/ /var/kerberos/krb5kdc/
在没有可靠备份的情况下不要继续。
使用 ipa-cert-fix 命令要非常小心。ipa-cert-fix 是一个功能强大但具有侵入性的工具,专为特定的故障场景设计:续订服务器上过期的服务证书。
-
如果 CA 证书本身已过期,请不要运行
ipa-cert-fix。 -
不要在副本服务器上运行
ipa-cert-fix,除非续订服务器处于不可恢复状态。在这种情况下,创建一个支持问题单。 -
不要将
ipa-cert-fix作为常规故障排除工具运行。
滥用此工具可能会使情况更糟。
22.1. 从副本上过期的服务证书中恢复 复制链接链接已复制到粘贴板!
在这种故障场景下,续订服务器是健康的,但一个或多个副本无法续订其证书,并且现在处于离线状态。目标是从服务器手动同步或重新发布必要的证书,以恢复副本。
此流程涵盖四个关键证书:RA Agent 证书、Subsystem 证书、Directory Server (LDAP) 证书和 PKI Tomcat (Web Server) 证书。
如果您不确定哪个服务器是续订服务器,请在任何一个 IdM 服务器上运行以下命令。命令输出是 CA 续订服务器的可分辨名称(DN):
# ldapsearch -Y GSSAPI -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
如果 Kerberos 不可用,请使用以下命令和目录管理器密码:
# ldapsearch -x -D 'cn=Directory Manager' -W -b cn=masters,cn=ipa,cn=etc,dc=example,dc=com ipaConfigString=caRenewalMaster dn
流程
验证 IdM 服务是否正在运行:
# ipactl status可选。如果任何服务都没有运行,请强制它们启动:
# ipactl start -f-f或--force标志绕过一些启动检查,这在服务因为过期的证书而无法进行通信时是必需的。比较续订服务器和故障副本之间的 RA Agent 和 Subsystem 证书。
在健康的续订服务器和故障副本上,检索 RA Agent 和 subsystem 证书的序列号,并验证它们是否一样。
RA Agent 证书及其相应的 LDAP 条目。序列号是分号分隔的
description属性字符串中的第二个值,例如2;SERIAL;…:# openssl x509 -in /var/lib/ipa/ra-agent.pem -noout -serial# ldapsearch -D "cn=directory manager" -W -b "uid=ipara,ou=people,o=ipaca" descriptionSubsystem 证书及其相应的 LDAP 条目。序列号是分号分隔的
description属性字符串中的第二个值,例如2;SERIAL;…:# certutil -L -d /etc/pki/pki-tomcat/alias/ -n 'subsystemCert cert-pki-ca' | grep "Serial Number"# ldapsearch -D "cn=directory manager" -W -b "uid=pkidbuser,ou=People,o=ipaca" description如果副本上的序列号与 CA 续订服务器上的序列号不匹配,请执行下一步来同步它们。
将健康的证书手动复制到副本。将
ra-agent.pem和 subsystem 证书从续订服务器复制到故障副本。复制 RA agent 证书文件:
# scp /var/lib/ipa/ra-agent.pem root@failed-replica.idm.example.com:/tmp/导出 subsystem 证书:
# certutil -L -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -a > /tmp/subsystem.pem复制 subsystem 证书:
# scp /tmp/subsystem.pem root@failed-replica.idm.example.com:/tmp/
在故障副本上,替换过期的 RA agent 证书。
将健康的证书复制到合适的地方:
# cp /tmp/ra-agent.pem /var/lib/ipa/ra-agent.pem更新 LDAP 中相应的条目,以确保它包含正确的证书 blob 和序列号。此步骤需要目录管理器密码。
通过将新的 RA agent 证书转换为单行 blob ,来为 LDAP 准备新的 RA agent 证书,并将其存储在变量中:
# RA_CERT_BLOB=$(sed -rn '/^-----BEGIN CERTIFICATE-----$/{:1;n;/^-----END CERTIFICATE-----$/b2;H;b1};:2;${x;s/\s//g;p}' /tmp/ra-agent.pem)从新证书中提取序列号,并将其存储在变量中:
# RA_CERT_SERIAL=$(openssl x509 -in /tmp/ra-agent.pem -noout -serial | cut -d'=' -f2)确保 IdM 服务在尝试修改 LDAP 数据库之前正在运行:
# ipactl start -f使用新证书 blob 和序列号更新 RA agent 的 LDAP 条目。系统将提示您输入目录管理器密码:
# ldapmodify -D "cn=Directory Manager" -W -x <<EOFdn: uid=ipara,ou=people,o=ipaca changetype: modify add: userCertificate userCertificate:: ${RA_CERT_BLOB} replace: description description: 2;${RA_CERT_SERIAL};CN=Certificate Authority,O=IDM.EXAMPLE.COM;CN=IPA RA,O=IDM.EXAMPLE.COM EOF将
IDM.EXAMPLE.COM替换为您的 IdM 域,或使用您的自定义证书主题库。
在故障副本上,替换过期的 subsystem 证书。
将健康的证书导入到 NSS 数据库中。这需要 NSS 数据库密码,该密码可在
/etc/pki/pki-tomcat/password.conf中找到。为 NSS 数据库密码文件的位置设置一个变量,以便在以下命令中更轻松地使用:
# PWDFILE=/etc/pki/pki-tomcat/alias/pwdfile.txt从 NSS 数据库中删除旧、过期的 subsystem 证书:
# certutil -D -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -f $PWDFILE将
/tmp/subsystem.pem文件中的新的、健康的 subsystem 证书添加到 NSS 数据库中:# certutil -A -d /etc/pki/pki-tomcat/alias -n 'subsystemCert cert-pki-ca' -t ",," -i /tmp/subsystem.pem -f $PWDFILE
更新 LDAP 中相应的条目,类似于 RA agent 步骤:
# SUBSYS_CERT_BLOB=$(cat /tmp/subsystem.pem | sed -rn '/^-----BEGIN CERTIFICATE-----$/{:1;n;/^-----END CERTIFICATE-----$/b2;H;b1};:2;${x;s/\s//g;p}')# SUBSYS_CERT_SERIAL=$(openssl x509 -in /tmp/subsystem.pem -noout -serial | cut -d'=' -f2)# ldapmodify -D "cn=Directory Manager" -W -x <<EOFdn: uid=pkidbuser,ou=people,o=ipaca changetype: modify add: userCertificate userCertificate:: ${SUBSYS_CERT_BLOB} replace: description description: 2;${SUBSYS_CERT_SERIAL};CN=Certificate Authority,O=IDM.EXAMPLE.COM;CN=CA Subsystem,O=IDM.EXAMPLE.COM EOF将
IDM.EXAMPLE.COM替换为您的 IdM 域,或使用您的自定义证书主题库。
为副本的 LDAP 服务手动发布临时证书。
在故障副本上,从目录服务器的 NSS 数据库中的现有密钥生成一个证书签名请求(CSR):
# DS_INSTANCE=$(grep ldap_uri /etc/ipa/default.conf | sed -n 's|.%2Frun%2F\(slapd-\)\.socket.|\1|p')*# LDAP_CERT_NICKNAME=$(grep nsSSLPersonalitySSL "/etc/dirsrv/${DS_INSTANCE}/dse.ldif" | awk '{ print $2 }')# HOSTNAME=$(hostname -f)# PWDFILE="/etc/dirsrv/${DS_INSTANCE}/pwdfile.txt"# certutil -R -d "/etc/dirsrv/${DS_INSTANCE}" -k ${LDAP_CERT_NICKNAME} -n ${LDAP_CERT_NICKNAME} -s "CN=${HOSTNAME}" -a -f "${PWDFILE}" -8 "${HOSTNAME}" -o /tmp/ldap.csr注意以上命令会创建
/tmp/ldap.csr。有些certutil版本可能会向文件中添加额外的文本。确保文件仅包含-----BEGIN NEW CERTIFICATE REQUEST-----块,而不包含任何其他内容。如果证书是由 IdM CA 签名的:
在故障副本上,将 CSR 复制到续订服务器中:
# scp /tmp/ldap.csr root@renewal-master.idm.example.com:/tmp/在续订服务器上,签署 CSR。使用
ldap/主体确保证书对 GSSAPI 绑定是有效的:# ipa cert-request /tmp/ldap.csr --principal="ldap/$(hostname -f)" --certificate-out=/tmp/ldap.pem在续订服务器上,将新证书复制回副本:
# scp /tmp/ldap.pem root@failed-replica.idm.example.com:/tmp/在故障副本上,将新证书导入到目录服务器的 NSS 数据库中:
# certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -f "${PWDFILE}"# certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
如果证书是由外部 CA 签名的:
-
使用
/tmp/ldap.csr文件,并将其提交给外部证书颁发机构进行签名。 -
收到新的证书文件(例如
new_ldap_cert.pem)后,将其安全地复制到故障副本上的/tmp/目录中,并将它重命名为ldap.pem。 在故障副本上,将新证书导入到目录服务器的 NSS 数据库中:
# certutil -D -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -f "${PWDFILE}"# certutil -A -d "/etc/dirsrv/${DS_INSTANCE}" -n ${ LDAP_CERT_NICKNAME} -t ",," -i /tmp/ldap.pem -f "${PWDFILE}"
-
使用
为副本的 PKI Tomcat 服务手动发布一个临时证书。
在受影响的副本上,使用存储在 PKI Tomcat NSS 数据库中的现有密钥生成一个 CSR:
# HOSTNAME=$(hostname -f)# PWDFILE="/etc/pki/pki-tomcat/alias/pwdfile.txt"# certutil -R -d /etc/pki/pki-tomcat/alias -k 'Server-Cert cert-pki-ca' -n 'Server-Cert cert-pki-ca' -s "CN=${HOSTNAME},O=IDM.EXAMPLE.COM" -a -f "${PWDFILE}" -o /tmp/server-cert.csr将
IDM.EXAMPLE.COM替换为您的 IdM 域,或使用您的自定义证书主题库。在故障副本上,将 CSR 复制到续订服务器中:
# scp /tmp/server-cert.csr root@renewal-master.idm.example.com:/tmp/在续订服务器上,签署 CSR。为 web 服务器证书使用
host/主体:# ipa cert-request /tmp/server-cert.csr --principal="host/$(hostname -f)" --certificate-out=/tmp/server-cert.pem在续订服务器上,将新证书复制回副本:
# scp /tmp/server-cert.pem root@failed-replica.idm.example.com:/tmp/在故障副本上,将新证书导入到 PKI Tomcat NSS 数据库中:
# certutil -D -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -f "${PWDFILE}"# certutil -A -d /etc/pki/pki-tomcat/alias -n 'Server-Cert cert-pki-ca' -t ",," -i /tmp/server-cert.pem -f "${PWDFILE}"
重启服务并续订剩余的证书。
重启副本上的 IdM 服务以使用新证书:
# ipactl restart重启
certmonger服务以应用手动更改。重启后,它应该开始尝试续订任何剩余的证书:# systemctl restart certmonger-
您可以通过定期运行
getcert list | grep -E "Request ID|status|expires"来监视续订过程。所有证书都处于MONITORING状态后,过程完成。 certmonger服务现在应该可以与 CA 进行通信。如果一个或多个证书在几分钟后仍然未续订,请考虑手动续订它们:# getcert list# getcert resubmit -i <REQUEST_ID>
22.2. 从续订服务器上的过期服务证书中恢复 复制链接链接已复制到粘贴板!
在这种情况下,IdM CA 证书仍有效,但其他服务证书(LDAP, HTTPD)已在续订服务器上过期。ipa-cert-fix 工具专门用于处理此类问题。
流程
停止续订服务器上的 IdM 服务:
# ipactl stop运行
ipa-cert-fix来:- 检查跟踪的证书。
- 在 LDAP 中重置证书的到期日期。
允许
certmonger发布新证书。提示时输入
yes继续:# ipa-cert-fix警告如果您的 CA 已过期,请不要运行
ipa-cert-fix命令。在这种情况下,请跳过这一步。
运行
ipa-certupdate,将新修复和发布的证书传播到所有系统服务:# ipa-certupdate重启 IdM 并验证:
# ipactl restart
22.3. 从过期的 IdM CA 证书中恢复 复制链接链接已复制到粘贴板!
这是最重要的故障。如果 IdM CA 证书本身已过期,则无法验证或发布证书。恢复过程涉及将 CA 证书续订为自签名证书以恢复系统功能,然后可选择将其使用外部 CA 对其重新签名(如果这是您的最初配置)。
流程
在续订服务器上,将 CA 证书续订为自签名证书。这个命令使用现有的私钥生成一个带有续订有效期限的新 CA 证书:
# ipa-cacert-manage renew --self-signed如果您的证书接近其到期日期,且续订它并没有将到期日期推后,请参阅 当 IPA 的 CA 证书接近到期日期时,续订不会将到期日期推后 解决方案。
在续订服务器上修复过期的服务证书。
停止 IdM 服务:
# ipactl stop运行
ipa-cert-fix命令以重置 IdM 数据库中过期的服务证书的过期日期:# ipa-cert-fix发布新证书并将其应用到 IdM 服务:
# ipa-certupdate重启 IdM 服务以完成续订:
# ipactl start
如果您的最初设置使用外部签名的 CA,则您必须获得外部颁发机构重新签名的新 CA 证书。如果您使用自签名 CA,请跳过这一步。
为新续订的 CA 生成一个证书签名请求(CSR):
# ipa-cacert-manage renew --external-ca这会在
/var/lib/ipa/ca.csr中创建一个 CSR 文件。- 将 CSR 文件提交到您的外部 CA,并接收新签名的证书和外部 CA 的信任链。
将新签名的证书安装回 IdM :
# ipa-cacert-manage renew --external-cert-file /path/to/new-ca.pem --external-cert-file /path/to/external-chain.pem
将新 CA 证书传播到所有 IdM 服务器和客户端。首先在续订服务器上运行
ipa-certupdate,然后在所有其他副本上运行,最后在所有客户端上运行:# ipa-certupdate此步骤对于确保拓扑中的所有系统都信任新的 CA 证书至关重要。
第 23 章 在 IdM CA 服务器中生成 CRL 复制链接链接已复制到粘贴板!
如果您的 IdM 部署使用嵌入的证书颁发机构(CA),您可能需要将证书撤销列表(CRL)的生成从一个身份管理(IdM)服务器移到另一个。例如,当您要将服务器迁移到另一个系统时,可能需要这样做。
仅配置一台服务器来生成 CRL。执行 CRL publisher 角色的 IdM 服务器通常与执行 CA 续订服务器角色的服务器相同,但这不是强制要求。在取消 CRL publisher 服务器前,选择并配置另一个服务器来执行 CRL publisher 服务器角色。
23.1. 在 IdM 服务器中停止 CRL 生成 复制链接链接已复制到粘贴板!
使用 ipa-crlgen-manage 命令停止在 IdM CRL 发布程序服务器上生成证书撤销列表(CRL)。您必须在当前服务器上禁用 CRL 生成,然后才能在新服务器上启用它,因为每次只有一个服务器应生成 CRL。
先决条件
- 您必须以 root 身份登录。
流程
检查您的服务器是否正在生成 CRL:
[root@server ~]# ipa-crlgen-manage statusCRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successful停止在服务器上生成 CRL:
[root@server ~]# ipa-crlgen-manage disableStopping pki-tomcatd Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg Starting pki-tomcatd Editing /etc/httpd/conf.d/ipa-pki-proxy.conf Restarting httpd CRL generation disabled on the local host. Please make sure to configure CRL generation on another master with ipa-crlgen-manage enable. The ipa-crlgen-manage command was successful检查服务器是否停止生成 CRL:
[root@server ~]# ipa-crlgen-manage status服务器停止生成 CRL。下一步是在 IdM 副本上启用 CRL 生成。
23.2. 在 IdM 副本服务器中启动 CRL 生成 复制链接链接已复制到粘贴板!
您可以使用 ipa-crlgen-manage 命令在 IdM CA 服务器上开始生成证书撤销列表(CRL)。
先决条件
- RHEL 系统必须是 IdM 证书颁发机构服务器。
- 您必须以 root 身份登录。
流程
开始生成 CRL:
[root@replica1 ~]# ipa-crlgen-manage enableStopping pki-tomcatd Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg Starting pki-tomcatd Editing /etc/httpd/conf.d/ipa-pki-proxy.conf Restarting httpd Forcing CRL update CRL generation enabled on the local host. Please make sure to have only a single CRL generation master. The ipa-crlgen-manage command was successful检查是否生成 CRL:
[root@replica1 ~]# ipa-crlgen-manage statusCRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successful
23.3. 更改 CRL 更新间隔 复制链接链接已复制到粘贴板!
默认情况下,证书撤销列表(CRL)文件每四小时由身份管理证书颁发机构(Idm CA)自动生成。您可以按照以下流程更改此间隔。
流程
停止 CRL 生成服务器:
# systemctl stop pki-tomcatd@pki-tomcat.service打开
/var/lib/pki/pki-tomcat/conf/ca/CS.cfg文件,并将ca.crl.MasterCRL.autoUpdateInterval值改为新的间隔设置。例如,要每 60 分钟生成 CRL:ca.crl.MasterCRL.autoUpdateInterval=60注意如果您更新了
ca.crl.MasterCRL.autoUpdateInterval参数,则更改将在下一次计划的 CRL 更新后生效。启动 CRL 生成服务器:
# systemctl start pki-tomcatd@pki-tomcat.service
第 24 章 停用执行 CA 续订服务器和 CRL 发布者角色的服务器 复制链接链接已复制到粘贴板!
在停用当前包含这两个角色的服务器之前,将证书颁发机构(CA)续订服务器和 CRL 发布者角色转移到另一个 CA 副本。
在本例中,主机 server.idm.example.com ,其履行 CA 续订服务器和 CRL 发布者角色,必须停用。此流程将 CA 续订服务器和 CRL 发布者角色转移到主机 replica.idm.example.com,并从 IdM 环境中删除 server.idm.example.com。
您不需要配置同一服务器来执行 CA 续订服务器和 CRL 发布者角色。
先决条件
- 有 IdM 管理员凭证。
- 您有要停用的服务器的 root 密码。
- 在您的 IdM 环境中至少有两个 CA 副本。
流程
获取 IdM 管理员凭证:
[user@server ~]$ kinit adminPassword for admin@IDM.EXAMPLE.COM:可选:如果您不确定哪些服务器执行 CA 续订服务器和 CRL 发布者角色:
显示当前的 CA 续订服务器。您可以从任何 IdM 服务器运行以下命令:
[user@server ~]$ ipa config-show | grep 'CA renewal'IPA CA renewal master: server.idm.example.com测试主机是否为当前的 CRL 发布者。
[user@server ~]$ ipa-crlgen-manage statusCRL generation: enabled Last CRL update: 2019-10-31 12:00:00 Last CRL Number: 6 The ipa-crlgen-manage command was successful不生成 CRL 的 CA 服务器显示
CRL generation: disabled。[user@replica ~]$ ipa-crlgen-manage statusCRL generation: disabled The ipa-crlgen-manage command was successful继续在 CA 服务器上输入此命令,直到找到 CRL 发布者服务器。
显示您可以提升的所有其他 CA 服务器,以履行这些角色。此环境有两个 CA 服务器。
[user@server ~]$ ipa server-role-find --role 'CA server'---------------------- 2 server roles matched ---------------------- Server name: server.idm.example.com Role name: CA server Role status: enabled Server name: replica.idm.example.com Role name: CA server Role status: enabled ---------------------------- Number of entries returned 2 ----------------------------
将
replica.idm.example.com设为 CA 续订服务器。[user@server ~]$ ipa config-mod --ca-renewal-master-server replica.idm.example.com在
server.idm.example.com上:禁用证书更新器任务:
[root@server ~]# pki-server ca-config-set ca.certStatusUpdateInterval 0重启 IdM 服务:
[root@server ~]# ipactl restart
在
replica.idm.example.com上:启用证书更新器任务:
[root@replica ~]# pki-server ca-config-unset ca.certStatusUpdateInterval重启 IdM 服务:
[root@replica ~]# ipactl restart
在
server.idm.example.com上,停止生成 CRL。[user@server ~]$ ipa-crlgen-manage disableStopping pki-tomcatd Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg Starting pki-tomcatd Editing /etc/httpd/conf.d/ipa-pki-proxy.conf Restarting httpd CRL generation disabled on the local host. Please make sure to configure CRL generation on another master with ipa-crlgen-manage enable. The ipa-crlgen-manage command was successful在
replica.idm.example.com上,开始生成 CRL。[user@replica ~]$ ipa-crlgen-manage enableStopping pki-tomcatd Editing /var/lib/pki/pki-tomcat/conf/ca/CS.cfg Starting pki-tomcatd Editing /etc/httpd/conf.d/ipa-pki-proxy.conf Restarting httpd Forcing CRL update CRL generation enabled on the local host. Please make sure to have only a single CRL generation master. The ipa-crlgen-manage command was successful停止
server.idm.example.com上的 IdM 服务:[root@server ~]# ipactl stop在
replica.idm.example.com上,从 IdM 环境中删除server.idm.example.com。[user@replica ~]$ ipa server-del server.idm.example.com在
server.idm.example.com上,以 root 帐户身份使用ipa-server-install --uninstall命令:[root@server ~]# ipa-server-install --uninstall ... Are you sure you want to continue with the uninstall procedure? [no]: yes
验证
显示当前的 CA 续订服务器。
[user@replica ~]$ ipa config-show | grep 'CA renewal'IPA CA renewal master: replica.idm.example.com确认
replica.idm.example.com主机正在生成 CRL。[user@replica ~]$ ipa-crlgen-manage statusCRL generation: enabled Last CRL update: 2019-10-31 12:10:00 Last CRL Number: 7 The ipa-crlgen-manage command was successful
第 25 章 使用 certmonger 为服务获取 IdM 证书 复制链接链接已复制到粘贴板!
certmonger 在身份管理中自动化系统和服务证书的生命周期。此服务跟踪过期日期、处理续订请求并安装更新的凭证,以确保不间断的服务操作。
25.1. Certmonger 概述 复制链接链接已复制到粘贴板!
当 Identity Management(IdM)安装集成 IdM 证书颁发机构(CA)时,它将使用 certmonger 服务 来跟踪和续订系统和服务证书。当证书到达过期日期时,certmonger 通过以下 方法管理续订过程:
- 使用原始请求中提供的选项来重新生成一个证书签名请求(CSR)。
-
使用 IdM API
cert-request命令将 CSR 提交到 IdM CA。 - 从 IdM CA 接收证书。
- 如果原始请求指定了,则执行预先保存的命令。
-
在续订请求中指定的位置安装新证书:在
NSS数据库或一个文件中。 如果原始请求指定了,则执行保存后的命令。例如,保存后命令可以指示
certmonger 重新启动相关服务,以便服务获取新证书。- 证书类型
certmonger跟踪 - 证书可分为系统和服务证书。
- 证书类型
与服务证书(例如 HTTP、LDAP 和 PKINIT)不同,后者在不同服务器上具有不同的密钥对和主题名称,IdM 系统证书及其密钥由所有 CA 副本共享。IdM 系统证书包括:
-
IdM CA证书 -
OCSP签名证书 -
IdM CA 子系统证书 -
IdM CA 审计签名证书 -
IdM 续订代理(RA)证书 -
KRA传输和存储证书
certmonger 服务跟踪在安装带有集成 CA 的 IdM 环境期间请求的 IdM 系统和服务证书。Certmonger 还 跟踪系统管理员为 IdM 主机上运行的其他服务手动请求的证书。Certmonger 不会跟踪外部 CA 证书或用户证书。
- Certmonger 组件
certmonger服务由两个主要组件组成:-
certmonger 守护进程,即引擎跟踪证书列表并启动续订命令 -
用于命令行(CLI)的
getcert工具,其允许系统管理员主动向certmonger守护进程发送命令。
-
更具体来说,系统管理员可以使用 getcert 工具程序:
25.2. 使用 certmonger 为服务获取 IdM 证书 复制链接链接已复制到粘贴板!
为确保浏览器和身份管理(IdM)客户端上运行的 Web 服务之间的通信安全且加密,请使用 TLS 证书。从 IdM 证书颁发机构(CA)获取您的 Web 服务的 TLS 证书。
按照以下流程,使用 certmonger 获取在 IdM 客户端上运行的服务(HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM)的 IdM 证书。
使用 证书监控 器自动请求证书意味着,certmonger 在到期需要续订时管理和续订证书。
有关 certmonger 请求服务证书时发生的情况的可视化表示,请参阅 certmonger 请求服务证书的通信流。
先决条件
- Web 服务器已注册为 IdM 客户端。
- 您有正在运行的 IdM 客户端的 root 访问权限。
- 请求证书的服务不必在 IdM 中预先存在。
流程
在运行
HTTP服务的 my_company.idm.example.comIdM 客户端中,请求与HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM主体对应的服务的证书,并指定:-
证书将存储在本地
/etc/pki/tls/certs/httpd.pem文件中 -
私钥存储在本地
/etc/pki/tls/private/httpd.key文件中 将
SubjectAltName的 extensionRequest 添加到签名请求中,其 DNS 名称为my_company.idm.example.com:# ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -C "systemctl restart httpd"New signing request "20190604065735" added.在以上命令中:
-
ipa-getcert request命令指定要从 IdM CA 获取证书。ipa-getcert request命令是getcert request -c IPA的快捷方式。 -
g选项指定要生成的密钥的大小(如果尚未到位)。 -
D
选项指定要添加到请求的SubjectAltNameDNS 值。 -
C
选项指示certmonger 在获取证书后重新启动httpd服务。
-
要指定证书与特定的配置集一起发布,请使用
-T选项。 -
要使用指定的 CA 中的指定签发者请求证书,请使用
-X ISSUER选项。
-
-
证书将存储在本地
可选:要检查请求的状态:
# ipa-getcert list -f /etc/pki/tls/certs/httpd.pemNumber of certificates and requests being tracked: 3. Request ID '20190604065735': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/httpd.key' certificate: type=FILE,location='/etc/pki/tls/certs/httpd.crt' CA: IPA [...]输出显示请求处于
MONITORING状态,这表示已获取了证书。密钥对和证书的位置是请求的位置。
25.3. 请求服务证书的证书的通信流 复制链接链接已复制到粘贴板!
这些图显示了当 certmonger 从身份管理(IdM)证书认证机构(CA)服务器请求服务证书时发生什么情况的阶段。序列由这些图表组成:
未加密的通信 显示初始情况:没有 HTTPS 证书,Web 服务器和浏览器之间的通信未加密。
图 25.1. 未加密的通信
请求服务证书的 certmonger 显示系统管理员使用 certmonger 手动为 Apache web 服务器请求 HTTPS 证书。请注意,在请求 Web 服务器证书时,certmonger 不会直接与 CA 通信。它通过 IdM 代理。
图 25.2. 请求服务证书的 certmonger
发布服务证书的IdM CA 显示为 web 服务器发布 HTTPS 证书的 IdM CA。
图 25.3. 发布服务证书的 IdM CA
Certmonger 应用服务证书显示,certmonger 把 HTTPS 证书放置到 IdM 客户端的正确位置,如果指定,会重启 httpd 服务。随后 Apache 服务器使用 HTTPS 证书来加密自身和浏览器之间的流量。
图 25.4. 应用服务证书的 certmonger
当旧的证书接近过期时,请求新证书的 certmonger ,显示 certmonger 在证书过期前自动从 IdM CA 请求续订服务证书。IdM CA 发布一个新证书。
图 25.5. 当旧的证书接近过期时,请求新证书的 certmonger
25.4. 查看由 certmonger 跟踪的证书请求的详情 复制链接链接已复制到粘贴板!
certmonger 服务 监控证书请求。成功签署证书请求后,会生成证书。Certmonger 管理证书请求,包括生成的证书。按照以下流程查看由 certmonger 管理的特定证书请求的详情。
流程
如果您知道如何指定证书请求,请只列出该特定证书请求的详细信息。例如,您可以指定:
- 请求 ID
- 证书的位置
证书 nickname
例如,要查看请求 ID 为 20190408143846 的证书详情,请使用
-v选项查看您的证书请求失败时的所有错误详情:# getcert list -i 20190408143846 -vNumber of certificates and requests being tracked: 16. Request ID '20190408143846': status: MONITORING stuck: no key pair storage: type=NSSDB,location='/etc/dirsrv/slapd-IDM-EXAMPLE-COM',nickname='Server-Cert',token='NSS Certificate DB',pinfile='/etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt' certificate: type=NSSDB,location='/etc/dirsrv/slapd-IDM-EXAMPLE-COM',nickname='Server-Cert',token='NSS Certificate DB' CA: IPA issuer: CN=Certificate Authority,O=IDM.EXAMPLE.COM subject: CN=server.idm.example.com,O=IDM.EXAMPLE.COM expires: 2021-04-08 16:38:47 CEST dns: server.idm.example.com principal name: ldap/server.idm.example.com@IDM.EXAMPLE.COM key usage: digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: post-save command: /usr/libexec/ipa/certmonger/restart_dirsrv IDM-EXAMPLE-COM track: true auto-renew: true
输出显示有关证书的几段信息,例如:
-
证书位置;在上面的示例中,它是
/etc/dirsrv/slapd-IDM-EXAMPLE-COM目录中的 NSS 数据库 -
证书 nickname;上例中为
Server-Cert -
存储 pin 的文件;在上面的示例中,该文件为
/etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt -
将用于续订证书的证书颁发机构(CA);上例中为
IPACA -
到期日期;上例中为
2021-04-08 16:38:47 CEST -
证书的状态;上例中,MON
ITORING状态表示证书有效并且被跟踪。 -
保存后的命令;在上面的示例中,这是
LDAP服务的重新启动。
如果您不知道如何指定证书请求,请列出
certmonger 监控或尝试获取的所有证书的详情:# getcert list
25.5. 启动和停止证书跟踪 复制链接链接已复制到粘贴板!
使用 getcert stop-tracking 和 getcert start-tracking 命令来监控证书。这两个命令由 certmonger 服务提供。如果您已经从不同的 IdM 客户端上导入了身份管理(IdM)证书认证机构(CA)签发的证书,启用证书跟踪特别有用。启用证书跟踪也可以是以下置备方案的最后一步:
- 在 IdM 服务器上,您可以为尚不存在的系统创建一个证书。
- 您可以创建新系统。
- 将新系统注册为 IdM 客户端。
- 您可以将证书和密钥从 上的 IdM 服务器导入到 IdM 客户端。
-
您开始使用
certmonger 来跟踪证书,以确保其在过期时得到续订。
流程
使用 Request ID 20190408143846 禁用对证书的监控:
# getcert stop-tracking -i 20190408143846有关更多选项,请参阅您系统上的
getcert stop-tracking手册页。要启用对存储在
/tmp/some_cert.crt文件中的证书的监控,其私钥存储在/tmp/some_key.key文件中:# getcert start-tracking -c IPA -f /tmp/some_cert.crt -k /tmp/some_key.keyCertmonger无法自动识别发布证书的 CA 类型。因此,如果 IdM CA 签发证书,将-c选项与IPA值一起添加到getcert start-tracking命令中。省略添加-c选项会导致certmonger 进入NEED_CA 状态。有关更多选项,请参阅您系统上的
getcert start-tracking手册页。注意这两个命令不操作证书。例如,
getcert stop-tracking不会删除证书或将其从 NSS 数据库或文件系统中删除,只是将证书从受监控的证书列表中删除。同样,getcert start-tracking只会在受监控证书列表中添加证书。
25.6. 手动续订证书 复制链接链接已复制到粘贴板!
当证书即将到期时,certmonger 守护进程 会自动使用证书颁发机构(CA)帮助程序发出续订命令,获取更新的证书,并将上一个证书替换为新证书。
您还可以使用 getcert resubmit 命令提前手动续订证书。这样,您可以通过添加主题备用名称(SAN)来更新证书包含的信息。
按照以下流程手动续订证书。
流程
使用 Request ID 20190408143846 续订证书:
# getcert resubmit -i 20190408143846要获取特定证书的 Request ID,请使用
getcert list命令。详情请查看您系统上的getcert list手册页。
25.7. 使certmonger 恢复跟踪 CA 副本中的 IdM 证书 复制链接链接已复制到粘贴板!
您可以在跟踪证书中断后,使 certmonger 恢复对带有集成证书颁发机构的 IdM 部署至关重要的 Identity Management (IdM)系统证书的跟踪。中断可能是由在续订系统证书期间从 IdM 主机取消滚动,或者复制拓扑无法正常工作造成的。该程序还演示了如何使 证书恢复 跟踪 IdM 服务证书,即 HTTP、LDAP 和 PKINIT 证书。
先决条件
- 要恢复跟踪系统证书的主机是一个 IdM 服务器,它也是 IdM 证书颁发机构(CA),而不是 IdM CA 续订服务器。
流程
获取子系统 CA 证书的 PIN:
# export NSSDB_PIN=$(sed -n 's/^internal=//p' /var/lib/pki/pki-tomcat/conf/password.conf)为
发布 CA、Audit、OSCP、Subsystem和Tomcat 服务器证书添加跟踪:# getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "caSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "caSigningCert cert-pki-ca"' -T caCACert# getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "auditSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "auditSigningCert cert-pki-ca"' -T caSignedLogCert# getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "ocspSigningCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "ocspSigningCert cert-pki-ca"' -T caOCSPCert# getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "subsystemCert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "subsystemCert cert-pki-ca"' -T caSubsystemCert# getcert start-tracking -d /etc/pki/pki-tomcat/alias -n "Server-Cert cert-pki-ca" -c 'dogtag-ipa-ca-renew-agent' -P $NSSDB_PIN -B /usr/libexec/ipa/certmonger/stop_pkicad -C '/usr/libexec/ipa/certmonger/renew_ca_cert "Server-Cert cert-pki-ca"' -T caServerCert添加对剩余的 IdM 证书、HTTP、
LDAP、IPA 续订代理和PKINIT 证书的跟踪:# getcert start-tracking -f /var/lib/ipa/certs/httpd.crt -k /var/lib/ipa/private/httpd.key -p /var/lib/ipa/passwds/idm.example.com-443-RSA -c IPA -C /usr/libexec/ipa/certmonger/restart_httpd -T caIPAserviceCert# getcert start-tracking -d /etc/dirsrv/slapd-IDM-EXAMPLE-COM -n "Server-Cert" -c IPA -p /etc/dirsrv/slapd-IDM-EXAMPLE-COM/pwdfile.txt -C '/usr/libexec/ipa/certmonger/restart_dirsrv "IDM-EXAMPLE-COM"' -T caIPAserviceCert# getcert start-tracking -f /var/lib/ipa/ra-agent.pem -k /var/lib/ipa/ra-agent.key -c dogtag-ipa-ca-renew-agent -B /usr/libexec/ipa/certmonger/renew_ra_cert_pre -C /usr/libexec/ipa/certmonger/renew_ra_cert -T caSubsystemCert# getcert start-tracking -f /var/kerberos/krb5kdc/kdc.crt -k /var/kerberos/krb5kdc/kdc.key -c dogtag-ipa-ca-renew-agent -B /usr/libexec/ipa/certmonger/renew_ra_cert_pre -C /usr/libexec/ipa/certmonger/renew_kdc_cert -T KDCs_PKINIT_Certs重启证书:# systemctl restart certmonger等待一分钟,直到
certmonger启动后,然后检查新证书的状态:# getcert list
25.8. 使用带有 certmonger 的 SCEP 复制链接链接已复制到粘贴板!
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。如果您在环境中使用 SCEP 服务器作为外部证书颁发机构(CA),您可以使用 certmonger 获取身份管理(IdM)客户端的证书。
25.8.1. SCEP 概述 复制链接链接已复制到粘贴板!
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。您可以使用 SCEP 服务器作为外部证书颁发机构(CA)。
您可以配置一个身份管理(IdM)客户端,以通过 HTTP 直接从 CA SCEP 服务请求并检索证书。此过程由共享 secret 保护,该 secret 通常仅在有限时间内有效。
在客户端上,SCEP 要求您提供以下组件:
- SCEP URL:CA SCEP 接口的 URL。
-
SCEP 共享的 secret:一个在 CA 和 SCEP 客户端之间共享的
challengePasswordPIN,用于获取证书。
然后,客户端通过 SCEP 检索 CA 证书链,并将证书签名请求发送到 CA。
配置带有 certmonger 的 SCEP 时,您可以创建一个新的 CA 配置的配置文件,该配置文件指定签发的证书参数。
25.8.2. 通过 SCEP 请求一个 IdM CA 签名的证书 复制链接链接已复制到粘贴板!
以下示例将 SCEP_example SCEP CA 配置添加到 certmonger,并在 client.idm.example.com IdM 客户端上请求一个新证书。certmonger 支持 NSS 证书数据库格式和基于文件的(PEM)格式,如 OpenSSL。
先决条件
- 您知道 SCEP URL。
-
您有
challengePasswordPIN 共享 secret。
流程
将 CA 配置添加到
certmonger:[root@client.idm.example.com ~]# getcert add-scep-ca -c SCEP_example -u SCEP_URL-
-c: CA 配置的强制别名。稍后可以将相同的值用于其他getcert命令。 -u:服务器的 SCEP 接口的 URL。重要使用 HTTPS URL 时,还必须使用
-R选项指定 SCEP 服务器 CA 证书的 PEM 格式的副本的位置。
-
验证 CA 配置是否已成功添加:
[root@client.idm.example.com ~]# getcert list-cas -c SCEP_exampleCA 'SCEP_example': is-default: no ca-type: EXTERNAL helper-location: /usr/libexec/certmonger/scep-submit -u http://SCEP_server_enrollment_interface_URL SCEP CA certificate thumbprint (MD5): A67C2D4B 771AC186 FCCA654A 5E55AAF7 SCEP CA certificate thumbprint (SHA1): FBFF096C 6455E8E9 BD55F4A5 5787C43F 1F512279如果成功添加了配置,certmonger 会从远程 CA 检索 CA 链。然后,CA 链以指纹的形式显示在命令输出中。当通过未加密的 HTTP 访问服务器时,手动将指纹与 SCEP 服务器中显示的指纹进行比较,以防止中间人攻击。
从 CA 请求一个证书:
如果您在使用 NSS:
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -d /etc/pki/nssdb -n ExampleCert -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com您可以使用选项来指定证书请求的以下参数:
-
-I: 可选:任务的名称:请求的跟踪 ID。稍后可以将相同的值用于getcert list命令。 -
-c:将请求提交给的 CA 配置。 -
-d:包含 NSS 数据库的目录,以存储证书和密钥。 -
-n:证书的别名,在 NSS 数据库中使用。 -
-n: CSR 中的主题名称。 -
-L:CA 发布的一次性时间限制的challengePasswordPIN。 -
-D:证书的主题备用名称,通常与主机名相同。
-
如果您在使用 OpenSSL:
[root@client.idm.example.com ~]# getcert request -I Example_Task -c SCEP_example -f /etc/pki/tls/certs/server.crt -k /etc/pki/tls/private/private.key -N cn="client.idm.example.com" -L one-time_PIN -D client.idm.example.com您可以使用选项来指定证书请求的以下参数:
-
-I: 可选:任务的名称:请求的跟踪 ID。稍后可以将相同的值用于getcert list命令。 -
-c:将请求提交给的 CA 配置。 -
-f:到证书的存储路径。 -
-k:到密钥的存储路径。 -
-n: CSR 中的主题名称。 -
-L:CA 发布的一次性时间限制的challengePasswordPIN。 -
-D:证书的主题备用名称,通常与主机名相同。
-
验证
验证证书是否已颁发,并正确存储在本地数据库中:
如果您使用了 NSS,请输入:
[root@client.idm.example.com ~]# getcert list -I Example_TaskRequest ID 'Example_Task': status: MONITORING stuck: no key pair storage: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB' certificate: type=NSSDB,location='/etc/pki/nssdb',nickname='ExampleCert',token='NSS Certificate DB' signing request thumbprint (MD5): 503A8EDD DE2BE17E 5BAA3A57 D68C9C1B signing request thumbprint (SHA1): B411ECE4 D45B883A 75A6F14D 7E3037F1 D53625F4 CA: IPA issuer: CN=Certificate Authority,O=EXAMPLE.COM subject: CN=client.idm.example.com,O=EXAMPLE.COM expires: 2018-05-06 10:28:06 UTC key usage: digitalSignature,keyEncipherment eku: iso.org.dod.internet.security.mechanisms.8.2.2 certificate template/profile: IPSECIntermediateOffline pre-save command: post-save command: track: true auto-renew: true如果您使用了 OpenSSL,请输入:
[root@client.idm.example.com ~]# getcert list -I Example_TaskRequest ID 'Example_Task': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/private.key' certificate: type=FILE,location='/etc/pki/tls/certs/server.crt' CA: IPA issuer: CN=Certificate Authority,O=EXAMPLE.COM subject: CN=client.idm.example.com,O=EXAMPLE.COM expires: 2018-05-06 10:28:06 UTC eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: post-save command: track: true auto-renew: true状态 MONITORING 表示成功检索了签发的证书。
getcert-list(1)手册页列出了其他可能的状态及其含义。
25.8.3. 使用 certmonger 自动续订 AD SCEP 证书 复制链接链接已复制到粘贴板!
当 certmonger 发送 SCEP 证书续订请求时,此请求使用现有的证书私钥进行签名。但是,certmonger 发送的续订请求默认还包括用于最初获取证书的 challengePassword PIN。
作为 SCEP 服务器工作的活动目录(AD)网络设备注册服务(NDES)服务器会自动拒绝包含最初 challengePassword PIN 的任何续订请求。因此,续订会失败。
要使带有 AD 的续订正常工作,您需要配置 certmonger,以发送没有 challengePassword PIN 的签名续订请求。您还需要配置 AD 服务器,使其不会在续订时比较主题名称。
除了 AD ,SCEP 服务器也会拒绝包含 challengePassword 的请求。在这些情况下,您可能还需要以这种方式更改 certmonger 配置。
先决条件
- RHEL 服务器必须正在运行 RHEL 8.6 或更新版本。
流程
-
在 AD 服务器上打开
regedit。 -
在 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MSCEP 子键中,添加一个新的 32 位 REG_DWORD 条目
DisableRenewalSubjectNameMatch,并将其值设为1。 在运行
certmonger的服务器上,打开/etc/certmonger/certmonger.conf文件,并添加以下部分:[scep] challenge_password_otp = yes重启 certmonger:
# systemctl restart certmonger
第 26 章 在 IdM 中部署和管理 ACME 服务 复制链接链接已复制到粘贴板!
自动证书管理环境(ACME)是用于自动标识符验证和证书颁发的协议。它的目标是通过缩短证书生命周期并避免证书生命周期管理中的手动过程来提高安全性。
使用 RHEL 身份管理(IdM),管理员可从单个系统轻松地部署和管理拓扑范围的 ACME 服务。
26.1. IdM 中的 ACME 服务 复制链接链接已复制到粘贴板!
IdM 只支持启用了 Random Certificate Serial Numbers (RSNv3)的 ACME。
ACME 使用质询和响应身份验证机制来证明客户端能够控制标识符。在 ACME 中,标识符是通过解决挑战来来获得证书的所有权证明。在身份管理(IdM)中,ACAC 目前支持以下挑战:
-
dns-01,客户端创建 DNS 记录来证明它对标识符有控制 -
http-01,客户端提供 HTTP 资源以证明其对标识符有控制
在 IdM 中,ACAC 服务使用 PKI ACME 响应器。ACME 子系统会自动部署在 IdM 部署中的每个 CA 服务器上,但它不会服务请求,直到管理员启用它。服务器使用名称 ipa-ca.DOMAIN 来发现。所有 IdM CA 服务器都使用此 DNS 名称注册,因此请求通过轮询来平衡负载。
当管理员使用 ipa-server-upgrade 命令升级服务器时,还会部署 ACME,但禁用它。
ACME 作为 Apache Tomcat 中的单独服务运行。ACME 配置文件存储在 /etc/pki/pki-tomcat/acme 中,PKI 将 ACME 信息记录到 /var/log/pki/pki-tomcat/acme/ 中。
在发布 ACME 证书时,IdM 使用 acmeIPAServerCert 配置文件。签发的证书的有效期为 90 天。因此,强烈建议将 ACME 设置为自动删除过期的证书,以便它们不会在 CA 中累积,因为这可能会对性能造成负面影响。
提供不同的 ACME 客户端。要与 RHEL 一起使用,所选客户端必须支持 dns-01 或 http-01 质询。目前,以下客户端已经过测试,并已知可在 RHEL 中与 ACME 一起工作:
-
certbot带有http-01和dns-01质询 -
mod_md,其只支持http-01质询
26.2. 在 IdM 中启用 ACME 服务 复制链接链接已复制到粘贴板!
默认情况下,部署了 ACME 服务,但已禁用。启用 ACME 服务可在整个 IdM 部署中的所有 IdM CA 服务器上启用它。这通过复制进行处理。
在本例中,您启用了 ACME ,并将其设置为在每个月的第一天的午夜自动删除过期的证书。
先决条件
- IdM 部署中的服务器启用了 Random Certificate Serial Numbers(RSNv3)。
- 在运行该流程的 IdM 服务器上您需要有 root 权限。
流程
在整个 IdM 部署中启用 ACME:
# ipa-acme-manage enableThe ipa-acme-manage command was successful将 ACME 设置为从 CA 中自动删除过期的证书:
# ipa-acme-manage pruning --enable --cron "0 0 1 * *"注意过期的证书会在保留周期后被删除。默认情况下,这是过期后 30 天。
验证
要检查 ACME 服务是否已安装并启用,请使用
ipa-acme-manage status命令:# ipa-acme-manage statusACME is enabled The ipa-acme-manage command was successful
26.3. 在 IdM 中禁用 ACME 服务 复制链接链接已复制到粘贴板!
禁止 ACME 服务在整个 IdM 部署中禁用它。这通过复制进行处理。
先决条件
- IdM 部署中的服务器启用了 Random Certificate Serial Numbers(RSNv3)。
- 在运行该流程的 IdM 服务器上您需要有 root 权限。
流程
在整个 IdM 部署中禁用 ACME:
# ipa-acme-manage disableThe ipa-acme-manage command was successful可选:禁用自动删除过期的证书:
# ipa-acme-manage pruning --disable
验证
要检查 ACME 服务是否已安装,但被禁用了,请使用
ipa-acme-manage status命令:# ipa-acme-manage statusACME is disabled The ipa-acme-manage command was successful
第 27 章 从 CA 请求证书,并使用 RHEL 系统角色创建自签名证书 复制链接链接已复制到粘贴板!
许多服务,如 Web 服务器,都使用 TLS 加密与客户端的连接。通过使用 certificate RHEL 系统角色,您可以在受管节点上自动生成私钥。此外,该角色还会配置 certmonger 服务,以从 CA 请求证书。
出于测试目的,您可以使用 certificate 角色创建自签名证书,而不是从 CA 请求一个签名证书。
27.1. 使用 certificate RHEL 系统角色从 IdM CA 请求一个新证书 复制链接链接已复制到粘贴板!
通过使用 证书 RHEL 系统角色,您可以自动创建私钥,并让 certmonger 服务从 Red Hat Enterprise Linux 证书颁发机构(CA)中的身份管理(IdM)请求证书。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有这些节点的
sudo权限。 - 受管节点是 IdM 域的成员,域使用集成了 IdM 的 CA。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Create certificates hosts: managed-node-01.example.com tasks: - name: Create a self-signed certificate ansible.builtin.include_role: name: redhat.rhel_system_roles.certificate vars: certificate_requests: - name: web-server ca: ipa dns: www.example.com principal: HTTP/www.example.com@EXAMPLE.COM run_before: systemctl stop httpd.service run_after: systemctl start httpd.service示例 playbook 中指定的设置包括如下:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,则角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为一个路径,如
/tmp/web-server,则角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置了
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色管理 SELinux 上下文。
-
如果将变量设置为
ca: ipa- 定义角色从 IdM CA 请求证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。 principal: <kerberos_principal>- 可选:设置应该在证书中包含的 Kerberos 主体。
run_before: <command>-
可选:定义
certmonger在从 CA 请求证书之前应执行的命令。 run_after: <command>-
可选:定义
certmonger在从 CA 收到发布的证书后应该执行的命令。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
列出
certmonger服务管理的证书:# ansible managed-node-01.example.com -m command -a 'getcert list'... Number of certificates and requests being tracked: 1. Request ID '20240918142211': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key' certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt' CA: IPA issuer: CN=Certificate Authority,O=EXAMPLE.COM subject: CN=www.example.com issued: 2024-09-18 16:22:11 CEST expires: 2025-09-18 16:22:10 CEST dns: www.example.com key usage: digitalSignature,keyEncipherment eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: systemctl stop httpd.service post-save command: systemctl start httpd.service track: yes auto-renew: yes
27.2. 使用 certificate RHEL 系统角色请求一个新的自签名证书 复制链接链接已复制到粘贴板!
如果需要用于测试环境的 TLS 证书,您可以使用自签名证书。通过使用 certificate RHEL 系统角色,您可以自动化创建私钥的过程,并让 certmonger 服务创建一个自签名证书。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有这些节点的
sudo权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml:--- - name: Create certificates hosts: managed-node-01.example.com tasks: - name: Create a self-signed certificate ansible.builtin.include_role: name: redhat.rhel_system_roles.certificate vars: certificate_requests: - name: web-server ca: self-sign dns: test.example.com示例 playbook 中指定的设置包括如下:
name: <path_or_file_name>定义生成的私钥和证书文件的名称或路径:
-
如果将变量设置为
web-server,则角色会将私钥存储在/etc/pki/tls/private/web-server.key中,并将证书存储在/etc/pki/tls/certs/web-server.crt文件中。 如果将变量设置为一个路径,如
/tmp/web-server,则角色会将私钥存储在/tmp/web-server.key中,并将证书存储在/tmp/web-server.crt文件中。请注意,您使用的目录必须设置了
cert_tSELinux 上下文。您可以使用selinuxRHEL 系统角色管理 SELinux 上下文。
-
如果将变量设置为
ca: self-sign- 定义角色创建了一个自签名证书。
dns: <hostname_or_list_of_hostnames>-
设置发布的证书中的 Subject Alternative Names (SAN)字段包含的主机名。您可以使用通配符(
*)或以 YAML 列表格式指定多个名称。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.certificate/README.md文件。验证 playbook 语法:
$ ansible-playbook --syntax-check ~/playbook.yml请注意,这个命令只验证语法,不能防止错误的、但有效的配置。
运行 playbook:
$ ansible-playbook ~/playbook.yml
验证
列出
certmonger服务管理的证书:# ansible managed-node-01.example.com -m command -a 'getcert list'... Number of certificates and requests being tracked: 1. Request ID '20240918133610': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/web-server.key' certificate: type=FILE,location='/etc/pki/tls/certs/web-server.crt' CA: local issuer: CN=c32b16d7-5b1a4c5a-a953a711-c3ca58fb,CN=Local Signing Authority subject: CN=test.example.com issued: 2024-09-18 15:36:10 CEST expires: 2025-09-18 15:36:09 CEST dns: test.example.com key usage: digitalSignature,keyEncipherment eku: id-kp-serverAuth,id-kp-clientAuth pre-save command: post-save command: track: yes auto-renew: yes
第 28 章 将应用程序限制为只信任证书的子集 复制链接链接已复制到粘贴板!
如果您的 Identity Management(IdM)安装配置了集成证书系统(CS)证书颁发机构(CA),您可以创建轻量级子 CA。您创建的所有子 CA 都从属于证书系统的主 CA,即 ipa CA。
在这种情况下,轻量 级子 CA 意味着为特定目的发布证书的子 CA。例如,轻量级子 CA 允许您配置服务,如虚拟专用网络(VPN)网关和 Web 浏览器,以仅接受 子 CA A 发布的证书。通过将其他服务配置为仅接受由 子 CA B 发布的证书,您可以防止它们接受 子 CA、主 CA( 即 ipa CA)和两者之间的任何中间子 CA 发布的证书。
如果您撤销了子 CA 的中间证书,此子 CA 发布的所有证书都将被正确配置的客户端视为无效。所有其他直接由 root CA、ipa 或其他 子 CA 发布的证书保持有效。
本节使用 Apache Web 服务器的示例来说明如何将应用限制为仅信任某一证书子集。完成本节以限制 IdM 客户端上运行的 Web 服务器使用 webserver-ca IdM 子 CA 发布的证书,并要求用户使用 web client-ca IdM 子 CA 发布的用户证书向 web 服务器进行身份验证。
您需要执行的步骤有:
- 创建 IdM 子 CA
- 从 IdM WebUI 下载子 CA 证书
- 创建 CA ACL,指定正确组合用户、服务和 CA,以及使用的证书配置集
- 从 IdM 子 CA 为运行在 IdM 客户端上的 web 服务请求证书
- 设置单实例 Apache HTTP 服务器
- 向 Apache HTTP 服务器添加 TLS 加密
- 在 Apache HTTP 服务器中设置支持的 TLS 协议版本
- 在 Apache HTTP 服务器上设置受支持的密码
- 在 web 服务器中配置 TLS 客户端证书身份验证
- 从 IdM 子 CA 为用户请求证书,并将证书导出到客户端
- 将用户证书导入到浏览器中,并将浏览器配置为信任子 CA 证书
28.1. 管理轻量级子 CA 复制链接链接已复制到粘贴板!
本节描述了如何管理轻量级从属证书颁发机构(sub-CA)。您创建的所有子 CA 都从属到证书系统的主 CA ,ipa CA。您还可以禁用和删除子 CA。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当没有其
notAfter过期时间是将来的子 CA 发布的证书时,才删除子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
28.1.1. 从 IdM WebUI 创建子 CA 复制链接链接已复制到粘贴板!
您可以使用 IdM WebUI 来创建名为 webserver-ca 和 webclient-ca 的新子 CA。
先决条件
- 您已以管理员身份登录。
流程
- 在 身份验证 菜单中,单击 Certificates。
- 选择 证书授权 并单击 添加。
- 输入 webserver-ca 子 CA 的名称。在 Subject DN 字段中输入 Subject DN,如 CN=WEBSERVER,O=IDM.EXAMPLE.COM。请注意,主题 DN 在 IdM CA 基础架构中必须是唯一的。
- 输入 webclient-ca 子 CA 的名称。在 Subject DN 字段中输入 Subject DN CN=WEBCLIENT,O=IDM.EXAMPLE.COM。
在命令行s行,运行
ipa-certupdate命令,来为 webserver-ca 和 webclient-ca 子 CA 证书创建一个 certmonger 跟踪请求:[root@ipaserver ~]# ipa-certupdate重要在创建子 CA 后忘记运行
ipa-certupdate命令意味着,如果子 CA 证书过期,则子 CA 发布的最终用户证书将被视为无效,即使最终用户证书还没有过期。
验证
验证新子 CA 的签名证书是否已添加到 IdM 数据库中:
[root@ipaserver ~]# certutil -d /etc/pki/pki-tomcat/alias/ -LCertificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI caSigningCert cert-pki-ca CTu,Cu,Cu Server-Cert cert-pki-ca u,u,u auditSigningCert cert-pki-ca u,u,Pu caSigningCert cert-pki-ca ba83f324-5e50-4114-b109-acca05d6f1dc u,u,u ocspSigningCert cert-pki-ca u,u,u subsystemCert cert-pki-ca u,u,u注意新子 CA 证书自动传输到安装有证书系统实例的所有副本。
28.1.2. 从 IdM WebUI 删除子 CA 复制链接链接已复制到粘贴板!
通过 Web UI 删除停用的权威以清理拓扑。管理员必须首先在 CLI 中禁用子 CA,以确保系统在永久删除前正确处理撤销链。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当没有其
notAfter过期时间是将来的子 CA 发布的证书时,才删除子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
先决条件
- 您已以管理员身份登录。
- 您已在 IdM CLI 中禁用了子 CA。请参阅 从 IdM CLI 禁用子 CA
流程
-
在 IdM Web UI 中,打开
身份验证选项卡,然后选择证书子选项卡。 -
选择
证书颁发机构。 选择要删除的子 CA,然后单击"
删除"。图 28.1. 在 IdM Web UI 中删除子 CA
-
单击
Delete确认。
28.1.3. 从 IdM CLI 创建子 CA 复制链接链接已复制到粘贴板!
您可以使用 IdM CLI 创建名为 webserver-ca 和 webclient-ca 的新子 CA。
先决条件
- 您已以管理员身份登录到是 CA 服务器的 IdM 服务器。
流程
输入
ipa ca-add命令,再指定 webserver-ca 子 CA 的名称及其 Subject Distinguished Name(DN):[root@ipaserver ~]# ipa ca-add webserver-ca --subject="CN=WEBSERVER,O=IDM.EXAMPLE.COM"------------------- Created CA "webserver-ca" ------------------- Name: webserver-ca Authority ID: ba83f324-5e50-4114-b109-acca05d6f1dc Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IDM.EXAMPLE.COM- 名称
- CA 的名称。
- 授权 ID
- 自动创建 CA 独立 ID。
- 主题 DN
- 主题区分名称(DN)。主题 DN 在 IdM CA 基础架构中必须是唯一的。
- 签发者 DN
- 签发子 CA 证书的父 CA。所有子 CA 都是作为 IdM root CA 的子 CA 创建的。
创建 webclient-ca 子 CA 以向 Web 客户端发布证书:
[root@ipaserver ~]# ipa ca-add webclient-ca --subject="CN=WEBCLIENT,O=IDM.EXAMPLE.COM" ------------------- Created CA "webclient-ca" ------------------- Name: webclient-ca Authority ID: 8a479f3a-0454-4a4d-8ade-fd3b5a54ab2e Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IDM.EXAMPLE.COM运行 ipa-certupdate 命令,来为 webserver-ca 和 webclient-ca 子 CAs 证书创建 certmonger 追踪请求:
[root@ipaserver ~]# ipa-certupdate重要如果您在创建子 CA 后忘记了运行 ipa-certupdate 命令,且子 CA 证书已过期,则该子 CA 发布的最终身份证书被视为无效,即使最终身份证书没有过期。
验证
验证新子 CA 的签名证书是否已添加到 IdM 数据库中:
[root@ipaserver ~]# certutil -d /etc/pki/pki-tomcat/alias/ -LCertificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI caSigningCert cert-pki-ca CTu,Cu,Cu Server-Cert cert-pki-ca u,u,u auditSigningCert cert-pki-ca u,u,Pu caSigningCert cert-pki-ca ba83f324-5e50-4114-b109-acca05d6f1dc u,u,u ocspSigningCert cert-pki-ca u,u,u subsystemCert cert-pki-ca u,u,u注意新子 CA 证书自动传输到安装有证书系统实例的所有副本。
28.1.4. 从 IdM CLI 禁用子 CA 复制链接链接已复制到粘贴板!
您可以从 IdM CLI 禁用子 CA。如果子 CA 发布的证书还有未过期的,则您不应该删除它,但可以禁用它。如果您删除了子 CA,则对该子 CA 的吊销检查将不再工作。
先决条件
- 您已以管理员身份登录。
流程
运行
ipa ca-find命令来确定您要删除的子 CA 的名称:[root@ipaserver ~]# ipa ca-find------------- 3 CAs matched ------------- Name: ipa Description: IPA CA Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c Subject DN: CN=Certificate Authority,O=IPA.TEST Issuer DN: CN=Certificate Authority,O=IPA.TEST Name: webclient-ca Authority ID: 605a472c-9c6e-425e-b959-f1955209b092 Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IPA.TEST Name: webserver-ca Authority ID: 02d537f9-c178-4433-98ea-53aa92126fc3 Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IPA.TEST ---------------------------- Number of entries returned 3 ----------------------------运行
ipa ca-disable命令来禁用您的子 CA,在本例中为webserver-ca:# ipa ca-disable webserver-ca-------------------------- Disabled CA "webserver-ca" --------------------------
28.1.5. 从 IdM CLI 删除子 CA 复制链接链接已复制到粘贴板!
您可以从 IdM CLI 删除轻量级子 CA。
-
如果您删除了子 CA,则该子 CA 的吊销检查将不再工作。只有当没有其
notAfter过期时间是将来的子 CA 发布的证书时,才删除子 CA。 - 只有当子 CA 发布的证书仍然未过期时,才应禁用该子CA。如果子 CA 发布的所有证书都已过期,您可以删除该子 CA。
- 您不能禁用或删除 IdM CA。
先决条件
- 您已以管理员身份登录。
流程
要显示子 CA 和 CA 的列表,请运行
ipa ca-find命令:# ipa ca-find------------- 3 CAs matched ------------- Name: ipa Description: IPA CA Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c Subject DN: CN=Certificate Authority,O=IPA.TEST Issuer DN: CN=Certificate Authority,O=IPA.TEST Name: webclient-ca Authority ID: 605a472c-9c6e-425e-b959-f1955209b092 Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IPA.TEST Name: webserver-ca Authority ID: 02d537f9-c178-4433-98ea-53aa92126fc3 Subject DN: CN=WEBSERVER,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IPA.TEST ---------------------------- Number of entries returned 3 ----------------------------运行
ipa ca-disable命令来禁用您的子 CA,在本例中为webserver-ca:# ipa ca-disable webserver-ca-------------------------- Disabled CA "webserver-ca" --------------------------删除子 CA,在本例中为
webserver-ca:# ipa ca-del webserver-ca------------------------- Deleted CA "webserver-ca" -------------------------
验证
运行
ipa ca-find来显示 CA 和子 CA 的列表。webserver-ca不再位于列表中。# ipa ca-find------------- 2 CAs matched ------------- Name: ipa Description: IPA CA Authority ID: 5195deaf-3b61-4aab-b608-317aff38497c Subject DN: CN=Certificate Authority,O=IPA.TEST Issuer DN: CN=Certificate Authority,O=IPA.TEST Name: webclient-ca Authority ID: 605a472c-9c6e-425e-b959-f1955209b092 Subject DN: CN=WEBCLIENT,O=IDM.EXAMPLE.COM Issuer DN: CN=Certificate Authority,O=IPA.TEST ---------------------------- Number of entries returned 2 ----------------------------
28.2. 从 IdM WebUI 下载子 CA 证书 复制链接链接已复制到粘贴板!
从 IdM Web UI 检索公共签名证书以建立信任链。管理员必须在客户端系统上安装此文件,以确保应用程序识别和信任由特定子 CA 发布的证书。
先决条件
- 您已以管理员身份登录。
流程
在 Authentication 菜单中点击 Certificates > Certificates。
证书列表中的子 CA 证书
- 单击子 CA 证书的序列号,以打开证书信息页面。
- 在证书信息页面中,点击 Actions > Download。
在 CLI 中,将子 CA 证书移到
/etc/pki/tls/private/目录中:# mv path/to/the/downloaded/certificate /etc/pki/tls/private/sub-ca.crt
28.3. 为 Web 服务器和客户端身份验证创建 CA ACL 复制链接链接已复制到粘贴板!
证书颁发机构访问控制列表(CA ACL)规则定义哪些配置文件可用于向哪些用户、服务或主机发布证书。通过关联配置文件、主体和组,CA ACL 允许主体或组使用特定配置集请求证书。
例如,利用 CA ACL,管理员可以将适用于从伦敦办事处工作的员工的配置文件的使用限制为属于伦敦办事处相关组的成员的用户。
28.3.1. 在 IdM CLI 中查看 CA ACL 复制链接链接已复制到粘贴板!
您可以查看 IdM 部署中提供的证书颁发机构访问控制列表(CA ACL)列表以及特定 CA ACL 的详情。
流程
要查看 IdM 环境中的所有 CA ACL,请输入
ipa caacl-find命令:$ ipa caacl-find----------------- 1 CA ACL matched ----------------- ACL name: hosts_services_caIPAserviceCert Enabled: TRUE要查看 CA ACL 的详细信息,请输入
ipa caacl-show命令并指定 CA ACL 名称。例如,要查看 hosts_services_caIPAserviceCert CA ACL 的详情,请输入:$ ipa caacl-show hosts_services_caIPAserviceCertACL name: hosts_services_caIPAserviceCert Enabled: TRUE Host category: all Service category: all CAs: ipa Profiles: caIPAserviceCert Users: admin
您可以创建一个 CA ACL,在为 HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM 服务请求证书时,创建一个需要系统管理员使用 webserver-ca 子 CA 和 caIPAserviceCert 配置集的 CA ACL。如果用户从其他子 CA 或不同配置集请求证书,则请求会失败。唯一的例外是在启用了另一个匹配的 CA ACL 时。要查看可用的 CA ACL,请参阅 在 IdM CLI 中查看 CA ACL。
先决条件
- HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM 服务是 IdM 的一部分。
- 您已以管理员身份登录。
流程
使用
ipa caacl命令创建 CA ACL,并指定其名称:$ ipa caacl-add TLS_web_server_authentication-------------------------------------------- Added CA ACL "TLS_web_server_authentication" -------------------------------------------- ACL name: TLS_web_server_authentication Enabled: TRUE使用
ipa caacl-mod 命令修改CA ACL 以指定 CA ACL 的说明:$ ipa caacl-mod TLS_web_server_authentication --desc="CAACL for web servers authenticating to web clients using certificates issued by webserver-ca"----------------------------------------------- Modified CA ACL "TLS_web_server_authentication" ----------------------------------------------- ACL name: TLS_web_server_authentication Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca Enabled: TRUE将 webserver-ca 子 CA 添加到 CA ACL 中:
$ ipa caacl-add-ca TLS_web_server_authentication --ca=webserver-caACL name: TLS_web_server_authentication Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca Enabled: TRUE CAs: webserver-ca ------------------------- Number of members added 1 -------------------------使用
ipa caacl-add-service指定主体可以请求证书的服务:$ ipa caacl-add-service TLS_web_server_authentication --service=HTTP/my_company.idm.example.com@IDM.EXAMPLE.COMACL name: TLS_web_server_authentication Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca Enabled: TRUE CAs: webserver-ca Services: HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM ------------------------- Number of members added 1 -------------------------使用
ipa caacl-add-profile命令为请求的证书指定证书配置集:$ ipa caacl-add-profile TLS_web_server_authentication --certprofiles=caIPAserviceCertACL name: TLS_web_server_authentication Description: CAACL for web servers authenticating to web clients using certificates issued by webserver-ca Enabled: TRUE CAs: webserver-ca Profiles: caIPAserviceCert Services: HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM ------------------------- Number of members added 1 -------------------------您可以直接使用新创建的 CA ACL。它在创建后默认启用。
注意CA ACL 的重点是指定允许哪些 CA 和配置文件组合用于来自特定主体或组的请求。CA ACL 不会影响证书验证或信任。它们不会影响签发的证书的使用方式。
您可以创建一个 CA ACL,要求系统管理员在请求证书时使用 webclient-ca 子 CA 和 IECUserRoles 配置集。如果用户从其他子 CA 或不同配置集请求证书,则请求会失败。唯一的例外是在启用了另一个匹配的 CA ACL 时。要查看可用的 CA ACL,请参阅 在 IdM CLI 中查看 CA ACL。
先决条件
- 您已以管理员身份登录。
流程
使用
ipa caacl命令创建 CA ACL 并指定其名称:$ ipa caacl-add TLS_web_client_authentication-------------------------------------------- Added CA ACL "TLS_web_client_authentication" -------------------------------------------- ACL name: TLS_web_client_authentication Enabled: TRUE使用
ipa caacl-mod 命令修改CA ACL 以指定 CA ACL 的说明:$ ipa caacl-mod TLS_web_client_authentication --desc="CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca"----------------------------------------------- Modified CA ACL "TLS_web_client_authentication" ----------------------------------------------- ACL name: TLS_web_client_authentication Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca Enabled: TRUE将 webclient-ca 子 CA 添加到 CA ACL 中:
$ ipa caacl-add-ca TLS_web_client_authentication --ca=webclient-caACL name: TLS_web_client_authentication Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca Enabled: TRUE CAs: webclient-ca ------------------------- Number of members added 1 -------------------------使用
ipa caacl-add-profile命令为请求的证书指定证书配置集:$ ipa caacl-add-profile TLS_web_client_authentication --certprofiles=IECUserRolesACL name: TLS_web_client_authentication Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca Enabled: TRUE CAs: webclient-ca Profiles: IECUserRoles ------------------------- Number of members added 1 -------------------------使用
ipa caacl-mod 命令修改CA ACL,以指定 CA ACL 适用于所有 IdM 用户:$ ipa caacl-mod TLS_web_client_authentication --usercat=all----------------------------------------------- Modified CA ACL "TLS_web_client_authentication" ----------------------------------------------- ACL name: TLS_web_client_authentication Description: CAACL for user web browsers authenticating to web servers using certificates issued by webclient-ca Enabled: TRUE User category: all CAs: webclient-ca Profiles: IECUserRoles您可以直接使用新创建的 CA ACL。它在创建后默认启用。
注意CA ACL 的重点是指定允许哪些 CA 和配置文件组合用于来自特定主体或组的请求。CA ACL 不会影响证书验证或信任。它们不会影响签发的证书的使用方式。
28.4. 使用 certmonger ,从 IdM 子 CA 获取服务的证书 复制链接链接已复制到粘贴板!
使用 certmonger 服务从 webserver-ca 子 CA 获取 TLS 证书,以保护 Web 服务通信并限制浏览器信任。
为确保浏览器和在 IdM 客户端上运行的 Web 服务之间的通信安全且加密,请使用 TLS 证书。如果要将 Web 浏览器限制为信任 webserver-ca 子 CA 发布但没有其它 IdM 子 CA 发布的证书,请从 webserver-ca 子 CA 获取 Web 服务的 TLS 证书。
按照以下流程,使用 certmonger 获取在 IdM 客户端上运行的服务(HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM)的 IdM 证书。
使用 证书监控 器自动请求证书意味着,certmonger 在到期需要续订时管理和续订证书。
有关 certmonger 请求服务证书时发生的情况的可视化表示,请参阅 certmonger 请求服务证书的通信流。
先决条件
- Web 服务器已注册为 IdM 客户端。
- 您有正在运行的 IdM 客户端的 root 访问权限。
- 请求证书的服务不必在 IdM 中预先存在。
流程
在运行
HTTP服务的 my_company.idm.example.comIdM 客户端中,请求与HTTP/my_company.idm.example.com@IDM.EXAMPLE.COM主体对应的服务的证书,并指定:-
证书将存储在本地
/etc/pki/tls/certs/httpd.pem文件中 -
私钥存储在本地
/etc/pki/tls/private/httpd.key文件中 -
The
webserver-ca子 CA 将作为发行证书颁发机构 将
SubjectAltName的 extensionRequest 添加到签名请求中,其 DNS 名称为my_company.idm.example.com:# ipa-getcert request -K HTTP/my_company.idm.example.com -k /etc/pki/tls/private/httpd.key -f /etc/pki/tls/certs/httpd.pem -g 2048 -D my_company.idm.example.com -X webserver-ca -C "systemctl restart httpd"New signing request "20190604065735" added.在以上命令中:
-
ipa-getcert request命令指定要从 IdM CA 获取证书。ipa-getcert request命令是getcert request -c IPA的快捷方式。 -
g选项指定要生成的密钥的大小(如果尚未到位)。 -
D
选项指定要添加到请求的SubjectAltNameDNS 值。 -
X 选项指定证书的签发者必须是webserver-ca,而不是ipa。 -
C
选项指示certmonger 在获取证书后重新启动httpd服务。
-
要指定证书与特定的配置集一起发布,请使用
-T选项。
-
-
证书将存储在本地
可选:要检查请求的状态:
# ipa-getcert list -f /etc/pki/tls/certs/httpd.pemNumber of certificates and requests being tracked: 3. Request ID '20190604065735': status: MONITORING stuck: no key pair storage: type=FILE,location='/etc/pki/tls/private/httpd.key' certificate: type=FILE,location='/etc/pki/tls/certs/httpd.crt' CA: IPA issuer: CN=WEBSERVER,O=IDM.EXAMPLE.COM [...]输出显示请求处于
MONITORING状态,这表示已获取了证书。密钥对和证书的位置是请求的位置。
28.5. 设置单实例 Apache HTTP 服务器 复制链接链接已复制到粘贴板!
要通过您的 Web 服务器分发静态内容,请将 Apache HTTP 服务器配置为分发这些内容。
默认情况下,Apache HTTP 服务器为与服务器关联的所有域提供相同的内容。如果要为不同的域提供不同的内容,请设置基于名称的虚拟主机。详情请参阅 配置基于 Apache 名称的虚拟主机。
先决条件
- 您已在配置传输层安全(TLS)协议前设置了防火墙规则来启用基本 Web 服务连接。
流程
安装
httpd软件包:# dnf install httpd如果使用
firewalld,请在本地防火墙中打开 TCP 端口80:# firewall-cmd --permanent --add-port=80/tcp# firewall-cmd --reload启用并启动
httpd服务:# systemctl enable --now httpd可选:将 HTML 文件添加到
/var/www/html/目录中。注意在 向
/var/www/html/添加内容时,在httpd默认运行的情况下,文件和目录必须可被用户读取。内容所有者可以是root用户和root用户组,也可以是管理员选择的其他用户或组。如果内容所有者是root用户和root用户组,则文件必须可被其他用户读取。所有文件和目录都必须具有httpd_sys_content_tSELinux 上下文,该上下文默认适用于/var/www目录中的所有内容。在
http://server_IP_or_host_name/处连接至 Web 浏览器。如果
/var/www/html/目录为空,或者不包含index.html或index.htm文件,则 Apache 会显示Red Hat Enterprise Linux 测试页面。如果/var/www/html/包含具有不同名称的 HTML 文件,您可以通过输入该文件的 URL 来加载它们,如http://server_IP_or_host_name/example.html。详情请查看您系统的
httpd.service (8)手册页。
28.6. 在 Apache HTTP 服务器中添加 TLS 加密 复制链接链接已复制到粘贴板!
您可以通过安装 mod_ssl 来保护 Web 流量。将虚拟主机配置为使用 IdM 发布的私钥和证书,以使用子 CA 凭据为域启用加密 HTTPS 连接。
先决条件
- Apache HTTP 服务器已安装并运行。
私钥存储在
/etc/pki/tls/private/example.com.key文件中。有关创建私钥和证书签名请求(CSR)的详细信息,以及如何从证书颁发机构(CA)请求证书,请参阅您的 CA 文档。
-
TLS 证书存储在
/etc/pki/tls/certs/example.com.crt文件中。如果您使用不同的路径,请按照流程的对应步骤操作。 -
CA 证书存储在
/etc/pki/tls/certs/ca.crt文件中。如果您使用不同的路径,请按照流程的对应步骤操作。 - 客户端和 Web 服务器会将服务器的主机名解析为 Web 服务器的 IP 地址。
-
如果服务器运行 Red Hat Enterprise Linux 10 (RHEL)和联邦信息处理标准(FIPS)模式,客户端必须支持
扩展主 Secret(EMS)扩展或使用传输层安全(TLS) 1.3。没有 EMS 的 TLS 1.2 连接会失败。详情请查看红帽知识库解决方案 TLS 扩展"Extended Master Secret "。
流程
安装
mod_ssl软件包:# dnf install mod_ssl编辑
/etc/httpd/conf.d/ssl.conf文件,并将以下设置添加到<VirtualHost _default_:443>指令中:设置服务器名称:
ServerName example.com服务器名称必须与证书的
Common Name字段中设置的条目匹配。可选: 如果证书在
Subject Alt Names(SAN)字段中包含额外的主机名,您可以配置mod_ssl来为这些主机名提供 TLS 加密。要配置此功能,请添加具有对应名称的ServerAliases参数:ServerAlias www.example.com server.example.com设置到私钥、服务器证书和 CA 证书的路径:
SSLCertificateKeyFile "/etc/pki/tls/private/example.com.key" SSLCertificateFile "/etc/pki/tls/certs/example.com.crt" SSLCACertificateFile "/etc/pki/tls/certs/ca.crt"
出于安全考虑,配置成只有
root用户才可以访问私钥文件:# chown root:root /etc/pki/tls/private/example.com.key# chmod 600 /etc/pki/tls/private/example.com.key警告如果未授权用户访问私钥,撤销证书,创建一个新私钥,然后请求新证书。否则,TLS 连接就不再安全。
-
打开 Web 浏览器,并连接到
https://example.com。
-
打开 Web 浏览器,并连接到
28.7. 在 Apache HTTP 服务器中设置支持的 TLS 协议版本 复制链接链接已复制到粘贴板!
默认情况下,RHEL 上的 Apache HTTP 服务器使用系统范围的加密策略来定义安全默认值,这些值也与最新的浏览器兼容。例如,DEFAULT 策略定义了在 Apache HTTP 服务器中只启用 TLSv1.2 和 TLSv1.3 协议版本。
您可以手动配置 Apache HTTP 服务器支持的 TLS 协议版本。在以下情况下,您需要在环境中只启用特定的 TLS 协议版本:
-
如果您的环境要求客户端也可以使用弱
TLS1(TLSv1.0)或TLS1.1协议。 -
如果你想将 Apache 配置为只支持
TLSv1.2或TLSv1.3协议。
先决条件
- 您已在服务器上启用了传输层安全(TLS)加密。
-
如果服务器运行 Red Hat Enterprise Linux 10 (RHEL)和联邦信息处理标准(FIPS)模式,客户端必须支持
扩展主 Secret(EMS)扩展或使用传输层安全(TLS) 1.3。没有 EMS 的 TLS 1.2 连接会失败。详情请查看红帽知识库解决方案 TLS 扩展"Extended Master Secret "。
流程
编辑
/etc/httpd/conf/httpd.conf文件,并添加您要为其设置TLSv1.3协议版本的 <VirtualHost> 指令:SSLProtocol -All TLSv1.3重启
httpd服务:# systemctl restart httpd
验证
验证对
TLSv1.3的支持:# openssl s_client -connect example.com:443 -tls1_3验证对
TLSv1.2的支持:# openssl s_client -connect example.com:443 -tls1_2如果服务器不支持该协议,命令会返回一个错误:
140111600609088:error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:ssl/record/rec_layer_s3.c:1543:SSL alert number 70- 可选:重复用于其他 TLS 协议版本的命令。
28.8. 在 Apache HTTP 服务器上设置支持的密码 复制链接链接已复制到粘贴板!
默认情况下,Apache HTTP 服务器使用系统范围的加密策略来定义安全默认值,这些值也与最新的浏览器兼容。有关系统范围的加密策略允许的密码列表,请查看 /etc/crypto-policies/back-ends/openssl.config 文件。
您可以手动配置 Apache HTTP 服务器支持的密码。
先决条件
- 您已在服务器上启用了传输层安全(TLS)加密。
流程
安装
nmap软件包:# dnf install nmap编辑
/etc/httpd/conf/httpd.conf文件,并将SSLCipherSuite参数添加到您要为其设置 TLS密码的 <VirtualHost> 指令中:SSLCipherSuite "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:!SHA1:!SHA256"这个示例只启用
EECDH+AESGCM、EDH+AESGCM、AES256+EECDH和AES256+EDH密码,并禁用所有使用SHA1和SHA256消息身份验证代码(MAC)的密码。重启
httpd服务:# systemctl restart httpd
验证
显示支持的密码:
# nmap --script ssl-enum-ciphers -p 443 example.com... PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ecdh_x25519) - A | TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (ecdh_x25519) - A ...
28.9. 配置 TLS 客户端证书身份验证 复制链接链接已复制到粘贴板!
要只允许经过身份验证的用户访问 web 服务器上的资源,请为 /var/www/html/Example/ 目录配置客户端证书身份验证。
如果 Apache HTTP 服务器使用传输层安全(TLS) 1.3 协议,一些客户端需要额外的配置。例如,在 Mozilla Firefox 中,将 about:config 菜单中的 security.tls.enable_post_handshake_auth 参数设置为 true。
先决条件
- 您已在服务器上启用了 TLS 加密。
流程
编辑
/etc/httpd/conf/httpd.conf文件来配置客户端身份验证:<Directory "/var/www/html/Example/"> SSLVerifyClient require </Directory>SSLVerifyClient 要求将服务器配置为需要客户端证书,然后客户端才能访问/var/www/html/Example/目录中的内容。重启
httpd服务:# systemctl restart httpd
验证
在没有客户端身份验证的情况下访问
https://example.com/Example/URL:$ curl \https://example.com/Example/curl: (56) OpenSSL SSL_read: error:1409445C:SSL routines:ssl3_read_bytes:tlsv13 alert certificate required, errno 0这个错误表示 web 服务器需要客户端证书验证。
通过传递客户端私钥和证书以及 CA 证书,通过客户端身份验证访问相同的 URL:
$ curl --cacert ca.crt --key client.key --cert client.crt https://example.com/Example/如果请求成功,
curl工具会显示存储在/var/www/html/Example/目录中的index.html文件。
28.10. 从 IdM 子 CA 请求新的用户证书,并将其导出到客户端 复制链接链接已复制到粘贴板!
作为身份管理(IdM)管理员,您可以配置在 IdM 客户端上运行的 Web 服务器,以请求使用 Web 浏览器访问服务器的用户对特定 IdM 子 CA 发布的证书进行身份验证。按照以下流程,从特定的 IdM 子 CA 请求用户证书,并将证书和对应的私钥导出到用户希望使用 Web 浏览器访问 Web 服务器的主机上。之后,将证书和私钥导入到浏览器。
流程
可选:创建一个新目录,如
~/certdb/,并使其成为一个临时证书数据库。当系统提示时,创建一个 NSS 证书数据库密码来加密后续步骤中生成的证书的密钥:# mkdir ~/certdb/# certutil -N -d ~/certdb/ Enter a password which will be used to encrypt your keys. The password should be at least 8 characters long, and should contain at least one non-alphabetic character. Enter new password: Re-enter password:创建证书签名请求(CSR),并将输出重定向到文件。例如,要为
IDM.EXAMPLE.COM域中的idm_user用户创建一个名称为certificate_request.csr的4096位 CSR,请将证书私钥的昵称设为idm_user以便于查找,并将主题设为CN=idm_user,O=IDM.EXAMPLE.COM:# certutil -R -d ~/certdb/ -a -g 4096 -n idm_user -s "CN=idm_user,O=IDM.EXAMPLE.COM" > certificate_request.csr提示时,输入与您在使用
certutil创建临时数据库时输入的相同的密码。然后继续随机输入,直到被告知停止:Enter Password or Pin for "NSS Certificate DB": A random seed must be generated that will be used in the creation of your key. One of the easiest ways to create a random seed is to use the timing of keystrokes on a keyboard. To begin, type keys on the keyboard until this progress meter is full. DO NOT USE THE AUTOREPEAT FUNCTION ON YOUR KEYBOARD! Continue typing until the progress meter is full:将证书请求文件提交到服务器。指定要与新发布的证书关联的 Kerberos 主体、存储证书的输出文件,以及可选的证书配置集。指定您要签发证书的 IdM 子 CA。例如,要为
idm_user@IDM.EXAMPLE.COM主体从webclient-ca获取IECUserRoles配置集的证书(这个配置集带有添加了用户角色扩展),并将证书保存到~/idm_user.pem文件中:# ipa cert-request certificate_request.csr --principal=idm_user@IDM.EXAMPLE.COM --profile-id=IECUserRoles --ca=webclient-ca --certificate-out=~/idm_user.pem将证书添加到 NSS 数据库。使用
-n选项设置与之前创建 CSR 时使用的相同的昵称,以便证书与 NSS 数据库中的私钥匹配。-t选项设置信任级别。详情请查看 certutil(1)man page。-i选项指定输入证书文件。例如,要将带有在~/idm_user.pem文件中定义的idm_user别名的证书添加到~/certdb/数据库的 NSS数据库:# certutil -A -d ~/certdb/ -n idm_user -t "P,," -i ~/idm_user.pem验证 NSS 数据库中的密钥是否没有将
(orphan)显示为其昵称。例如,要验证存储在~/certdb/数据库中的证书不是孤立的:# certutil -K -d ~/certdb/< 0> rsa 5ad14d41463b87a095b1896cf0068ccc467df395 NSS Certificate DB:idm_user使用
pk12util命令将证书从 NSS 数据库导出为 PKCS12 格式。例如,要将来自/root/certdbNSS 数据库的带有idm_user别名的证书导出到~/idm_user.p12文件中:# pk12util -d ~/certdb -o ~/idm_user.p12 -n idm_userEnter Password or Pin for "NSS Certificate DB": Enter password for PKCS12 file: Re-enter password: pk12util: PKCS12 EXPORT SUCCESSFUL将证书传输到您要在其上为
idm_user启用证书身份验证的主机:# scp ~/idm_user.p12 idm_user@client.idm.example.com:/home/idm_user/在传输了证书的主机上,出于安全原因使 'pkcs12 文件被 'other' 组无法访问的目录:
# chmod o-rwx /home/idm_user/出于安全考虑,请从服务器中删除临时 NSS 数据库和 .pkcs12 文件:
# rm ~/certdb/# rm ~/idm_user.p12
第 30 章 使用 IdM Healthcheck 验证证书 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具识别身份管理(IdM)服务器上由 certmonger 工具维护的证书问题。
30.1. IdM 证书健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括多个测试,用于验证身份管理(IdM)中 certmonger 维护的证书的状态。
有关 certmonger 的详情,请参阅 使用 certmonger 获取服务的 IdM 证书。
此测试套件检查证书过期、验证、信任和其他配置。Healthcheck 可以为同一底层问题报告多个错误。
您可以在 ipa-healthcheck --list-sources 命令的输出中的 ipahealthcheck.ipa.certs 源中找到这些证书测试。
- IPACertmongerExpirationCheck
此测试检查
certmonger 中的过期时间。如果报告错误,证书已过期。
如果出现警告,则证书将很快过期。默认情况下,如果测试在证书过期之前运行了 28 天或更少时间,则会出现一个警告。
您可以在
/etc/ipahealthcheck/ipahealthcheck.conf文件中配置天数。打开文件后,更改default部分中的cert_expiration_days选项。注意Certmonger加载并维护自己的证书过期视图。此检查不会验证磁盘中的证书。- IPACertfileExpirationCheck
此测试会检查是否已为证书文件或 NSS 数据库配置了正确的访问权限。此测试还会检查过期情况。因此,请仔细阅读错误或警告输出中的
msg属性。消息指定了问题。注意此测试会检查磁盘中的证书。如果证书缺失或不可读,健康检查会返回一个错误。
- IPACertNSSTrust
- 此测试分析对存储在 NSS 数据库中的证书的信任。对于 NSS 数据库中的预期跟踪的证书,Healthcheck 会将信任与预期值进行比较,并在不匹配时引发一个错误。
- IPANSSChainValidation
-
此测试会验证 NSS 证书的证书链。测试执行
certutil -V -u V -e -d [dbdir] -n命令。 - IPAOpenSSLChainValidation
此测试会验证 OpenSSL 证书的证书链。具体来说,健康检查执行以下 OpenSSL 命令:
openssl verify -verbose -show_chain -CAfile /etc/ipa/ca.crt [cert file]- IPARAAgent
-
此测试将磁盘上的证书与
uid=ipara,ou=People,o=ipaca中 LDAP 中的等效记录进行比较。 - IPACertRevocation
-
此测试验证
certmonger维护的证书是否还未被撤销。 - IPACertmongerCA
此测试验证
certmonger证书授权机构(CA)配置。IdM 无法在没有 CA 的情况下发布证书。Certmonger维护一组 CA 帮助程序。名为IPA的 CA 通过 IdM 为主机或服务发布证书,作为主机或用户主体进行身份验证。还有续订 CA 子系统证书的
dogtag-ipa-ca-renew-agent和dogtag-ipa-ca-renew-agent-reuse。
30.2. 使用 Healthcheck 工具处理证书 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具运行独立手动测试,以检查身份管理(IdM)服务器上的证书。
先决条件
-
您有
root特权。
流程
要运行证书测试,请输入:
# ipa-healthcheck --source=ipahealthcheck.ipa.certs--source=ipahealthcheck.ipa.certs选项确保 IdM Healthcheck 仅执行certmonger证书测试。成功测试会显示空括号:
[]失败的测试会显示以下输出:
{ "source": "ipahealthcheck.ipa.certs", "check": "IPACertfileExpirationCheck", "result": "ERROR", "kw": { "key": 1234, "dbdir": "/path/to/nssdb", "error": [error], "msg": "Unable to open NSS database '/path/to/nssdb': [error]" } }在打开 NSS 数据库时,这个
IPACertfileExpirationCheck测试失败。
注意当尝试检查问题时,在所有 IdM 服务器上运行此 Healthcheck 测试套件。
第 31 章 使用 IdM Healthcheck 验证系统证书 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具识别身份管理(IdM)服务器上系统证书的问题。
31.1. 系统证书健康检查测试 复制链接链接已复制到粘贴板!
Healthcheck 工具包括几个验证系统或 Dogtag、证书的测试。
您可以在 ipa-healthcheck --list-sources 命令的输出中的 ipahealthcheck.dogtag.ca 源下找到所有与证书相关的测试。
- DogtagCertsConfigCheck
此测试将其 NSS 数据库中的 CA(证书授权机构)证书与存储在
CS.cfg中的相同值进行比较。如果不匹配,CA 无法启动。具体来说,它会检查:
-
auditSigningCert cert-pki-caagainstca.audit_signing.cert -
ocspSigningCert cert-pki-caagainstca.ocsp_signing.cert -
caSigningCert cert-pki-caagainstca.signing.cert -
subsystemCert cert-pki-caagainstca.subsystem.cert -
针对
ca.sslserver.cert的Server-Cert cert-pki-ca
如果安装了 Key Recovery Authority (KRA),它也会检查:
-
transportCert cert-pki-kraagainstca.connector.KRA.transportCert
-
- DogtagCertsConnectivityCheck
此测试验证连接性。此测试等同于检查以下内容的
ipa cert-show 1命令:- Apache 中的 PKI 代理配置
- IdM 能够找到 CA
- RA 代理客户端证书
- CA 回复请求的正确性
测试验证是否可以执行
ipa cert-show命令,以及是否从 IdM CA 返回预期的响应 - 证书本身或not found响应。
31.2. 使用 Healthcheck 进行系统证书 复制链接链接已复制到粘贴板!
您可以使用 Healthcheck 工具运行独立手动测试,以检查身份管理(IdM)服务器上的系统证书。
流程
要运行系统证书测试,请输入:
# ipa-healthcheck --source=ipahealthcheck.dogtag.ca--source=ipahealthcheck.dogtag.ca选项确保 Healthcheck 仅执行证书测试。测试成功示例:
{ "source: ipahealthcheck.dogtag.ca", "check: DogtagCertsConfigCheck", "result: SUCCESS", "uuid: 9b366200-9ec8-4bd9-bb5e-9a280c803a9c", "when: 20191008135826Z", "duration: 0.252280", "kw:" { "key": "Server-Cert cert-pki-ca", "configfile": "/var/lib/pki/pki-tomcat/conf/ca/CS.cfg" } }测试失败的示例:
{ "source: ipahealthcheck.dogtag.ca", "check: DogtagCertsConfigCheck", "result: CRITICAL", "uuid: 59d66200-1447-4b3b-be01-89810c803a98", "when: 20191008135912Z", "duration: 0.002022", "kw:" { "exception": "NSDB /etc/pki/pki-tomcat/alias not initialized", } }注意当尝试查找问题时,在所有 IdM 服务器上运行证书测试。
第 32 章 了解 IdM 内部使用的证书 复制链接链接已复制到粘贴板!
您可以安装带有集成证书颁发机构(CA)或没有 CA 的身份管理(IdM)服务器。访问和管理 IdM 所需的证书会根据您的 CA 是否是集成的而进行不同的管理:
-
集成的 CA:证书由
certmonger自动创建和跟踪。certmonger会自动续订证书,确保 IdM 服务持续有效。 - 没有 CA:从第三方授权请求证书。在这种情况下,您需要监控其过期,并确保它们被续订,以确保 IdM 服务的持续有效。
32.1. 关于 IdM 中的内部证书 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux Identity Management (IdM)使用通过网络访问的许多服务,包括 LDAP 服务器和 HTTP 服务器。您可以使用 SSL/TLS 端口访问这些服务,其需要服务器证书。在安装 IdM 服务器的过程中需要 HTTP 和 LDAP 服务器证书。
您可以根据您安装和配置 IdM 的方式以多种方式获取证书:
带有可以由外部 CA 自签名或签名的集成的 CA : IdM 为 IdM 管理的用户、主机和服务发布所有证书,您不需要提供证书文件。
certmonger自动监控证书的到期日期,并在需要时自动续订。带有外部签名的 CA:安装是一个多个步骤过程。
-
您需要使用
--external-ca选项运行安装来生成 CSR。 - 将 CSR 提交给外部 CA,并以 PEM 文件或 Base64 编码证书的形式检索发布的证书和 CA 证书链。
再次运行 IdM 服务器安装,指定新发布的 CA 证书和 CA 链文件的位置和名称。您的 IdM 证书颁发机构被配置为外部 CA 的子 CA,这个子 CA 发布所需的 HTTP 和 LDAP 服务器证书。
certmonger自动监控证书的到期日期,并在需要时自动续订。
-
您需要使用
没有 CA:要求您从第三方认证机构请求以下证书:
- LDAP 服务器证书
- Apache 服务器证书
- PKINIT 证书
发布 LDAP 和 Apache 服务器证书的 CA 完整 CA 证书链
这些证书不会被
certmonger跟踪,管理员负责在过期日期前续订证书。
32.2. IdM 内部的证书 复制链接链接已复制到粘贴板!
您的内部证书可以取决于您是如何安装 IdM 的,以及该安装中包含了哪些组件。根据该安装,您可能在您的系统上存储了以下证书。
IdM CA 证书
IdM 使用 IdM CA 证书来签名所有其他证书。请注意,它没有出现在 CA-less 安装中。
| caSigningCert | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
|
| 发布者 | 由外部 CA 自签名或签名 |
| 主题 |
请注意,这是默认值,但可以在 IdM 服务器安装过程中进行自定义。 |
| 其他信息 |
必须具有 |
外部 CA 证书
如果您使用外部 CA,则 IdM 中必须有外部 CA 链以验证 IdM 证书。对于无 CA 的安装,外部 CA 证书必须存在于不同的位置,包括 LDAP 和 /etc/ipa/ca.crt 目录中,以验证 HTTPD 和 LDAP 证书。
您不必手动将外部 CA 证书添加到所有所需位置,因为在安装过程中会自动完成。但是,如果外部 CA 证书在以后更新了,您应该遵循 使用外部 CA 续订 IdM CA 续订服务器证书 中的步骤,以确保新证书被添加到需要它的每个地方。
| 外部证书 | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
|
| 发布者 | 外部 CA 签名的 |
| 主题 | 外部 CA 主题 |
| 其他信息 |
您必须在链中有 DER 格式的所有证书,您必须将它们导入到 LDAP 中。在 NSS 数据库中必须有 |
子系统 CA 证书
此证书用于在写入 LDAP 数据库时向 LDAP 服务器进行身份验证。无 CA 的安装中没有此证书。
| subsystemCert | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
|
| 发布者 | IPA CA |
| 主题 |
|
| 其他信息 |
注意 LDAP 中的序列号和 blob 不匹配。例如, |
审计签名证书
此证书用于签名审计日志。请注意,它没有出现在 CA-less 安装中。
| auditSigningCert | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
没有专用的 LDAP 位置,通过 |
| 发布者 | IPA CA |
| 主题 |
|
| 其他信息 |
在 NSS 数据库中必须有 |
OCSP 签名证书
此证书用于提供在线证书状态协议(OCSP)服务。请注意,它没有出现在 CA-less 安装中。
| ocspSigningCert | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
没有专用的 LDAP 位置,通过 |
| 发布者 | IPA CA |
| 主题 |
|
Tomcat servlet 证书
当客户端联系 PKI 时,使用此证书。请注意,这个服务器证书特定于主机,它不会出现在 CA-less 安装中。
| server-Cert | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 | |
| 发布者 | IPA CA |
| 主题 | CN=$HOSTNAME,O=REALM.NAME |
注册颁发机构证书
certmonger 以及 IdM 框架用来认证到 PKI 的证书。例如,如果您运行 ipa cert-show 1,则 HTTPD 与 PKI 进行通信,并使用此证书进行身份验证。在 CA-less 安装中不存在。
| RA 代理 | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 |
|
| 发布者 | IPA CA |
| 主题 |
|
| 其他信息 |
注意 LDAP 中的序列号和 blob 不匹配。例如, |
HTTPD 前端证书
用于 HTTPD 前端的证书,以保护到 Web UI 和 API 的连接。必须存在。
| HTTPD | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 | |
| 发布者 | 无 CA 安装中的 IPA CA 或外部 CA |
| 主题 |
|
| 证书必须包含的扩展 |
|
LDAP TLS 和 STARTTLS 证书
用于 LDAP TLS 和 STARTTLS 连接的证书。必须存在。
| LDAP | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 | |
| 发布者 | 无 CA 安装中的 IPA CA 或外部 CA |
| 主题 |
|
| 证书必须包含的扩展 |
|
KDC 证书
用于 IdM KDC 的 PKINIT 的证书。
| KDC | 描述 |
|---|---|
| 文件系统位置 |
|
| LDAP 位置 | |
| 发布者 | 无 CA 安装中的 IPA CA 或外部 CA |
| 主题 |
|
| 其他信息 |
必须有扩展的密钥用法 |
32.3. IdM 内部证书续订过程 复制链接链接已复制到粘贴板!
默认情况下,certmonger 跟踪内部证书,触发续订并请求 IdM CA 发布新证书。
如果您使用外部 CA,且您的内部证书由这个 CA 发布,则它们不会自动续订。在这种情况下,您应该监控证书的到期日期,以确保在证书过期前续订它们。续订过程会非常耗时,如果您没有仔细跟踪到期日期,您的证书将过期,某些服务将不再可用。
如果您的内部 Red Hat Enterprise Linux Identity Management (IdM)证书过期了,则 IdM 无法启动。
IdM CA 续订服务器在过期日期前 28 天续订共享的内部证书。certmonger 会触发此续订,并将新证书上传到 cn=<nickname>,cn=ca_renewal,cn=ipa,cn=etc,$BASEDN。certmonger 还触发其他 IdM 服务器上的续订进程,但它是在非 CA 续订服务器上执行的,它不会请求新证书,但会从从 LDAP 下载证书。请注意,Server-Cert cert-pki-ca、HTTP、LDAP 和 PKINIT 证书特定于每个副本,在主题中包含主机名。
如果您在证书过期前使用 getcert 手动续订共享证书,则不会在其他副本上触发续订进程,您必须在其他副本上运行 getcert,来执行从 LDAP 下载更新的证书。