本文提供了一个解决方案,用于修复使用 NDES 续订 Exchange 注册代理(脱机请求)证书失败的问题。
适用于: Windows Server 2008 R2 Service Pack 1原始 KB 数: 2712186
现象
尝试从 MMC 中的计算机证书存储控制台续订 NDES 使用的“Exchange 注册代理(脱机请求)”证书时,会收到错误“状态:不可用”。
原因
网络设备注册服务(NDES)根据以下两个配置了“预期用途”(增强密钥用法)设置为“证书请求代理”的证书模板请求两个证书:
- CEP 加密。
- Exchange 注册代理(脱机请求)。
在 Windows Server 2008 服务器上安装 NDES 服务时,它要求你提供 NDES 将用于授权证书请求的域用户。 因此,需要考虑不同的安全上下文:安装程序上下文(谁安装 NDES)和服务上下文(在安装期间提供的域用户,以及 NDES 稍后运行所在的域用户)。 注册代理证书在安装和安装程序上下文下注册,但稍后会在服务上下文下由 NDES 加载。 出于上述原因,注册代理证书(和 CEP 加密证书)必须存储在这些上下文可以访问的公用存储中,并且选择计算机证书存储。
但是,由于证书模板“Exchange 注册代理(脱机请求)”的“使用者类型”设置为“用户”,因此由于使用者类型不匹配,我们无法续订 MMC 控制台(计算机证书存储)中的证书模板“Exchange 注册代理(脱机请求)”。 在这种情况下,将返回错误“状态:不可用”。
注意:尝试续订“CEP 加密”证书模板时,此问题不会发生,因为它的主题类型设置为“计算机或其他设备”。 因此,只要你对系统和证书模板拥有足够的权限,此证书的续订就可以成功。
解决方法
使用certreq.exe工具通过以下步骤续订 Exchange 注册代理(脱机请求)证书:
- 创建包含以下内容的名为 Request.inf 的文件:
[Version] Signature=“$Windows NT$” [NewRequest] RenewalCert=“<Certificate Hash>” MachineKeySet=TRUE
注意
INF 文件包含定义证书请求参数的输入选项。 在上面的 INF 文件中,它告知命令行工具certreq.exe使用指定的证书哈希续订证书。 可以通过复制从证书的“详细信息”选项卡检索的证书的“*t* *h* *umbprint* ”扩展的值来获取 Exchange 注册代理(脱机请求)证书的证书哈希。 例如,如果证书的指纹为“*5* *3 60 8f 10 49 1d 50 bf a2 9f 06 17 96 8a 93 05 13 cc b9 55*”,则需要将内容编辑到以下行:
[Version] Signature=“$Windows NT$” [NewRequest] RenewalCert=“53 60 8f 10 49 1d 50 bf a2 9f 06 17 96 8a 93 05 13 cc b9 55” MachineKeySet=TRUE
注意
MachineKeySet 设置为“True”,因此证书及其私钥将存储在计算机证书存储中。
注意
若要打开计算机证书存储,请参阅以下 technet 文章:将证书管理单元添加到 MMC [,将证书管理单元添加到 MMC](https://technet.microsoft.com/library/cc754431%28v=ws.10%29.aspx#bkmk_computer)
-
运行以下命令以续订旧注册代理证书:
CertReq.exe -New Request.inf Certnew.req CertReq.exe -Submit Certnew.req Certnew.cer CertReq.exe -Accept Certnew.cer注意
- 需要管理权限和证书注册权限才能执行上述操作。 如果注册请求需要等待 CA 经理的批准,请联系 CA 经理批准该请求。 或者,向 CA 管理器提供在第一个命令中生成的请求文件,并请求证书,以便可以使用第三个命令安装证书。
- 上述步骤适用于默认证书模板用于 NDES 的情况。 如果 NDES 配置为使用特定模板,请相应地更改 inf 文件内容。 有关请求文件的语法的详细信息,请参阅以下文章:附录 3:Certreq.exe 语法
- 运行上面的第一个命令时,将弹出一个对话框,让我们确认需要续订的证书。 确保已选择旧的注册代理证书,然后单击“确定”。
- 在第二个命令中,将弹出另一个对话框,让我们选择 CA 服务器来颁发续订的注册代理证书。 请选择正确的 CA,然后单击“确定”。