证书服务无法删除 Active Directory 中的 CA 证书。
Active Directory 证书服务 (AD CS) 要求对 Active Directory 域服务 (AD DS) 中的某些对象具有读取访问权限,在某些情况下还要求具有写入权限。如果无法访问这些 Active Directory 对象,则可能会妨碍 AD CS 启动。
启用 AD CS 以删除 Active Directory 域服务中的 CA 证书
要启用 Active Directory 证书服务 (AD CS) 以删除 Active Directory 域服务 (AD DS) 的事件日志消息中标识的证书颁发机构 (CA) 证书,请执行以下操作:
确认 CA 具有基本 AD DS 容器和对象的所需权限。
确定 AIA 容器中是否存在 CA 证书。
确定 CA 证书的状态。
解决这些条件后,手动删除证书。
要执行此过程,您必须拥有域管理员成员身份,或者您在域控制器中已被委派适当的权限。
确认基本 AD DS 容器和对象的权限
要确认 CA 具有 AD DS 容器以及这些容器内对象的所需权限,请执行以下操作:
在域控制器上,单击“开始”,指向“管理工具”,然后单击“Active Directory 站点和服务”。
单击“Active Directory 站点和服务 [域名]”,其中 [域名] 是您的域的名称。
在“查看”菜单中,单击“显示服务节点”。
双击 Services,再双击 Public Key Services,然后右键单击下面列出的每个容器或容器内列出的对象,然后单击“属性”。
在“安全”选项卡中,确认所需的权限。
以下是托管 CA 的计算机需要的所有 Active Directory 权限。某些权限是通过证书发行者组中的成员存档的。
注册服务容器。CA 计算机对其自己的对象具有读写访问权限。
AIA 容器。证书发行者组对 AIA 容器具有完全控制访问权限,CA 计算机对其在 AIA 容器内的对象具有完全控制访问权限。
CDP 容器。证书发行者组对 CDP 容器下的每个 CA 容器具有完全控制访问权限,CA 计算机对其容器内的每个证书吊销列表 (CRL) 对象具有完全控制访问权限。
证书颁发机构容器。证书发行者组对此容器内的对象具有完全控制访问权限。
证书模板容器。企业管理员和域管理员组(非 CA 计算机)对此容器及其内部大多数对象具有完全控制权限或读写访问权限。
KRA 容器。CA 计算机对其自己的对象具有完全控制访问权限。
OID 容器。企业管理员和域管理员组(非 CA 计算机)对此容器及其内部容器和对象具有完全控制权限或读写访问权限。
NTAuthCertificates 对象。企业管理员和域管理员组(非 CA 计算机)具有完全控制权限或读写访问权限。
域计算机和域用户容器。证书发行者组对部署了 AD CS 的林中的每个用户和计算机对象的 userCertificate 属性具有读写访问权限。
要执行这些过程,您必须拥有管理 CA 权限,或者您必须被委派了适当的权限。
请确定 AIA 容器中是否存在 CA 证书
要查看 AD DS 的 AIA 容器中的内容,请执行以下操作:
打开命令提示符窗口。
键入 certutil -cainfo,然后按 ENTER。
在命令输出中,请注意在净化的短名称之后列出的属性。
键入以下命令,然后按 ENTER: certutil -viewstore ldap:///CN=<MyCA>,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=<contoso>,DC=<com>?cACertificate?base?objectclass=certificationAuthority
将 MyCA 替换为步骤 3 中的 Sanitized Short Name 属性,并将 contoso 和 com 替换为 Active Directory 根域的轻型目录访问协议 (LDAP) 可分辨名称。
确认 CA 证书状态
要确认事件日志消息中标识的 CA 证书的状态,请执行以下操作:
打开命令提示符窗口。
键入 certutil -verify ldap:///CN=<MyCA>,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=<contoso>,DC=<com>?cACertificate?base?objectclass=certificationAuthority,然后按 ENTER。
如果证书应该已被删除但实际情况并非如此,您可以使用步骤“手动删除 CA 证书”手动将其删除。
手动删除 CA 证书
要手动删除 CA 证书,请执行以下操作:
打开命令提示符窗口。
键入 certutil -viewdelstore ldap:///CN=<MyCA>,CN=AIA,CN=Public Key Services,CN=Services,CN=Configuration,DC=<contoso>,DC=<com>?cACertificate?base?objectclass=certificationAuthority,然后按 ENTER。
选择要删除的 CA 证书,然后单击“确定”。
要检查 CA 和 Active Directory 域服务 (AD DS) 之间的连接,请执行以下操作:
在托管 CA 的计算机上打开命令提示符窗口。
键入 nltest /sc_verify:[Domainname] 然后按 Enter。
使用以下步骤确认基本 AD DS 容器和对象的权限。
使用安装了 CA 的命名空间的名称替换 [域名]。
确认基本 AD DS 容器和对象的权限
要执行此过程,必须拥有管理员成员身份,或者已向你委派了适当的权限。
要确认 CA 具有 AD DS 容器以及这些容器内对象的所需权限,请执行以下操作:
在域控制器上,单击“开始”,指向“管理工具”,然后单击“Active Directory 站点和服务”。
单击“Active Directory 站点和服务 [域名]”,其中 [域名] 是您的域的名称。
在“查看”菜单中,单击“显示服务节点”。
双击 Services,再双击 Public Key Services,然后右键单击下面列出的每个容器或容器内列出的对象,然后单击“属性”。
在“安全”选项卡中,确认所需的权限。
以下是托管 CA 的计算机需要的所有 Active Directory 权限。某些权限是通过证书发行者组中的成员存档的。
注册服务容器。CA 计算机对其自己的对象具有读写访问权限。
AIA 容器。证书发行者组对 AIA 容器具有完全控制访问权限,CA 计算机对其在 AIA 容器内的对象具有完全控制访问权限。
CDP 容器。证书发行者组对 CDP 容器下的每个 CA 容器具有完全控制访问权限,CA 计算机对其容器内的每个证书吊销列表 (CRL) 对象具有完全控制访问权限。
证书颁发机构容器。证书发行者组对此容器内的对象具有完全控制访问权限。
证书模板容器。企业管理员和域管理员组(非 CA 计算机)对此容器及其内部大多数对象具有完全控制权限或读写访问权限。
KRA 容器。CA 计算机对其自己的对象具有完全控制访问权限。
OID 容器。企业管理员和域管理员组(非 CA 计算机)对此容器及其内部容器和对象具有完全控制权限或读写访问权限。
NTAuthCertificates 对象。企业管理员和域管理员组(非 CA 计算机)具有完全控制权限或读写访问权限。
域计算机和域用户容器。证书发行者组对部署了 AD CS 的林中的每个用户和计算机对象的 userCertificate 属性具有读写访问权限。
Target | Microsoft.Windows.CertificateServices.CARole.2016 | ||
Category | EventCollection | ||
Enabled | True | ||
Event_ID | 107 | ||
Event Source | Microsoft-Windows-CertificationAuthority | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | High | ||
Remotable | True | ||
Alert Message |
| ||
Event Log | Application |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.EventProvider | Default |
Alert | WriteAction | System.Health.GenerateAlert | Default |
WriteToCertSvcEvents | WriteAction | Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher | Default |
WriteToDB | WriteAction | Microsoft.SystemCenter.CollectEvent | Default |
<Rule ID="Microsoft.Windows.CertificateServices.CARole.2016.CertSvcEvents.107" Enabled="true" Target="CSDisc!Microsoft.Windows.CertificateServices.CARole.2016" ConfirmDelivery="true" Remotable="true" Priority="Normal" DiscardLevel="100">
<Category>EventCollection</Category>
<DataSources>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.EventProvider">
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<LogName>Application</LogName>
<Expression>
<And>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="UnsignedInteger">EventDisplayNumber</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="UnsignedInteger">107</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
<Expression>
<SimpleExpression>
<ValueExpression>
<XPathQuery Type="String">PublisherName</XPathQuery>
</ValueExpression>
<Operator>Equal</Operator>
<ValueExpression>
<Value Type="String">Microsoft-Windows-CertificationAuthority</Value>
</ValueExpression>
</SimpleExpression>
</Expression>
</And>
</Expression>
</DataSource>
</DataSources>
<WriteActions>
<WriteAction ID="WriteToDB" TypeID="SC!Microsoft.SystemCenter.CollectEvent"/>
<WriteAction ID="WriteToCertSvcEvents" TypeID="Microsoft.Windows.CertificateServices.CARole.CertSvcEvents.Publisher"/>
<WriteAction ID="Alert" TypeID="Health!System.Health.GenerateAlert">
<Priority>2</Priority>
<Severity>2</Severity>
<AlertMessageId>$MPElement[Name="AlertMessageID62fe9963ca0840238c71200c88d2958c"]$</AlertMessageId>
<AlertParameters>
<AlertParameter1>$Data/EventDescription$</AlertParameter1>
</AlertParameters>
<Suppression>
<SuppressionValue>$Data/EventDisplayNumber$</SuppressionValue>
<SuppressionValue>$Data/PublisherName$</SuppressionValue>
<SuppressionValue>$Data/LoggingComputer$</SuppressionValue>
</Suppression>
</WriteAction>
</WriteActions>
</Rule>