77.8. 使用 SCEP 和 certmonger
简单证书注册协议(SCEP)是可在不同设备和操作系统中使用的证书管理协议。如果您在环境中使用 SCEP 服务器作为外部证书颁发机构(CA),您可以使用 certmonger
获取 Identity Management(IdM)客户端的证书。
77.8.1. SCEP 概述
简单证书注册协议(SCEP)是可在不同设备和操作系统中使用的证书管理协议。您可以使用 SCEP 服务器作为外部证书颁发机构(CA)。
您可以配置 Identity Management(IdM)客户端,以直接从 CA SCEP 服务通过 HTTP 请求并检索证书。此过程由共享 secret 保护,该 secret 通常仅对有限时间有效。
在客户端,SCEP 要求您提供以下组件:
- SCEP URL:CA SCEP 接口的 URL。
-
SCEP 共享 secret:在 CA 和 SCEP 客户端之间共享
质询密码
PIN,用于获取证书。
然后,客户端通过 SCEP 检索 CA 证书链,并将证书签名请求发送到 CA。
使用 certmonger
配置 SCEP 时,您可以创建一个新的 CA 配置配置文件,该配置文件指定了签发的证书参数。
77.8.2. 通过 SCEP 请求 IdM CA 签名证书
以下示例将 SCEP_example
SCEP CA 配置添加到 certmonger
,并在 client.idm.example.com
IdM 客户端上请求新证书。certmonger
支持 NSS 证书数据库格式和基于文件的(PEM)格式,如 OpenSSL。
先决条件
- 您知道 SCEP URL。
-
您有
challengePassword
PIN 共享 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_example CA '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 链在命令输出中显示为 thumbprints。当通过未加密的 HTTP 访问服务器时,手动将 thumbprints 与 SCEP 服务器中显示的 thumbprints 进行比较,以防止 man-in-the-middle 攻击。
从 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
:证书 Nickname,在 NSS 数据库中使用。 -
-n
: CSR 中的 Subject 名称。 -
-L
: CA 发布时限一次性质询Password
PIN。 -
-
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 中的 Subject 名称。 -
-L
: CA 发布时限一次性质询Password
PIN。 -
-
d:证书的主题备用名称,通常与主机名相同。
-
任务的
验证
验证证书是否已颁发并正确存储在本地数据库中:
如果您使用了 NSS,请输入:
[root@client.idm.example.com ~]# getcert list -I Example_Task Request 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: yes auto-renew: yes
如果使用 OpenSSL,请输入:
[root@client.idm.example.com ~]# getcert list -I Example_Task Request 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: yes auto-renew: yes
状态 MONITORING 表示成功检索签发的证书。
getcert-list(1)
man page 列出了其他可能的状态及其含义。
其它资源
-
有关请求证书时的更多信息,请参阅
getcert-request(1)
man page。
77.8.3. 使用 certmonger 自动续订 AD SCEP 证书
当 certmonger
发送 SCEP 证书签名请求时,此请求将使用现有证书私钥签名。但是,默认由 certmonger
发送的续订请求还包括用于获取证书的 challengePassword
PIN。
作为 SCEP 服务器的 Active Directory(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