18.8. 使用带有 certmonger 的 SCEP
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。如果您在环境中使用 SCEP 服务器作为外部证书颁发机构(CA),您可以使用 certmonger
获取身份管理(IdM)客户端的证书。
18.8.1. SCEP 概述
简单证书注册协议(SCEP)是您可以跨不同设备和操作系统使用的证书管理协议。您可以使用 SCEP 服务器作为外部证书颁发机构(CA)。
您可以配置一个身份管理(IdM)客户端,以通过 HTTP 直接从 CA SCEP 服务请求并检索证书。此过程由共享 secret 保护,该 secret 通常仅在有限时间内有效。
在客户端上,SCEP 要求您提供以下组件:
- SCEP URL:CA SCEP 接口的 URL。
-
SCEP 共享的 secret:一个在 CA 和 SCEP 客户端之间共享的
challengePassword
PIN,用于获取证书。
然后,客户端通过 SCEP 检索 CA 证书链,并将证书签名请求发送到 CA。
配置带有 certmonger
的 SCEP 时,您可以创建一个新的 CA 配置的配置文件,该配置文件指定签发的证书参数。
18.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 链以指纹的形式显示在命令输出中。当通过未加密的 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 发布的一次性时间限制的challengePassword
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 中的主题名称。 -
-L
:CA 发布的一次性时间限制的challengePassword
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)
手册页列出了其他可能的状态及其含义。
其他资源
-
有关请求证书时的更多选项,请参阅
getcert-request(1)
手册页。
18.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