前言

商业级的PKI一般都不便宜,AD CS与商业级的PKI相比,没有功能短板,而且它是包含在Windows Server中的一个组件,相对商业PKI,非常划算

部署准备

  • 一台Windows Server 2012 R2/2016/2019服务器
  • 一台用于接收证书的客户机,Windows 8/8.1/10
  • 一张pfx/pkcs12格式的证书

部署 - AD DS/AD FS

还是那个熟悉的Windows Server Manager,这里有两种方案

  • 作为企业PKI,与AD域整合
  • 作为独立PKI,无需AD域,但意味着部分高级功能将被禁用

这里使用企业PKI方案,需要先安装AD域或者加入现有AD域
如果你选择独立PKI方案,请直接跳过本段,看下面的 AD CS 部署部分即可
安装角色选择 AD 域服务 (AD DS)AD 联合身份验证服务 (AD FS)

随后下一步,功能可以按需添加,这里直接忽略

等待安装即可
注意:安装过程中可能会要求你重启!

安装完成后,不要着急安装 AD CS ,要先配置 AD DSAD FS
服务器管理器中找到 AD DS 然后开始配置 AD DS
如果你没有一个现有的 AD 域,请选择 添加新林(F)

随后输入一个域名,然后将DNS指向此服务器的IP
在域控选项中,DNS服务器不是必选项,如果你使用第三方DNS来管理记录的话可以取消勾选,设置一个DSRM密码,然后下一步
后续的 NetBIOS 域名路径 保持默认值即可,继续下一步
先决条件检查后就可以开始安装了

如果你觉得GUI很麻烦的话,可以使用 PowerShell 执行以下命令即可,可以根据自己的需要修改

Import-Module ADDSDeployment
Install-ADDSForest `
-DatabasePath "C:\Windows\NTDS" `
-DomainMode "WinThreshold" `
-DomainName "AD根域名" `
-DomainNetbiosName "AD" `
-ForestMode "WinThreshold" `
-InstallDns:$false `
-LogPath "C:\Windows\NTDS" `
-NoRebootOnCompletion:$false `
-SysvolPath "C:\Windows\SYSVOL" `
-Force:$true

配置成功后,你会被要求重启,随后才能继续配置 AD FS

配置 - AD DS

完成重启后,在服务器管理器中找到 AD DS,然后打开管理中心,我们需要创建几个账户
为了安全起见,应遵循最小权限原则,如果非生产环境,全部使用 Administrator 账户即可

我们需要在 AD 管理中心里新建 3 个账户
第一个全名为 ADFS,基础信息如下

随后,我们需要在成员中修改用户所属的组,ADFS 用户属于 Domain Admins
确定之后,重置该用户的密码并启用该用户
剩下两个账户,一个名称为 ADCS,另一个名为 NDES
其中 ADCS 具有以下属性

  • 属于 AdministratorsEnterprise Admins
  • 其余和 ADFS 一致

NDES 的属性为

  • 属于 IIS_IUSRSDomain Admins
  • 其余和 ADFS 一致

(Optinal) 配置 - AD FS

如果不是在真正的 AD 域 中部署,也可以选择不配置 AD FS

在服务器管理器中,定位到 AD FS,然后开始配置
在第二步中,修改用户为我们之前创建的 ADFS 用户,随后下一步

导入准备好的证书,随后下一步

在下一步中,你会被要求创建 KDS 根密钥,在 PowerShell 中执行以下命令创建

Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)

然后创建一个组托管服务账户

接下来的数据库使用内建库即可,有特殊需求的自己装 SQL Server
执行先决检查,然后配置

部署后配置我就不多bb了,不在本文的范围内

部署 - AD CS

前面有那么多先决条件,现在终于可以开始部署 AD CS
和前面部署 AD DSAD FS 一样,角色选择 AD 证书服务 即可

一路下一步,然后看到 角色服务 这里
建议勾选以下几个

下一步,IIS的不用特殊配置,保持默认即可
开始执行角色安装

配置 - AD CS

服务器管理器中定位到 AD CS,然后开始配置
凭据一页中选择我们之前创建的 ADCS 用户,然后下一步

第一步先配置 证书颁发机构
CA类型 就是开始时说过的,不安装 AD DS 这里就只能选择 独立 CA
我选择 企业 CA 然后下一步

CA 类型: 视情况而定,如果你已经有了上级受信任CA签发的子CA证书,或者计划向上级受信任CA申请的话,请选择 从属 CA,否则选择 独立 CA
这里我选择 从属 CA
随后你需要指定私钥,如果你已有子CA或者打算使用现有私钥创建一个根CA,请选择 使用现有,否则请选择创建新私钥
这里由于我的子CA申请要求提交CSR,所以我选择创建新私钥

