Windows Server 上部署A...
 
Notifications
Clear all

Windows Server 上部署AD CS以实现企业PKI

1 Posts
1 Users
0 Likes
1,624 Views
(@taichi)
Member
Joined: 4 years ago
Posts: 408
Topic starter  
## 前言
商业级的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` 的部署已经全部结束,在下一篇中,我将介绍使用 `证书模板` 来签发终端证书

   
Quote
Share: