Ssl-Certificate

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

  • March 6, 2014

我試圖弄清楚如何使用關鍵擴展集進行合格從屬,但我無法弄清楚如何在 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"

我在 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

我在 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]

無論我重新啟動 subCA、重新安裝 subCA 或重新啟動 rootCA 多少次,我都無法在來自 subCA 的請求中看到名稱限制(通過 certutil - dump),或者當我查看頒發的證書時在 MMC 中。

我知道這是可能的,因為此處提供了帶有名稱限制的轉儲

微軟剛剛發布了這篇關於如何在 AD CS 中使用名稱約束的文章

要將名稱約束應用於掛起的策略,請執行以下命令

Certreq -policy originalrequest.req policy.inf modifiedrequest.req

originalrequest.req– 從屬CA提供給父CA的原始請求文件

policy.inf- 包含要應用於請求的設置的策略文件

modifiedrequest.inf- 這是包含原始請求並已被策略修改的輸出文件。此文件將提供給父 CA 而不是originalrequest.req

引用自:https://serverfault.com/questions/576651