如何配置 AD CS 以支持名称约束(RFC 2459 中的 4.2.1.11)?

Chr*_*ski 5 smartcard ssl-certificate certificate-authority smime ad-certificate-services

我试图弄清楚如何使用关键扩展集进行合格从属,但我无法弄清楚如何在 MSFT AD CS 中执行此操作。

对于给定的证书,如何确保在颁发的证书上正确设置名称约束?

编辑

到目前为止完成的工作(有关完成的更多工作,请参阅编辑历史记录):

我安装了一个子CA在这里这些方向以下

名称约束在两个位置之一配置。创建新 CA 时,您可以通过配置 CAPolicy.inf 来施加名称约束,从而为该 CA 定义名称约束。同样,如果您要创建合格的从属 CA 证书,您将在 Policy.inf 文件中定义名称约束。在这两种情况下,都使用以下语法:

[NameConstraintsExtension]
Include = NameConstraintsPermitted
Exclude = NameConstraintsExcluded
Critical = TrUe

[NameConstraintsPermitted]
DNS = ""
email=""
UPN=""

[NameConstraintsExcluded]
DNS = .nwtraders.com
email = @nwtraders.com
UPN = .nwtraders.com
UPN = @nwtraders.com
URI = ftp://.nwtraders.com
DIRECTORYNAME = "DC=NWtraders, DC=com"
Run Code Online (Sandbox Code Playgroud)

我在 subCA 上的 capolicy.inf 是这个

[Version]
Signature="$Windows NT$"

[PolicyStatementExtension]
Policies=LegalPolicy

[LegalPolicy]
OID=1.2.3.4.1455.67.89.5
Notice="Legal Policy Statement"
URL=http://pki.bitclear.us/pki/cps.txt

[Certsrv_Server]
RenewalKeyLength=2048
RenewalValidityPeriod=Years
RenewalValidityPeriodUnits=20
LoadDefaultTemplates=0
AlternateSignatureAlgorithm=1
# ForceUTF8=0 

[CRLDistributionPoint] 
Empty=True

[AuthorityInformationAccess] 
Empty=True

[BasicConstraintsExtension] 
PathLength=1 
Critical=Yes

[NameConstraintsExtension]
Include = NameConstraintsPermitted
Exclude = NameConstraintsExcluded
Critical = True

[NameConstraintsPermitted]
DirectoryName = "DC=gg, DC=Com"
email = @gg.com
UPN = .gg.com
UPN = @gg.com


#[EnhancedKeyUsageExtension] 
#OID=1.3.6.1.5.5.7.3.4        ; Secure Email 
#OID=1.3.6.1.4.1.311.20.2.2    ; Smart Card Logon 
#Critical=No
# on a sub CA do this: Certutil –setreg Policy\CAPathLength 2
Run Code Online (Sandbox Code Playgroud)

我在 SubCA 和 rootCA 上的 policy.inf 是这个

[Version]
Signature= "$Windows NT$"

[RequestAttributes]
CertificateTemplate = SubCA

[PolicyStatementExtension]
Policies = HighAssurancePolicy, MediumAssurancePolicy, LowAssurancePolicy
CRITICAL = FALSE

[HighAssurancePolicy]
OID = 1.3.6.1.4.1.311.21.8.2473717464.1095930238.502626717.506190032.1.402

[MediumAssurancePolicy]
OID = 1.3.6.1.4.1.311.21.8.2473717464.1095930238.502626717.506190032.1.401

[LowAssurancePolicy]
OID = 1.3.6.1.4.1.311.21.8.2473717464.1095930238.502626717.506190032.1.400

[NameConstraintsExtension]
Include = NameConstraintsPermitted
Exclude = NameConstraintsExcluded
Critical = True

[NameConstraintsPermitted]
DirectoryName = "DC=g, DC=Com"
email = @g.com
UPN = .g.com
UPN = @g.com

[NameConstraintsExcluded]
Run Code Online (Sandbox Code Playgroud)

无论我重新启动 subCA、重新安装 subCA 或重新启动 rootCA 多少次,我都无法在来自 subCA 的请求(通过 certutil - dump)或查看颁发的证书时看到名称限制在 MMC 中。

我知道这是可能的,因为这里有一个带有名称约束转储

Chr*_*ski 1

微软刚刚发布了这篇文章如何将名称约束与 AD CS 结合使用的文章

\n\n

要将名称限制应用于待处理的策略,请运行以下命令

\n\n
Certreq -policy originalrequest.req policy.inf modifiedrequest.req\n
Run Code Online (Sandbox Code Playgroud)\n\n

originalrequest.req\xe2\x80\x93 下级向父CA提供的原始请求文件

\n\n

policy.inf- 包含您想要应用于请求的设置的策略文件

\n\n

modifiedrequest.inf- 这是包含原始请求并已被策略修改的输出文件。该文件将被提供给父 CA 而不是originalrequest.req

\n