我有一台 Windows Server 2012 AD/CA,加入域的计算机会自动接收 CA 公共证书,还会获得使用 GPO 自动注册生成和推送的计算机证书。所有这些都用于 802.1X,并且运行良好。
现在我需要为未加入域的win10电脑生成证书,以便它也可以通过802.1X进行身份验证。
这确实很难。我遇到过这描述了实现此目的的两种方法的帖子:
选项1
从已加入域的计算机导出证书。我已测试过,此方法可行,但正如该帖子所述,缺点是所有未加入域的计算机将共享同一份证书。
选项 2(首选)
- 在 AD 中创建帐户
- 从允许导出私钥的模板颁发证书
- 使用名称映射将证书附加到帐户
- 创建与证书上的 SAN 匹配的 SPN。例如,如果 SAN 是 computer.domain.com,则需要在帐户 host/computer.domain.com 上创建一个 SPN
- 将证书安装到目标工作站/设备上
这条后续评论似乎表明上述五个步骤可以简化为以下步骤:
- 创建计算机 AD 帐户
- 为非域计算机颁发计算机证书,添加
SAN:UPN=<hostname>$@<domain.tld>
- 在客户端安装计算机证书
通过在证书中使用格式为 的 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"
剩下的问题是上述证书似乎与win10test
AD 计算机帐户无关。
更新 3
- 创建 AD 计算机帐户win10测试
- 修改
dNSHostname
为win10测试.测试.本地 - 使用以下命令在 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"
certreq -new request.inf win10test.req
在win10test上运行- 复制win10test.req到CA服务器并提交请求
- 将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 林),那么手动注册和更新客户端证书可能是合理的:
- 您在工作组计算机上生成 CSR(证书请求)
- 将 CSR 复制到 CA(或管理员 PC)并向 CA 提交请求
- 签发签名证书并将其复制回给客户
- 在客户端安装证书。
如果工作组数量比较大,可以投资ADCS Web 服务。以下是 AskDS 博客上的简化版本:启用 CEP 和 CES 来注册未加入域的计算机以获取证书
答案2
我根据 @Crypt32 的答案中的第二个链接回答了一个与此类似的 ServerFault 问题
我不知道这个答案是否能让 OP 满意,因为看起来他们的目标是使用 certutil/certreq 实用程序手动创建证书请求。如果你有 Active Directory,并且可以通过网络从未加入域的计算机访问它,在我看来这个问题提供最简单的方法。