第 2 章 为 IdM 中智能卡验证配置 ADCS 发布的证书

这种情境描述了以下情况:

  • 您的部署基于身份管理(IdM)和 Active Directory(AD)间的跨林信任。
  • 您需要允许将其帐户存储在 AD 中的用户使用智能卡验证。
  • 证书创建并存储在 Active Directory 证书服务(ADCS)中。

配置将按以下步骤完成:

先决条件

  • 已安装身份管理(IdM)和 Active Directory(AD)信任

    详情请参阅在 IdM 和 AD 间安装信任

  • 已安装活跃目录证书服务(ADCS),并生成用户的证书

2.1. 智能卡验证

智能卡是一个物理设备,它可使用保存在卡中的证书提供个人验证。个人验证意味着,您可以象使用用户密码一样使用智能卡。

您可以以私钥和证书的形式在智能卡中存储用户凭证,并使用特殊软件和硬件访问它们。您将智能卡放在读卡器或者 USB 套接字中,并为智能卡提供 PIN 代码,而不是提供您的密码。

您可以配置在特定 IdM 客户端中希望智能卡验证如何工作:

  • 用户可以使用用户名和密码或者智能卡进行身份验证
  • 用户可以使用智能卡进行验证,并不允许使用密码进行验证
  • 用户可以使用智能卡在删除时使用功能锁定来注销,且不允许密码

身份管理(IdM)支持智能卡验证:

注意

如果要开始使用智能卡验证,请参阅RHEL8 中的硬件要求:智能卡支持

2.2. 信任配置和证书使用量所需的 Windows 服务器设置

本节总结在 Windows 服务器上必须配置的内容:

  • 已安装 Active Directory 证书服务(ADCS)
  • 创建证书颁发机构
  • [可选] 如果您使用证书颁发机构 Web 注册,则必须配置互联网信息服务(IIS)

导出证书:

  • 键必须有 2048 位或更多位
  • 包括一个私钥
  • 您需要一个以下格式的证书:个人信息交换 - PKCS #12(.PFX)

    • 启用证书隐私

2.3. 使用 sftp 从 Active Directory 复制证书

为了可以使用智能卡验证功能,您需要复制以下证书文件:

  • CER 格式的 root CA 证书:adcs-winserver-ca.cer 在您的 IdM 服务器中。
  • 带有 PFX 格式的一个私有密钥的用户证书:aduser1.pfx 在 IdM 客户端中。
注意

这个过程预期 SSH 访问是允许的。如果 SSH 不可用,用户必须将文件从 AD 服务器复制到 IdM 服务器和客户端。

流程

  1. IdM 服务器 连接并将 adcs-winserver-ca.cer 根证书复制到 IdM 服务器中:

    root@idmserver ~]# sftp Administrator@winserver.ad.example.com
    Administrator@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
  2. IdM 客户端 连接并将 aduser1.pfx 用户证书复制到客户端:

    [root@client1 ~]# sftp Administrator@winserver.ad.example.com
    Administrator@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 服务器中,用户证书保存在客户端机器上。

2.4. 使用 ADCS 证书为智能卡验证配置 IdM 服务器和客户端

您必须配置 IdM(Identity Management)服务器和客户端以便在 IdM 环境中使用智能卡验证。IdM 包括进行所有必要的更改的 ipa-advise 脚本:

  • 安装所需的软件包
  • 它配置 IdM 服务器和客户端
  • 将 CA 证书复制到预期的位置

您可以在 IdM 服务器中运行 ipa-advise

这个步骤描述了:

  • 在 IdM 服务器中:准备 ipa-advise 脚本来配置您的 IdM 服务器进行智能卡验证。
  • 在 IdM 服务器中:准备 ipa-advise 脚本来配置您的 IdM 客户端进行智能卡验证。
  • 在 IdM 服务器中:使用 AD 证书应用 IdM 服务器上的 ipa-advise 服务器脚本。
  • 将客户端脚本移动到 IdM 客户端机器中。
  • 在 IdM 客户端中:使用 AD 证书应用 IdM 客户端 ipa-advise 客户端脚本。

