如何为未加入域的计算机颁发 Windows 机器证书?

如何为未加入域的计算机颁发 Windows 机器证书?

我有一台 Windows Server 2012 AD/CA,加入域的计算机会自动接收 CA 公共证书,还会获得使用 GPO 自动注册生成和推送的计算机证书。所有这些都用于 802.1X,并且运行良好。

现在我需要为未加入域的win10电脑生成证书,以便它也可以通过802.1X进行身份验证。

这确实很难。我遇到过描述了实现此目的的两种方法的帖子:

选项1

从已加入域的计算机导出证书。我已测试过,此方法可行,但正如该帖子所述,缺点是所有未加入域的计算机将共享同一份证书。

选项 2(首选)

  1. 在 AD 中创建帐户
  2. 从允许导出私钥的模板颁发证书
  3. 使用名称映射将证书附加到帐户
  4. 创建与证书上的 SAN 匹配的 SPN。例如,如果 SAN 是 computer.domain.com,则需要在帐户 host/computer.domain.com 上创建一个 SPN
  5. 将证书安装到目标工作站/设备上

这条后续评论似乎表明上述五个步骤可以简化为以下步骤:

  1. 创建计算机 AD 帐户
  2. 为非域计算机颁发计算机证书,添加SAN:UPN=<hostname>$@<domain.tld>
  3. 在客户端安装计算机证书

通过在证书中使用格式为 的 SAN 条目,您可以使困难的选择变得简单一些,并减少几个步骤。SAN:UPN=<hostname>$@<domain.tld>这将导致证书在 SAN 字段中具有 NT 主体名称 ,<hostname>$@<domain.tld>然后适合作为纯计算机对象对 NPS 进行身份验证。唯一的依赖关系是在 Active Directory 中创建一个计算机帐户并将其添加到 AuthZ 的相应组中。

我已经Computer使用主机名创建了一个 AD 帐户win10test,但我不明白如何生成证书以及如何将其添加SAN:UPN=<hostname>$@<domain.tld>到证书中。

我需要在非域计算机上创建 CSR 吗?

有人可以详细说明 MS 论坛帖子中的说明吗?谢谢。

更新

我创建了一个如下所示的 csr request.inf:

[NewRequest]
Subject="CN=win10test"
KeyLength=2048
KeySpec=1
MachineKeySet=TRUE
SMIME = FALSE

[RequestAttributes]
CertificateTemplate="NonDomainWorkstations"
SAN="[email protected]"

然后我将其复制到 CA 并提交了请求。win10test 的证书已颁发,但其中不包含存储区域网络领域。我不明白为什么。

更新2

具有正确 SAN 属性的新 CSR 请求Crypt32指出。

[NewRequest]
Subject="CN=win10test"
KeyLength=2048
KeySpec=1
MachineKeySet=TRUE
SMIME = FALSE

[Extensions]
2.5.29.17 = "{text}"
_continue_ = "[email protected]"

[RequestAttributes]
CertificateTemplate="NonDomainWorkstations"

剩下的问题是上述证书似乎与win10testAD 计算机帐户无关。

更新 3

  1. 创建 AD 计算机帐户win10测试
  2. 修改dNSHostnamewin10测试.测试.本地
  3. 使用以下命令在 win10test 上创建 CSR请求信息
[NewRequest]
Subject="CN=win10test"
KeyLength=2048
KeySpec=1
MachineKeySet=TRUE
SMIME = FALSE

[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=win10test.test.local"

[RequestAttributes]
CertificateTemplate="NonDomainWorkstations"
  1. certreq -new request.inf win10test.req在win10test上运行
  2. 复制win10test.req到CA服务器并提交请求
  3. 将win10test.cer复制到win10test并安装到本地机器。

无法进行 802.1x 身份验证。在 NPS 中收到以下错误:

Event 6273
host/win10test.test.local
TEST
TEST\host/win10test.test.local

The specified user account does not exist. 

答案1

OP 建议的解决方案都不太好。

如果只有一台或很少数量的工作组计算机(不属于 AD 林),那么手动注册和更新客户端证书可能是合理的:

  1. 您在工作组计算机上生成 CSR(证书请求)
  2. 将 CSR 复制到 CA(或管理员 PC)并向 CA 提交请求
  3. 签发签名证书并将其复制回给客户
  4. 在客户端安装证书。

如果工作组数量比较大,可以投资ADCS Web 服务。以下是 AskDS 博客上的简化版本:启用 CEP 和 CES 来注册未加入域的计算机以获取证书

答案2

我根据 @Crypt32 的答案中的第二个链接回答了一个与此类似的 ServerFault 问题

我不知道这个答案是否能让 OP 满意,因为看起来他们的目标是使用 certutil/certreq 实用程序手动创建证书请求。如果你有 Active Directory,并且可以通过网络从未加入域的计算机访问它,在我看来这个问题提供最简单的方法。

相关内容