带 PKI 代理的 Windows Active Directory 证书服务 (ADCS)¶
本文档介绍了如何将 Windows Active Directory 证书服务 (ADCS) 与 PKI Proxy 和 NetHSM 进行配置。
Prerequisits¶
NetHSM
Provisioned
Administrative access
PKI Proxy server
已安装并配置 NetHSM PKCS#11 模块,以便使用 NetHSM
CA 服务器(Windows Server)
ADCS role installed, but not configured
PKI Proxy client tools installed
如果该服务器同时运行 PKI 代理服务器,则无需安装客户端工具,因为该代理服务器已包含客户端工具。
Pynitrokey installed
Root CA Key and Certificate¶
下表列出了密钥算法和密钥长度,以及 Windows ADCS 可与 NetHSM 配合使用的哈希算法。
Key Algorithm |
Key Length |
Hash Algorithm |
RSA |
1024 |
MD2、MD4、MD5、SHA1、SHA256、SHA384、SHA512 |
2048 |
MD2、MD4、MD5、SHA1、SHA256、SHA384、SHA512 |
|
4096 |
MD2、MD4、MD5、SHA1、SHA256、SHA384、SHA512 |
|
ECDSA |
P256 |
SHA1、SHA256、SHA385、SHA512 |
P384 |
SHA1、SHA256、SHA385、SHA512 |
|
P521 |
SHA1、SHA256、SHA385、SHA512 |
重要
请遵循有关选择安全的密钥算法、密钥长度和哈希算法的最佳实践。
密钥和证书可以是新生成的,也可以将现有的迁移过来。请参阅下文各小节,了解适用于您具体情况的操作方法。
Generate a new Root CA Key and Certificate on Windows¶
以下说明将用于在 ADCS 中为“*”根证书颁发机构(* )创建一个新的密钥和证书。
小技巧
通常,使用 ADCS 配置向导生成密钥和证书会更简单,然后按照`迁移现有密钥和证书<pkiproxy-windows-ca.html#migrate-existing-key-and-certificate>`__。
在此情况下,将使用请求模板生成一个带有显式 CA 扩展的密钥。具体数值需要根据您的环境进行调整。
该请求模板需保存为文件,文件名为``RootCA.inf``,内容如下。
此模板将生成一个密钥长度为 4096 位的 RSA 密钥。您需要将``<CA-NAME>`` 替换为您自己的 CA 的名称。
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=<CA-NAME>"
KeySpec = 1
KeyLength = 4096
Exportable = TRUE
MachineKeySet = TRUE
SMIME = FALSE
PrivateKeyArchive = FALSE
UserProtected = FALSE
UseExistingKeySet = FALSE
ProviderName = "Microsoft Software Key Storage Provider"
ProviderType = 0
RequestType = Cert
KeyUsage = 0x86
[Extensions]
; Key Usage: keyCertSign (0x04) + cRLSign (0x02) => 0x06
2.5.29.15 = "{critical}86"
; Basic Constraints: CA = TRUE, path length optional
2.5.29.19 = "{critical}{text}CA=TRUE"
; CA Version (V0.0)
1.3.6.1.4.1.311.21.1 = "{hex}02 01 00"
[RequestAttributes]
; Empty for self-signed request
Generate the key and certificate from the certificate template.
certreq -new RootCA.inf RootCA.req
该证书已添加到本地计算机证书存储中。将证书导出为 PFX 文件,并将``<THUMBPRINT>`` 替换为上一条命令输出中的相应值。
$password = Read-Host -AsSecureString "Password"
Export-PfxCertificate -Cert Cert:\LocalMachine\My\<THUMBPRINT> -FilePath RootCA.pfx -Password $password
该密码值用于加密 PKCS#12 归档文件(PFX 文件)。您可以继续阅读本章`NetHSM 配置<pkiproxy-windows-ca.html#nethsm-configuration>`__。
Migrate existing Key and Certificate¶
要迁移现有的密钥和证书,必须先将其从 ADCS 上的证书存储中导出,然后将生成的存档文件导入到 NetHSM 中。
重要
在对生产环境中的证书颁发机构进行更改之前,建议先对其进行备份。请参阅`此<https://learn.microsoft.com/en-us/windows-server/identity/ad-ds/manage/component-updates/ca-backup-and-restore-windows-powershell-cmdlets>`__ 页面以了解更多信息。
打开``certlm.msc``。
导航至**证书 - 本地计算机 → 个人 → 证书** 。
Select the certificate in the list on the right.
在顶部的菜单栏中,依次选择“**”→“操作”→“所有任务”→“导出...”** 。这将启动“*”证书导出向导* 。
Confirm the introduction of the assistant with Next.
勾选“**”旁边的单选按钮,选择“Yes, export the private key”,点击** ,然后通过**确认,接着点击** 。如果该单选按钮不可用,则表示该密钥被标记为不可导出。在这种情况下,本指南不适用于您所需的使用场景。
如果可能,请将证书路径中的所有证书都包括在内
勾选“**”旁边的单选按钮,选择“Yes, export the private key”(是,导出私钥)** ,然后通过“**”确认,接着点击“** ”。
勾选“个人信息交换 - PKCS #12 (.PFX)” 旁边的单选按钮。请确保勾选以下选项:
如果可能,请将证书路径中的所有证书都包括在内
导出所有扩展属性
Enable certificate privacy
Confirm the selection with Next.
勾选“**”旁边的单选按钮** 。在密码文本框中输入密码。从“**”旁边的下拉菜单** 中,选择“AES256-SHA256” 。
重要
加密方法*AES256-SHA256* 仅在 Windows Server 2019 和 Windows 11 及以上版本中受支持。若要在较旧版本中使用,请保留默认设置*TripleDES-SHA1* 。
Confirm the selection with Next.
Choose a storage location and file name and confirm with Next.
重要
导出的密钥和证书应保存在安全的位置,仅限授权用户访问。
Confirm the export with Finish.
请确保右侧列表中仍选中了该证书。
在顶部的菜单栏中,依次选择“**”→“操作”→“所有任务”→“删除** ”。通过输入“Yes ”确认删除私钥和证书。
您可以继续阅读本章`NetHSM 配置<pkiproxy-windows-ca.html#nethsm-configuration>`__。
NetHSM Configuration¶
需要将上一章中的密钥和证书导入到 NetHSM 中。通过执行以下命令:`nitropy<../software/nitropy/index.html>`__,我们可以将 PKCS#12 归档文件直接导入到 NetHSM 中。
请按以下步骤导入 PKCS#12 存档文件,同时将`` 替换为<KEY-ID>``,将`` 替换为<MECHANISM>``,并将`` 替换为<PKCS12-ARCHIVE>``。
nitropy nethsm import-pkcs12 -k <KEY-ID> -m <MECHANISM> -p <password> <PKCS12-ARCHIVE>
对于 RSA 密钥,该机制必须为``rsa_signature_pkcs1``;对于 ECDSA 密钥,则必须为``ecdsa_signature``。
现在,您可以验证该证书是否已存在于 NetHSM 上。
nitropy nethsm list-keys
该密钥将与上一条命令中给出的密钥 ID 一起列出。
PKI Proxy Server Configuration¶
在 PKI 代理服务器上,您必须共享刚刚从 NetHSM 添加的证书。请按照`Publish Certificates from the NetHSM<pkiproxy.html#publish-certificates-from-the-nethsm>`__ 中的步骤操作,以了解更多信息。
Windows ADCS Configuration¶
PKI Proxy Client Tools Configuration¶
接下来,我们将密钥和证书添加到 Windows 本地计算机证书存储中。
Open the PKI Proxy Certificate Manager.
Click the Add... button.
请填写必填项。
位置,例如:
https://localhost:9266认证
User
Secret Key/Password/SPN
Certificate Store:
LOCALMACHINE\My
Confirm the configuration with the OK button. This will bring you back to the previous window.
The list under Certificate Management in the PKI Proxy Certificate Manager should now show the just added certificate.
现在,您可以验证该证书是否已存在于本地计算机的证书存储中。
打开“**”的“Run** ”对话框,方法是:右键单击Windows**的“Start Menu** ”,然后选择“Run ”,或者按下键盘上的**Windows键 + R** 。
在“**”的“运行”** 对话框中,输入``certlm.msc``,然后按**确认。在键盘上输入** ,或单击**“确定”** 。
在弹出的证书管理器中,通过左侧的树形结构导航至“证书 - 本地计算机 → 个人 → 证书” 。
The published certificate is now listed on the right.
Windows ADCS Configuration¶
从**的“开始”菜单** 打开“服务器管理器” ,或者在键盘上按下**Windows键 + R** ,然后输入``ServerManager.exe``。
在右上角的菜单栏中,单击国旗图标,然后从部署后通知中选择“在目标服务器上配置 Active Directory 证书服务 ”。这将启动“AD CS 配置 ”向导。
In the wizard, set the settings below according to the stage.
Role Services
Check the radio button next to Certification Authority.
Setup Type
请根据您的环境,选择**企业级证书颁发机构(CA)** 或**独立证书颁发机构(CA)** 。
CA Type
选择“**”根证书颁发机构**
Private Key
勾选“**”旁边的单选按钮,并使用现有私钥** 。在此选项下,勾选“**”旁边的单选按钮,并选择证书及其关联的私钥** 。
Existing Certificate
在“证书”列表( )中,选择您要使用的证书。请确保“允许管理员在CA访问私钥时进行交互” 旁边的复选框未被勾选。由于PKI Proxy KSP在使用私钥时无需任何额外身份验证,因此无需勾选此选项。
配置向导完成后,请从**的“开始”菜单** 中打开“**”证书颁发机构** ,或者按键盘上的 Windows 键 + R**** ,然后输入``certsrv.msc``。当您在证书颁发机构名称上看到一个带有白色对勾的绿色圆点图标时,即可确认证书颁发机构服务已正确启动。
重要
证书颁发机构的可用性取决于私钥和证书的可用性。如果它们不可用,证书颁发机构服务可能会无法启动或意外停止。如果出现错误,请检查*的Windows事件日志* 以获取更多信息。