十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows Server 2012 R2 搭建 AD CS 企业根 CA 实战:证书签发与组策略下发全流程

Windows Server 2012 R2 搭建 AD CS 企业根 CA 实战:证书签发与组策略下发全流程 1. 为什么内网要自己签AD CS 在证书体系里的准确位置先说个场景你有几台内部服务器跑着 OA、资产管理系统、Wiki全走 HTTPS。浏览器一开先看到的是红锁、不安全、然后用户熟练地点了继续访问。这一套流程持续了两三年直到安全审计报告上写了一句证书不受信任存在中间人风险。这时候摆在桌面上的方案无非三个自签证书、公有云 CA 签发的证书、自己搭一套 CA。前两个都有明显的毛病——自签证书每台机器都得手动导一次信任范围一团乱过期了没人记得公有云 CA 签发的证书得花钱而且内部域名、内部 IP、主机名这类主题名称正规 CA 根本不给你签。就算用 DNS 验证通过了内网资源一多证书续期和生命周期管理也是个无底洞。在 Windows Server 2012 R2 域环境里最顺手的解法就是装 Active Directory 证书服务AD CS让它作为企业根 CA给整个域提供证书签发能力。它的核心优势不是能签证书——自签也能签——而是能和 Active Directory 深度绑定域内所有计算机通过组策略自动信任根证书证书模板控制可签发的证书类型计算机和用户还能基于域账户自动注册证书、自动续期。换句话说CA 不是一台签发证书的服务器而是一套身份信任体系的基础设施。这篇文章就围绕 Windows Server 2012 R2 下 AD CS 搭建企业根 CA、生成根证书、下发给域内机器、再签发一张 Web 服务器证书的完整过程来写。内容包括参数规划、安装步骤、组策略下发、证书申请实操以及我在真实环境里踩过的坑。哪怕你之前完全没碰过证书服务照着做也能把整套流程跑起来。适合什么样的人看域管理员、系统运维、负责内网安全基础建设的开发同学。如果你正被内网 HTTPS 报错、WiFi 认证、代码签名证书这类需求缠住这篇能帮你省下大量试错时间。2. 开工前必须核对的四项硬条件AD CS 看似装上就行实际上环境不达标装到一半会卡在各种奇怪的地方。我在 2012 R2 上部署过多次总结下来环境准备比安装过程本身更容易翻车。下面是四个我每次都要检查的硬条件。2.1 服务器已加域且你持有足够的管理权限企业 CA 的原理是要往 Active Directory 里写入 CA 对象和证书模板信息所以这台服务器必须是域成员不能是独立工作组服务器。如果你试图在工作组服务器上装 AD CS 并选企业 CA界面上的选项会直接呈灰色不可选。权限方面最低要求是 Domain Admins严格来说在根域部署企业根 CA 建议使用 Enterprise Admins。这不仅仅是安装时写几个属性的事后面配置证书模板、设置自动注册策略、发布 CRL 分发点都需要对 AD 配置分区有写权限。注意不要用本地 Administrator 登录去装。如果你安装时用的是普通域账户后面配置过程会报拒绝访问尤其是初始化 CA 数据库那一步折腾半天才发现是权限不够。2.2 服务器名称、IP 和 DNS 反向解析CA 服务器一旦安装完成机器名就不能改了。因为主体名称、证书里的颁发者信息、CDPCRL 分发点里的 URL全部写死在证书里。改主机名会导致旧证书失效所有已签发证书的吊销列表也全部对不上。所以装之前先把主机名定死别用什么test-ca-临时1这种名字最好用 ca / pki / sub-ca 这类能长期稳定使用的命名。IP 必须是静态的这个不用多说。DNS 必须能正反解这台服务器正向解析要通反向解析也要通。AD CS 首次启动时要向 DNS 注册服务记录如果反向区域缺失或动态更新失败后续客户端做吊销检查时会莫名超时。验证方法很粗暴nslookup ca.contoso.com nslookup 192.168.10.10两条都要能解析到同一台服务器。2.3 时间同步必须到位证书的有效期全靠时间戳判断。如果 CA 服务器和域内客户端的时间偏差超过 5 分钟Kerberos 认证直接失败证书申请也会被拒绝日志里多半写着无法验证签名时间。建议在域里建好 W32Time 同步链所有客户端同步到域控域控同步到外部 NTP 源CA 服务器也加入域同步。别让 CA 服务器自己对着外网时间域里一堆机器都认域控的时钟CA 单独漂移会造成混乱。2.4 想清楚 CA 要不要装在域控上2012 R2 允许你直接在域控上安装 AD CS技术上可行但我强烈不建议生产环境这么干。原因有两点一是 CA 数据库文件和 AD 数据库文件都在同一台机器上备份恢复时互相干扰二是 AD CS 服务一旦异常比如 IIS 组件出问题会影响域控的核心可用性。我见过有人图省事装在 DC 上后来 CA 服务崩了连 AD 一起恢复折腾了整整两天。所以规规矩矩找一台独立成员服务器配置不需要很高2 核 4G 跑根 CA 绰绰有余。3. 企业根 CA 搭建全程角色安装与参数规划环境准备好了开始装。整个过程分两大段先添加角色再配置角色。很多人以为添加完就完事了其实关键的设置全在配置那一步。3.1 添加证书服务角色打开 Server Manager点添加角色和功能服务器选择本机在角色列表里找到Active Directory 证书服务。展开后**建议勾选证书颁发机构和证书颁发机构 Web 注册**这两个角色服务。证书颁发机构 Web 注册certsrv 网站在后面手动申请证书、下载 CA 证书链时会用到而且它是客户端通过网页方式申请证书的入口。虽然域内机器可以完全走自动注册但留着 Web 注册能应付临时性、非域设备的证书申请需求。安装过程中会提示需要添加 IIS 相关功能直接同意就行。装完后先别急着关窗口Server Manager 顶部会有一个黄色感叹号提示你要配置 AD CS。点进去才开始真正的重头戏。3.2 配置角色企业 CA、根 CA、密钥算法配置向导第一步会要求指定凭据使用你刚才那个有 Enterprise Admins 权限的账户。然后关键的几步依次是角色服务保留默认的证书颁发机构Web 注册已经装好了。指定 CA 类型选企业 CA。企业意思是和 AD 集成不是公司用的 CA。如果选成独立 CA后面所有自动化功能全部失效。指定 CA 类型层级这里选根 CA。企业根 CA 是整个信任链的起点后续如果要从属 CA 再单独搭。指定私钥类型选创建新的私钥。除非你是从备份恢复否则不要选使用现有私钥。加密选项我给生产环境定的标准是密钥长度选4096哈希算法选SHA256。密钥长度要长一点因为根证书有效期通常十年起步2048 位在十多年后安全边际会变薄。哈希算法千万别选 SHA1安全性太差部分新系统还会因为签名算法不兼容直接拒绝信任。CA 名称默认格式是服务器名-CA 名称比如CA-SERVER-CA。可以改但一旦定下就不能变。有效期这是最容易被忽略的规划点。默认是 5 年但建议直接设置成20 年或者至少 10 年。原因很简单根证书是所有从属证书的信任锚一旦根证书过期整棵证书链全部失效所有通过该 CA 签发的证书在客户端都会报证书已过期。与其根证书五年一换不如一开始就规划足够的覆盖周期。配置完成后控制台会生成一个certutil -cainfo可以查到的证书。你可以先在证书颁发机构管理工具里看到这台 CA里面默认有四个文件夹吊销的证书、颁发的证书、挂起的申请、失败请求。3.3 检查安装结果配置完成后我习惯做两个快速验证打开 certlm.msc本地计算机证书在受信任的根证书颁发机构里应该能看到自己签发的根证书。然后跑一下certutil -cainfo能正常输出 CA 信息说明服务和 AD 的绑定没问题。4. 企业 CA 和独立 CA 的差异选错配置方式的代价很多新手会在这上面栽跟头。安装向导里企业 CA和独立 CA两个选项放在一起看着只是字面区别实际背后是两套完全不同的工作逻辑。4.1 两种 CA 适用场景对照对比项企业 CA独立 CA是否需要 AD必须作为域成员不需要工作组即可证书模板支持基于模板控制证书类型不支持只有基本模板自动注册支持域策略自动推送不支持全靠手动申请权限控制可针对域用户/计算机设置申请权限无高强度控制匿名可申请信息验证自动用 AD 信息填充主题名称手动填写不验证身份典型场景域内部署、自动续期、大规模下发测试环境、非域网络、隔离网络4.2 为什么域环境必须选企业 CA如果你的网络里有 AD而且目标是让域内机器自动信任、自动申请、自动续期那企业 CA 是唯一选择。独立 CA 就像一个手工签发作坊——签一张、导一次、信任一次每次都要人工操作根本不具备规模化的能力。企业 CA 的威力体现在这几个机制上安装时自动向 AD 配置分区发布 CA 对象域控在颁发域成员证书时能自动检索证书模板存储在 AD 里管理员可通过证书模板管理单元调整每个模板的申请权限通过组策略配置证书自动注册计算机和用户能按模板自动申请并续期证书全程无人值守。换句话说企业 CA 是基于身份和策略的自动颁发引擎独立 CA 只是一个能签证书的工具。在 2012 R2 域环境里选独立 CA等于主动放弃 AD CS 百分之八十的能力。4.3 安装时企业 CA 选项灰色不可点怎么办这个场景在论坛里被问烂了配置 AD CS 时企业 CA是灰色的选不了。原因就一个——当前服务器没有加入域或者你不是用域账户登录的。AD 报的错五花八门但根因几乎都是这两条。解决办法先把服务器加域、重启后用域管理员重新跑配置向导灰色选项自然解除。顺带说一句独立 CA 安装之后再想把 CA 从独立升级成企业是不可能的只能卸载重装。所以装之前一定看清环境再选。5. 让全域电脑无条件信任根证书GPO 与 CRL 分发CA 搭好了、根证书也生成了但此时域内其他机器并不认识你这家 CA。它们浏览器里打开通过 CA 签发的 HTTPS 页面一样会报此 CA 根目录证书不受信任。要解决这个问题最规范的做法是通过组策略把根证书推送到每台域计算机的受信任的根证书颁发机构存储区。5.1 导出根证书在 CA 服务器上打开 certlm.msc找到受信任的根证书颁发机构 证书双击你自己的根证书在详细信息里点复制到文件。导出格式选Base-64 编码 X.509后缀是 cer。这个 cer 文件就是要下发的对象。5.2 通过组策略导入根证书打开组策略管理控制台GPMC新建一个名为部署 CA 根证书的 GPO链接到域根或包含目标计算机的 OU。关键配置路径在计算机配置 策略 Windows 设置 安全设置 公钥策略 受信任的根证书颁发机构右键导入刚才导出的 cer 文件导入时会弹窗询问证书存储位置一定要选将所有的证书放入下列存储然后浏览选择受信任的根证书颁发机构。不要选自动选择证书存储否则可能被丢进其他人存储区起不到信任根的作用。客户端机器在下次组策略刷新时会自动导入手动触发就是gpupdate /force然后确认一下在客户端运行 certlm.msc查看受信任的根证书颁发机构里是否出现这个根证书。5.3 CRL 发布容易忽略但决定信任成败把根证书推下去只是第一步。真正常见的信任问题反而不在根证书而在CRL证书吊销列表无法访问。Windows 验证证书链时如果发现证书上写着 CDPCRL 分发点就会去访问对应 URL 检查证书是否被吊销。如果这个 URL 访问不通虽然不一定会直接拒绝但很多安全策略严格的环境会报错。默认情况下企业 CA 安装后会自动把 CRL 发布在C:\Windows\system32\CertSrv\CertEnroll同时会往 AD 里发布。但仅此而已的话发布路径没有面向客户端的 HTTP 地址外部访问不到。我建议在 CA 管理工具里右键 CA 属性切到扩展标签CRL 分发点CDP确保有http://ca.contoso.com/CertEnroll/CA 名.crl这一项。默认模板里一般有https://或 ldap 路径你多半需要手动加 HTTP 路径。颁发机构信息访问AIA确保持http://ca.contoso.com/CertEnroll/CA 名.crt存在这是给客户端下载 CA 证书链用的。两个 URL 都要能被客户端正常访问。修改完后需要重启证书服务让配置生效然后手动强制发布一次certutil -crl发布完成后再跑一遍certutil -cainfo certutil -CRL确认输出中没有路径错误。这一步做好了客户端校验证书链时才能顺利完成吊销检查。6. 实战申请并部署一张 Web 服务器证书CA 建好、根证书推下去了接下来看怎么通过这套基础设施签出第一张证书。这里以签发一张 Web 服务器证书为例从模板启用、手动申请到 IIS 绑定整个链路走一遍。6.1 启用 Web 服务器证书模板企业 CA 自带一堆模板但刚装完时大部分模板是不可用状态其中就包括Web 服务器模板。你直接去申请列表里找是找不到的。做法如下在 CA 服务器上打开证书颁发机构管理工具右键证书模板选择管理这会打开证书模板控制台。找到Web 服务器模板右键复制模板新建一份名为内部 Web 服务器的模板。复制的过程中有几个建议在常规标签里把有效期改成适合内网 Web 证书的周期比如 2 年。在请求处理里勾选允许导出私钥这样申请完可以把证书带私钥导出成 PFX方便在其他服务器上部署。如果证书只在申请的那台机器上装可以不勾安全等级更高。在安全标签里把域计算机或相关安全组的读取和注册权限打开允许它们申请这个模板。模板调整完成后回到证书模板下的证书颁发机构子节点右键新建 要颁发的证书模板把内部 Web 服务器加进去。这步做完模板才真正生效。6.2 Web 界面申请证书有两套申请路径一是 MMC 证书管理单元二是浏览器访问http://ca.contoso.com/certsrv。我推荐新手从 Web 界面走一遍因为它每一步都有提示能帮助你理解证书申请的完整流程打开浏览器访问http://ca.contoso.com/certsrv。使用有权限的域账户登录。选申请证书 高级证书申请 使用模板申请证书。证书模板选内部 Web 服务器在识别信息里填上服务器的主机名如web01.contoso.com密钥选项默认即可。提交后如果是企业 CA 且你有注册权限通常会直接显示证书已颁发然后点击安装此证书。装完后同一页面会提示证书已安装到当前用户存储。但要注意通过 web 申请默认装到用户存储而不是计算机存储。如果 IIS 需要用到这张证书还得在当前用户存储里把证书带私钥导出成 PFX再导入到本地计算机存储。6.3 用 MMC 申请并安装到计算机存储我更习惯直接让证书落到计算机存储省去导来导去的过程。操作如下在目标服务器前端跑 HTTPS 的应用服务器上运行 mmc添加证书管理单元选择计算机账户选本地计算机。展开证书本地计算机 个人 证书右键所有任务 申请新证书。一路下一步会看到我们启用了的内部 Web 服务器模板。在证书申请界面需要把使用者名称下的类型选为公用名值填web01.contoso.com。提交后证书直接落在个人存储。双击能看到证书状态正常并且带有私钥。6.4 在 IIS 里绑定证书最后一步最简单打开 IIS 管理器选中对应站点点绑定选择 https 类型在 SSL 证书下拉框里找到web01.contoso.com确定。再访问站点时浏览器不再弹警告了。需要注意证书申请时填的公用名必须和你访问站点用的域名完全一致。用户访问的是https://web01.contoso.com证书公用名就填web01.contoso.com。如果填成 IP、填成其他主机名、或者填成部分域名浏览器一样报名称不匹配。7. 从不受信任到申请失败证书服务高频故障清单整个流程跑下来你大概率会在某一两个环节卡住。我把这些年遇到的故障按出现频率整理一下每一条都给判断思路而不是只说结论。7.1 客户端始终报此 CA 根证书不受信任排查顺序非常固定先看根证书到底有没有导入客户端的受信任根存储。在报错那台机器上运行 certlm.msc展开受信任的根证书颁发机构 证书按颁发者排序找 CA 名字在不在。不在就回到组策略那边检查 GPO 是不是链接到了正确的 OU、客户端有没有成功执行 gpupdate /force。如果在但还报不受信任接下来查证书链是否完整双击站点的 HTTPS 证书在证书路径里看中间证书是否缺失。如果中间证书没配上客户端只知道根证书没用还需要中间 CA 证书。这条在多层 CA 架构里特别典型。7.2 企业 CA选项灰色无法勾选前面提过根因是服务器没加域或当前不是域账户。还有个坑是服务器之前装过独立 CA卸载不干净导致 AD 里残留对象。处理方法是先用 certutil -delstore 清理本机 CA 存储再用 ADSI Edit 检查 AD 里的 NTAuthCertificates 和 AIAContainer 里有没有残留 CA 对象有就得清掉。这个过程比较繁琐建议全新测试环境验证一遍再上生产。7.3 证书申请后一直挂起证书模板安全设置里如果给用户的权限只有读取没有注册申请会被送到挂起的申请文件夹必须由 CA 管理员手动颁发。这不是故障是权限问题。另外如果模板配置了需要管理者批准也会这样。要么调整模板权限允许直接注册要么在 CA 管理工具里右键挂起申请选择颁发。7.4 客户端访问 HTTPS 时卡顿、超时很可能不是网络问题而是客户端在尝试访问 CRL 分发点但一直连不上。用浏览器地址栏直接访问http://ca.contoso.com/CertEnroll/CA 名字.crl如果能下载 crl 文件就说明 CRL 发布和 IIS 访问是通的如果不通先排查 CertEnroll 目录权限、IIS 默认站点是否正常。7.5 证书显示重要的 0 天或吊销检查失败以及过期判断时间同步问题。证书用 UTC 时间判断有效性客户端本地时间和真实时间偏差大就会出现当前时间不在有效期范围内。域环境内统一跑 w32tm /resync 即可解决。7.6 卸载 AD CS 后重装名字和旧 CA 相同报冲突因为 AD 里还残留着旧 CA 对象重装时初始化和 CA 对象创建会失败。最简单粗暴的办法是装之前把 CA 服务器从域中退出清理 AD 中该 CA 服务器相关的证书对象在 ADSI Edit 里找到 CNAIAContainerCNNTAuthCertificates 以及 CNEnrollment Services 下残留项再重新加入域安装。别偷懒这个坑我踩过两回。8. 一点实操上的个人建议整个流程跑通后你会发现 AD CS 真正的价值不在签证书这一下而在后面的证书生命周期管理。域内计算机能自动信任、自动申请、自动续期运维负担比手工管理自签证书低了不止一个量级。最后分享两个经验一是生产环境的根 CA 配置完后最好把私钥做好备份并考虑离线存储。企业根 CA 的私钥一旦丢失或损坏所有签发的证书全部失去信任基础。用证书服务自带的备份向导把 CA 数据库和私钥导出来放到安全介质里。二是如果你只需要给一两台服务器签 HTTPS 证书没必要搭完整的企业 CA 架构独立测试一下就够但如果你面对的是几十上百台服务器的内网、WiFi 802.1x 认证、或 Devops 流水线里的代码签名那么 AD CS 这套体系是绕不开的。把根证书期限规划好前面多花十分钟后面能省几年的事。
返回列表