先决条件

  • 证书已复制到 IdM 服务器。
  • 获取 Kerberos 票据。
  • 以具有管理权限的用户身份登录。

流程

  1. 在 IdM 服务器中,使用 ipa-advise 脚本配置客户端:

    [root@idmserver ~]# ipa-advise config-client-for-smart-card-auth > sc_client.sh
  2. 在 IdM 服务器中,使用 ipa-advise 脚本配置服务器:

    [root@idmserver ~]# ipa-advise config-server-for-smart-card-auth > sc_server.sh
  3. 在 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 配置为接受智能卡授权请求。
  4. sc_client.sh 脚本复制到客户端系统中:

    [root@idmserver ~]# scp sc_client.sh root@client1.idm.example.com:/root
    Password:
    sc_client.sh                  100%  2857   1.6MB/s   00:00
  5. 将 Windows 证书复制到客户端系统中:

    [root@idmserver ~]# scp adcs-winserver-ca.cer root@client1.idm.example.com:/root
    Password:
    adcs-winserver-ca.cer                 100%  1254   952.0KB/s   00:00
  6. 在客户端系统中运行客户端脚本:

    [root@idmclient1 ~]# sh -x sc_client.sh adcs-winserver-ca.cer

CA 证书以正确格式安装在 IdM 服务器和客户端系统中,下一步是将用户证书复制到智能卡本身。

2.5. 转换 PFX 文件

在将 PFX(PKCS#12)文件保存到智能卡前,您必须:

  • 将文件转换为 PEM 格式
  • 将私钥和证书提取到两个不同的文件

先决条件

  • PFX 文件被复制到 IdM 客户端机器中。

流程

  1. 在 IdM 客户端中,采用 PEM 格式:

    [root@idmclient1 ~]# openssl pkcs12 -in aduser1.pfx -out aduser1_cert_only.pem -clcerts -nodes
    Enter Import Password:
  2. 将密钥提取到单独的文件中:

    [root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -nocerts -out adduser1.pem > aduser1.key
  3. 将公共证书提取到单独的文件中:

    [root@idmclient1 ~]# openssl pkcs12 -in adduser1.pfx -clcerts -nokeys -out aduser1_cert_only.pem > aduser1.crt

此时,您可以将 aduser1.keyaduser1.crt 保存到智能卡中。

2.6. 安装用来管理和使用智能卡的工具

要配置智能卡,您需要一些工具来生成证书并将其保存在智能卡中。

您必须:

  • 安装可帮助您管理证书的 gnutls-utils 软件包。
  • 安装 opensc 软件包,它提供一组库和工具来使用智能卡。
  • 启动与智能卡读取器沟通的 pcscd 服务。

流程

  1. 安装 openscgnutls-utils 软件包:

    # dnf -y install opensc gnutls-utils
  2. 启动 pcscd 服务。

    # systemctl start pcscd

验证 pcscd 服务是否正在运行。

2.7. 在智能卡中存储证书

本节论述了使用 pkcs15-init 工具配置智能卡,帮助您配置:

  • 擦除智能卡
  • 设置新的 PIN 和可选的 PIN Unblocking Keys(PUKs)
  • 在智能卡上创建新插槽
  • 在插槽存储证书、私钥和公钥
  • 锁定智能卡设置(有些智能卡需要这种类型)

先决条件

  • 已安装 opensc 软件包,其中包括 pkcs15-init 工具。

    详情请查看安装用于管理和使用智能卡的工具

  • 该卡插入读卡器并连接到计算机。
  • 您有可保存在智能卡中的私钥、公钥和证书。在此过程中,testuser.keytestuserpublic.keytestuser.crt 是用于私钥、公钥和证书的名称。
  • 您当前的智能卡用户 PIN 和 Security Officer PIN(SO-PIN)

流程

  1. 擦除智能卡并使用您的 PIN 验证自己:

    $ pkcs15-init --erase-card --use-default-transport-keys
    Using reader with a card: Reader name
    PIN [Security Officer PIN] required.
    Please enter PIN [Security Officer PIN]:

    这个卡已经被清除。

  2. 初始化智能卡,设置您的用户 PIN 和 PUK,以及您的安全响应 PIN 和 PUK:

    $ pkcs15-init --create-pkcs15 --use-default-transport-keys \
        --pin 963214 --puk 321478 --so-pin 65498714 --so-puk 784123
    Using reader with a card: Reader name

    pcks15-init 工具在智能卡上创建新插槽。

  3. 为插槽设置标签和验证 ID:

    $ pkcs15-init --store-pin --label testuser \
        --auth-id 01 --so-pin 65498714 --pin 963214 --puk 321478
    Using reader with a card: Reader name

    该标签设置为人类可读值,本例中为 testuserauth-id 必须是两个十六进制值,在本例中将其设置为 01

  4. 在智能卡的新插槽中存储并标记私钥:

    $ pkcs15-init --store-private-key testuser.key --label testuser_key \
        --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注意

    在存储您的私钥和证书时,您为 --id 指定的值必须相同。如果没有为 --id 指定值,则更复杂的值由工具计算,因此更易于定义您自己的值。

  5. 在智能卡上的新插槽中存储并标记该证书:

    $ pkcs15-init --store-certificate testuser.crt --label testuser_crt \
        --auth-id 01 --id 01 --format pem --pin 963214
    Using reader with a card: Reader name
  6. (可选)在智能卡上新插槽中保存并标记公钥:

    $ pkcs15-init --store-public-key testuserpublic.key
        --label testuserpublic_key --auth-id 01 --id 01 --pin 963214
    Using reader with a card: Reader name
    注意

    如果公钥与私钥和/或证书对应,您应该指定与私钥和/或证书相同的 ID。

  7. (可选)有些智能卡要求您通过锁定设置来完善卡:

    $ pkcs15-init -F

    此时您的智能卡在新创建的插槽中包含证书、私钥和公钥。您还创建了您的用户 PIN 和 PUK,以及安全响应 PIN 和 PUK。

2.8. 在 sssd.conf 中配置超时

使用智能卡证书进行身份验证的时间可能比 SSSD 使用的默认超时时间更长。超时时间可能是由以下原因造成的:

  • 阅读速度较慢
  • 将物理设备转发到虚拟环境中
  • 保存在智能卡中的证书太多
  • 如果使用 OCSP 验证证书,则 OCSP(无线证书状态协议)响应程序响应较慢

在这种情况下,您可以在 sssd.conf 文件中延长以下超时时间,例如延长到 60 秒:

  • p11_child_timeout
  • krb5_auth_timeout

先决条件

  • 您必须以 root 身份登录。

流程

  1. 打开 sssd.conf 文件:

    [root@idmclient1 ~]# vim /etc/sssd/sssd.conf
  2. 更改 p11_child_timeout 的值:

    [pam]
    p11_child_timeout = 60
  3. 更改 krb5_auth_timeout 的值:

    [domain/IDM.EXAMPLE.COM]
    krb5_auth_timeout = 60
  4. 保存设置。

现在,与智能卡的交互可以在有超时验证失败前运行 1 分钟(60 秒)。

2.9. 为智能卡验证创建证书映射规则

如果要为在 AD(Active Directory)和 IdM(Identity Management)中有帐户的用户使用一个证书,您可以在 IdM 服务器上创建证书映射规则。

创建这样的规则后,用户就可以在两个域中使用智能卡进行验证。

有关证书映射规则的详情,请参阅用于在智能卡上配置身份验证的证书映射规则


为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。