2.2. 使用 Ansible 为智能卡验证配置 IdM 服务器
您可以使用 Ansible 为由身份管理(IdM) CA 域的证书颁发机构(CA)发布的用户启用智能卡验证。要做到这一点,您必须获取以下证书,以便在使用 ipasmartcard_server
ansible-freeipa
角色脚本运行 Ansible playbook 时使用这些证书:
- 已直接为 <EXAMPLE.ORG> CA 签发证书的 root CA 的证书,或通过一个或多个子 CA 签发。您可以从认证机构发布证书的网页下载证书链。详情请参阅 配置浏览器中的第 4 步以启用证书身份验证。
-
IdM CA 证书。您可以从任何 IdM CA 服务器上的
/etc/ipa/ca.crt
文件中获取 CA 证书。 - 在 <EXAMPLE.ORG> CA 和 IdM CA 之间中间所有 CA 的证书。
先决条件
-
您有访问 IdM 服务器的
root
权限。 -
您需要知道 IdM
admin
密码。 - 您有 root CA 证书、IdM CA 证书和所有中间 CA 证书。
您已配置了符合以下要求的 Ansible 控制节点:
- 您使用 Ansible 版本 2.8 或更高版本。
- 您已安装 ansible-freeipa 软件包。
- 在 ~/MyPlaybooks/ 目录中,您已创建了带有您要配置智能卡访问的 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
流程
如果您的 CA 证书存储在不同格式的文件中,如
DER
,请将其转换为PEM
格式:# openssl x509 -in <filename>.der -inform DER -out <filename>.pem -outform PEM
IdM 证书颁发机构证书采用
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 的证书路径按以下顺序排列:
- root 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=SomeADMINpassword 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.yml
playbook:--- - name: Playbook to set up smart card authentication for an IdM server hosts: ipaserver become: true roles: - role: ipasmartcard_server state: present
- 保存该文件。
运行指定 playbook 文件和清单文件的 Ansible playbook:
$ ansible-playbook -v -i inventory install-smartcard-server.yml
ipasmartcard_server
Ansible 角色执行以下操作:- 它配置 IdM Apache HTTP 服务器。
- 它在 KDC(Key Distribution Center)中启用 PKINIT(Public Key Cryptography for Initial Authentication in Kerberos)。
- 它将 IdM Web UI 配置为接受智能卡授权请求。
另外,如果发布用户证书的证书颁发机构不提供任何在线证书状态协议(OCSP)响应程序,您可能需要禁用对 IdM Web UI 身份验证的 OCSP 检查:
以
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 setup smartcard for IPA server and replicas
hosts: ipacluster
[...]
其他资源
-
在
/usr/share/doc/ansible-freeipa/playbooks/
目录中使用ipasmartcard_server
角色的 playbook 示例