2.2. 使用 Ansible 为智能卡验证配置 IdM 服务器
您可以使用 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.14 或更高版本。
-
您已在 Ansible 控制器上安装了
ansible-freeipa
软件包。 - 示例假定在 ~/MyPlaybooks/ 目录中,您已创建了一个带有 IdM 服务器的完全限定域名(FQDN)的 Ansible 清单文件。
-
示例假定 secret.yml Ansible vault 存储了
ipaadmin_password
。
-
目标节点,也就是在其上执行
ansible-freeipa
模块的节点,是 IdM 域的一部分,作为 IdM 客户端、服务器或副本。
步骤
如果您的 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 证书的路径按以下顺序:
- 根 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.yml
playbook:--- - name: Playbook to set up smart card authentication for an IdM server hosts: ipaserver become: true roles: - role: ipasmartcard_server state: present
- 保存该文件。
运行 Ansible playbook。指定 playbook 文件、存储保护 secret.yml 文件的密码,以及清单文件:
$ ansible-playbook --vault-password-file=password_file -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 示例