Notifications
Clear all
Topic starter
30/05/2020 9:26 pm
## 前言 商业级的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)` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-34-30.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-34-30.png)]( g"/> ) 随后下一步,功能可以按需添加,这里直接忽略 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-37-04.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-37-04.png)]( g"/> ) 等待安装即可 **注意:安装过程中可能会要求你重启!** 安装完成后,不要着急安装 `AD CS` ,要先配置 `AD DS` 和 `AD FS` 服务器管理器中找到 `AD DS` 然后开始配置 `AD DS` 如果你没有一个现有的 AD 域,请选择 `添加新林(F)` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-46-07.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_14-46-07.png)]( g"/> ) 随后输入一个域名,然后将DNS指向此服务器的IP 在域控选项中,DNS服务器不是必选项,如果你使用第三方DNS来管理记录的话可以取消勾选,设置一个DSRM密码,然后下一步 后续的 `NetBIOS 域名` 和 `路径` 保持默认值即可,继续下一步 先决条件检查后就可以开始安装了 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-04-24.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-04-24.png)]( g"/> ) 如果你觉得GUI很麻烦的话,可以使用 `PowerShell` 执行以下命令即可,可以根据自己的需要修改 ```bash 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`,基础信息如下 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-47-17.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-47-17.png)]( g"/> ) 随后,我们需要在成员中修改用户所属的组,`ADFS` 用户属于 `Domain Admins` 组 确定之后,重置该用户的密码并启用该用户 剩下两个账户,一个名称为 `ADCS`,另一个名为 `NDES` 其中 `ADCS` 具有以下属性 + 属于 `Administrators` 和 `Enterprise Admins` 组 + 其余和 `ADFS` 一致 `NDES` 的属性为 + 属于 `IIS_IUSRS` 和 `Domain Admins` 组 + 其余和 `ADFS` 一致 ## (Optinal) 配置 - AD FS **如果不是在真正的 `AD 域` 中部署,也可以选择不配置 `AD FS`** 在服务器管理器中,定位到 `AD FS`,然后开始配置 在第二步中,修改用户为我们之前创建的 `ADFS` 用户,随后下一步 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-29-09.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-29-09.png)]( g"/> ) 导入准备好的证书,随后下一步 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-36-45.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-36-45.png)]( g"/> ) 在下一步中,你会被要求创建 `KDS 根密钥`,在 `PowerShell` 中执行以下命令创建 ```bash Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10) ``` 然后创建一个组托管服务账户 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-41-36.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-41-36.png)]( g"/> ) 接下来的数据库使用内建库即可,有特殊需求的自己装 `SQL Server` 执行先决检查,然后配置 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-43-49.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-43-49.png)]( g"/> ) *部署后配置我就不多bb了,不在本文的范围内* ## 部署 - AD CS 前面有那么多先决条件,现在终于可以开始部署 `AD CS` 了 和前面部署 `AD DS` 和 `AD FS` 一样,角色选择 `AD 证书服务` 即可 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-49-37.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-49-37.png)]( g"/> ) 一路下一步,然后看到 `角色服务` 这里 建议勾选以下几个 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-51-59.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-51-59.png)]( g"/> ) 下一步,IIS的不用特殊配置,保持默认即可 开始执行角色安装 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-53-35.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_15-53-35.png)]( g"/> ) ## 配置 - AD CS 服务器管理器中定位到 `AD CS`,然后开始配置 凭据一页中选择我们之前创建的 `ADCS` 用户,然后下一步 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-03-41.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-03-41.png)]( g"/> ) 第一步先配置 `证书颁发机构` `CA类型` 就是开始时说过的,不安装 `AD DS` 这里就只能选择 `独立 CA` 我选择 `企业 CA` 然后下一步 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-06-21.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-06-21.png)]( g"/> ) `CA 类型`: 视情况而定,如果你已经有了上级**受信任CA**签发的**子CA证书**,或者计划向上级**受信任CA**申请的话,请选择 `从属 CA`,否则选择 `独立 CA` 这里我选择 `从属 CA` 随后你需要指定私钥,如果你**已有子CA**或者打算使用现有私钥创建一个**根CA**,请选择 `使用现有`,否则请选择创建新私钥 这里由于我的子CA申请要求提交CSR,所以我选择创建新私钥 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-12-54.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-12-54.png)]( g"/> ) 再下一步是关键,有以下几点关键信息 + 如果你需要申请**受信任的子CA**,请按照购买HSM厂商的的指南安装驱动,随后在加密提供程序中选择你的HSM,**不要使用软件加密提供程序**,会导致**WebTrust**审计不合规,以及**私钥泄露**导致MITM + 子CA的Hash算法一般由父CA决定,通常是 `SHA256`,超过10年有效期的,RSA密钥长度一般选择4096位,ECDSA为384位 + 如果你上一步中选择的是根CA,且创建新私钥,则分两种情况 + 1.需要**申请根证书预置/WebTrust审计的**以及**企业生产环境使用的**,按照受信任的子CA的方案处理,密钥长度强制**4096(RSA)/384(ECDSA)** + 2.不申请各种东西,仅供测试使用的,加密提供程序可以选择软件加密程序,Hash算法可以选择 `SHA256` 或 `SHA384`,密钥长度一般建议为 **4096(RSA)/384(ECDSA)** 这里我选择的是 `HSM` + `SHA256` + `RSA-2048` 为避免 `HSM` 广告嫌疑,我就不放图了 下一步中,你需要输入证书的DN,可以参考我这个 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-42-40.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_16-42-40.png)]( g"/> ) 下一步会提示你保存CSR,以便发送到CA完成签名 如果你是根CA的话,应该没有这一步,余下的选项保持默认即可 如果你是子CA,需要等证书签发并导入以后,才能继续配置其他的服务 这就是签发下来的证书公钥啦 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/mmc_2019-03-29_16-59-25.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/mmc_2019-03-29_16-59-25.png)]( g"/> ) 证书签发以后,需要转换成 `p7b` 格式才能导入 `AD CS` 这就是导入成功之后的PKI了 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-02-23.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-02-23.png)]( g"/> ) 接下来的任务就是继续配置其他服务 还是将凭据设置为 `ADCS` 用户 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-04-46.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-04-46.png)]( g"/> ) 接下来配置这两项 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-07-39.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-07-39.png)]( g"/> ) 没有什么配置项,下一步即可 接下来继续配置其他的服务,还是使用 `ADCS` 这个用户 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-09-53.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-09-53.png)]( g"/> ) 在 `NDES` 选项卡中,我们会被要求输入 `NDES 服务账户` 这里输入我们早就创建好的账户 `NDES` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-15-17.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-15-17.png)]( g"/> ) `RA 信息` 随意填写即可 `NDES 的加密` 和 `CES 的CA` 保持默认。重要的是 `CES 的身份验证类型`,如果你需要为 `AD 域` 外的用户签发证书,则不可选择 `Windows 集成身份验证`,需要安全性选择 `客户端证书身份验证`,否则 `用户名和密码` 这里我选择 `客户端证书身份验证`,下一步 `CES 的服务账户` 与 `NDES 的服务账户` 一致,均为 `NDES` 这个用户 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-22-51.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-22-51.png)]( g"/> ) `CEP 的身份验证类型` 与 `CES 的身份验证类型` 的选择一致即可 由于 `CEP` 和 `CES` 均强制使用 `Https`,没有一张有效的证书将导致服务不可用;强烈建议选择一张有效的证书,然后下一步 OK,`AD CS`的配置就到此结束了 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-27-16.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-27-16.png)]( g"/> ) ## AIA和CRL 配置 #### 从服务器管理器中打开 `证书颁发机构`,找到 `证书模板` 右键-管理,会出现一个新的窗口 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-31-17.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-31-17.png)]( g"/> ) 找到 `OCSP 响应签名`,转到安全选项卡,选择添加 添加一个组,名称为 `Network Service`。为其授予 `读取` `注册` 和 `自动注册` 三项权限 并为所有已存在的组添加 `注册` 和 `自动注册` 两项权限,保存并关闭此窗口 在 `证书模板` 中右键-新建-要颁发的证书模板,选择 `OCSP 响应签名` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-36-35.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-36-35.png)]( g"/> ) #### 从服务器管理器中打开 `联机响应程序管理`,选择 `吊销配置` 并添加一个新的配置 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-38-05.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-38-05.png)]( g"/> ) 名称随意,余下均保持默认,需要编辑的是 `吊销提供程序` 的选项卡 取消 `基于其有效期刷新 CRL` 的选中,填入 `120` 分钟 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-42-18.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-42-18.png)]( g"/> ) 完成即可,吊销配置应该会显示 `工作` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-47-09.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-47-09.png)]( g"/> ) #### 回到 `证书颁发机构`窗口 在CA的名称上右键-属性 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-49-20.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-49-20.png)]( g"/> ) ###### CDP 转到 `拓展` 选项卡,先择 `CDP` 拓展 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-50-17.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-50-17.png)]( g"/> ) 选择 `LDAP://...` 这一条,按照下方图片选择 [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-52-56.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_17-52-56.png)]( g"/> ) 然后添加一条新的,内容可以这样填写 + ` 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)...` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-02-58.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-02-58.png)]( g"/> ) 打开文件资源管理器,转到此目录: `C:\Windows\System32\certsrv\CertEnroll` 将唯一的那一个 `.crt` 文件复制一份,重命名为一个好记的名字,例如 `scca.crt` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-05-53.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-05-53.png)]( g"/> ) 关闭文件资源管理器,回到刚刚的窗口,在 `AIA` 中再添加一条 + ` http://{Domain}/CertEnroll/xxx.crt` 在我这个例子中,就可以这么填写 + ` http://crt.xxx.com/CertEnroll/scca.crt` 然后选中 `包含在...AIA...` [![]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-09-09.png)]( https://image-s.mxyweb.cn/2018/2019/03/29/vmware_2019-03-29_18-09-09.png)]( g"/> ) 保存即可,会要求你重启 `AD CS` 服务 ## 结语 至此,`AD CS` 的部署已经全部结束,在下一篇中,我将介绍使用 `证书模板` 来签发终端证书