再下一步是关键,有以下几点关键信息

  • 如果你需要申请受信任的子CA,请按照购买HSM厂商的的指南安装驱动,随后在加密提供程序中选择你的HSM,不要使用软件加密提供程序,会导致WebTrust审计不合规,以及私钥泄露导致MITM
  • 子CA的Hash算法一般由父CA决定,通常是 SHA256,超过10年有效期的,RSA密钥长度一般选择4096位,ECDSA为384位
  • 如果你上一步中选择的是根CA,且创建新私钥,则分两种情况
  • 1.需要申请根证书预置/WebTrust审计的以及企业生产环境使用的,按照受信任的子CA的方案处理,密钥长度强制4096(RSA)/384(ECDSA)
  • 2.不申请各种东西,仅供测试使用的,加密提供程序可以选择软件加密程序,Hash算法可以选择 SHA256SHA384,密钥长度一般建议为 4096(RSA)/384(ECDSA)

这里我选择的是 HSM + SHA256 + RSA-2048
为避免 HSM 广告嫌疑,我就不放图了

下一步中,你需要输入证书的DN,可以参考我这个

下一步会提示你保存CSR,以便发送到CA完成签名
如果你是根CA的话,应该没有这一步,余下的选项保持默认即可
如果你是子CA,需要等证书签发并导入以后,才能继续配置其他的服务
这就是签发下来的证书公钥啦

证书签发以后,需要转换成 p7b 格式才能导入 AD CS
这就是导入成功之后的PKI了

接下来的任务就是继续配置其他服务
还是将凭据设置为 ADCS 用户

接下来配置这两项

没有什么配置项,下一步即可
接下来继续配置其他的服务,还是使用 ADCS 这个用户

NDES 选项卡中,我们会被要求输入 NDES 服务账户
这里输入我们早就创建好的账户 NDES

RA 信息 随意填写即可
NDES 的加密CES 的CA 保持默认。重要的是 CES 的身份验证类型,如果你需要为 AD 域 外的用户签发证书,则不可选择 Windows 集成身份验证,需要安全性选择 客户端证书身份验证,否则 用户名和密码
这里我选择 客户端证书身份验证,下一步
CES 的服务账户NDES 的服务账户 一致,均为 NDES 这个用户

CEP 的身份验证类型CES 的身份验证类型 的选择一致即可
由于 CEPCES 均强制使用 Https,没有一张有效的证书将导致服务不可用;强烈建议选择一张有效的证书,然后下一步
OK,AD CS的配置就到此结束了

AIA和CRL 配置

从服务器管理器中打开 证书颁发机构,找到 证书模板

右键-管理,会出现一个新的窗口

找到 OCSP 响应签名,转到安全选项卡,选择添加
添加一个组,名称为 Network Service。为其授予 读取 注册自动注册 三项权限
并为所有已存在的组添加 注册自动注册 两项权限,保存并关闭此窗口
证书模板 中右键-新建-要颁发的证书模板,选择 OCSP 响应签名

从服务器管理器中打开 联机响应程序管理,选择 吊销配置 并添加一个新的配置

名称随意,余下均保持默认,需要编辑的是 吊销提供程序 的选项卡
取消 基于其有效期刷新 CRL 的选中,填入 120 分钟

完成即可,吊销配置应该会显示 工作

回到 证书颁发机构窗口

在CA的名称上右键-属性

CDP

转到 拓展 选项卡,先择 CDP 拓展

选择 LDAP://... 这一条,按照下方图片选择

然后添加一条新的,内容可以这样填写

  • http://{Domain}/CertEnroll/{CA Name}.crl

在我这个例子中,就可以这么填写

  • http://crl.xxx.com/CertEnroll/SecComm Enterprise CA.crl

随后保存,会要求你重启 AD CS 服务

AIA

在刚刚的窗口中,拓展选择 授权信息访问(AIA)
选择 LDAP://... 这一条,取消 包含在... 这一个选中
选择添加,内容可以这样填写

  • http://{Domain}/ocsp

在我这个例子中,就可以这么填写

  • http://ocsp.xxx.com/ocsp

然后选择 包含在在线证书...(OCSP)...

打开文件资源管理器,转到此目录: C:\Windows\System32\certsrv\CertEnroll
将唯一的那一个 .crt 文件复制一份,重命名为一个好记的名字,例如 scca.crt

关闭文件资源管理器,回到刚刚的窗口,在 AIA 中再添加一条

  • http://{Domain}/CertEnroll/xxx.crt

在我这个例子中,就可以这么填写

  • http://crt.xxx.com/CertEnroll/scca.crt

然后选中 包含在...AIA...

保存即可,会要求你重启 AD CS 服务

结语

至此,AD CS 的部署已经全部结束,在下一篇中,我将介绍使用 证书模板 来签发终端证书

为保证良好的排版风格,请在搬运时使用 Markdown 版本,本文 Markdown 版本

Comments