Directory & Identity Services: Active Directory Certificate Services (AD CS) – The Complete Guide
A deep, practical guide to designing, operating, hardening, and troubleshooting enterprise PKI with AD CS.
Active Directory Certificate Services (AD CS) is the Windows Server role that lets enterprises build and run a robust Public Key Infrastructure (PKI). With AD CS you issue and manage digital certificates for SSL/TLS, email protection, code signing, document signing, and user/machine authentication tied to Active Directory. This guide gives you an architecture-first view, battle-tested best practices, and a rich troubleshooting playbook—with ready-to-use PowerShell and Microsoft Graph examples.
1) AD CS Overview
AD CS provides the core certificate lifecycle services—enrollment, issuance, renewal, and revocation—anchored by one or more Certificate Authorities (CAs). It integrates tightly with Group Policy, Entra ID (Azure AD) hybrid scenarios, and device management platforms such as Microsoft Intune. Properly designed, it gives you scalable trust, frictionless auto-enrollment for domain-joined devices, and secure issuance for non-domain devices via NDES (SCEP), Certificate Enrollment Web Services (CES/CEP), and APIs.
- Primary outcomes: Confidentiality (encryption), integrity (signing), and strong authentication (mutual TLS, smart cards, 802.1X, VPN, and app/server identities).
- Why it matters now: Zero Trust journeys depend on provable device and workload identity; AD CS provides the cryptographic backbone for that proof.
2) Purpose & Core Use Cases
Typical AD CS use cases include:
- Server TLS: Issue internal web server certificates (IIS, Exchange, SQL, RDP gateways, reverse proxies, Kubernetes Ingress, etc.).
- Mutual TLS & Device Auth: Secure service-to-service traffic and device trust for NAC/802.1X, VPN, and private APIs.
- Smart Card Logon: Two-factor auth for privileged users and high-sensitivity environments.
- Code/Document Signing: Protect supply chains and verify publisher integrity for PowerShell scripts, ClickOnce, Office docs, and line-of-business executables.
- Email Encryption/Signing: S/MIME for confidentiality and non-repudiation.
3) PKI Foundation: Trust, Keys, and Certificates
In a PKI, a certificate binds a public key to a subject (user, device, service) and is signed by a trusted CA. Clients verify that signature against CA trust anchors and check revocation via CRLs and OCSP. Good design aligns key sizes, algorithms (RSA/ECDSA), validity periods, and EKUs with your security posture and compliance requirements.
- Algorithms: RSA-2048 minimum (3072/4096 for roots), or ECDSA (P-256/P-384) where supported.
- Hashing: SHA-256 (or stronger). Avoid SHA-1 entirely.
- Validity: Keep end-entity certs short (1–2 years or less) to limit risk and ease rotation.
4) CA Hierarchy: Root & Subordinate (Issuing) CAs
A classic enterprise design uses an offline, high-assurance Root CA that signs one or more online Issuing CAs. The offline Root protects the ultimate trust anchor; Issuing CAs handle day-to-day requests.
- Root CA: Offline, HSM-backed, long-lived key, guarded ceremonies for CRL/signing operations.
- Issuing CA: Online, scaled/redundant as needed, short-lived keys (e.g., 3–5 years), monitored and audited.
AD CS supports both Enterprise and Standalone models. Enterprise CA integrates with AD for templates and auto-enrollment. Standalone CA operates independently with manual approvals—common in DMZs or partner-facing edges.
5) Role Services in AD CS
- Certification Authority (CA): Receives requests, verifies identity/policy, issues and maintains certificates.
- Web Enrollment: Browser-based enrollment/renewal over HTTPS.
- Online Responder (OCSP): Real-time certificate status checks instead of downloading large CRLs.
- Network Device Enrollment Service (NDES): SCEP enrollment for non-domain devices like routers, firewalls, printers, mobiles.
- Certificate Enrollment Web Services (CES/CEP): Standards-based enrollment over HTTPS for external/non-domain clients.
6) Certificate Templates & Auto-Enrollment
Certificate Templates standardize issuance: subject name, key usage/EKU, key length, validity, SAN rules, and security (who can enroll or auto-enroll). With Auto-Enrollment, domain-joined users and computers automatically request and renew certificates via Group Policy, minimizing manual work.
- Use v3/v4 templates for modern crypto and issuance controls.
- Restrict Enroll/Autoenroll permissions to least privilege security groups.
- Shorten validity and enable template-based renewal to reduce outage risk.
7) Integration with Active Directory
AD-integrated CAs publish certificates to user/computer objects and publish AIA/CDP locations in AD. Group Policy distributes trusted roots/intermediates and auto-enrollment policy, streamlining bootstrap trust across the domain.
8) Root CA Security & Operations
- Keep the Root CA offline—no network, powered off except for ceremonies (signing subordinate certs and CRLs).
- Use HSM for private key protection; enforce M of N quorum for key operations.
- Document formal ceremonies: who, what, when, where; record serials, thumbprints, and SHA-256 digests.
9) Certificate Lifecycle & Governance
Plan for the full lifecycle: request → approval → issuance → renewal → revocation/expiration → archival → audit.
- Key Archival & Recovery: Enable Key Recovery Agents (KRAs) for EFS/S/MIME keys; escrow private keys in a secure store.
- Revocation: Publish CRLs frequently enough for your risk profile; consider OCSP for latency-sensitive clients.
- Auditing: Turn on CA auditing: issued, revoked, failed requests; access; template changes.
10) CDP & AIA Design
CRL Distribution Points (CDP) tell clients where to fetch CRLs (HTTP, LDAP, File). Authority Information Access (AIA) points to issuing CA certs and OCSP responders. Use HTTP for broad compatibility, with redundant, geo-replicated web endpoints and short cache TTLs for emergency revocations.
11) Renewal & Expiration Management
- Set renewal overlap periods so clients can renew well before expiry.
- Automate discovery of expiring certs (scripts below) and integrate alerts with your SIEM/ITSM.
- For servers, coordinate with load balancers/restart windows to avoid brownouts.
12) Role-Based Administration & Segregation of Duties
- CA Administrator: Configures CA, manages keys, defines policy.
- Certificate Manager: Approves/denies requests, manages issuance and revocation.
- Auditor: Monitors logs, compliance evidence, and change control.
13) Smart Card & User Authentication
Use AD CS to issue smart card logon certificates with proper EKUs and mapping to AD accounts. Combine with Entra ID Conditional Access for step-up auth in hybrid environments.
14) Server SSL/TLS: Internal Services
Issue internal TLS certs for IIS, Exchange, SQL, RDP, and VPN. Prefer subject alternative names (SANs), restrict private keys, and enable automatic renewal for domain-joined servers via Group Policy and templates.
15) Code & Document Signing
Establish separate templates and approval workflows for signing certificates. Consider Azure Key Vault with HSM-backed keys for signing services and CI/CD pipelines.
16) Monitoring & Auditing
- Enable CA auditing and forward logs to SIEM.
- Use
pkiview.msc(Enterprise PKI snap-in) to validate AIA/CDP/OCSP health. - Track issuance spikes, failed requests, and template changes.
17) Backup & Disaster Recovery
- Back up CA database (
certutil –backupdb), CA configuration (certutil –backup), and private keys/HSM material. - Document restore runbooks and test them (including CRL publishing and OCSP signing key restore).
18) Hardening Best Practices
- Harden OS and IIS (minimal roles/features, TLS 1.2+/1.3, strong cipher suites).
- Isolate CA servers; deny interactive logons; restrict RDP; use PAWs for admins.
- Limit who can manage templates vs. who can enroll.
- Review dangerous template settings (e.g., any-purpose EKU, overly broad enrollment permissions, “Supply in request” subject names).
- Regularly audit for ESC-style PKI abuses (misconfigured templates that allow privilege escalation).
19) Modern Integrations: Intune, Entra ID, Azure Key Vault
In hybrid, AD CS works with Intune SCEP/PKCS profiles for device certificates and with Entra ID for identity. Use Azure Key Vault for HSM-grade protection of signing keys when building cloud-native apps and pipelines.
20) Hands-On: PowerShell & Certutil Essentials
These commands help you inspect stores, test AIA/CDP/OCSP, enroll, renew, and diagnose trust issues.
20.1 Inspect local certificate stores (PowerShell)
# List all certificates in the Local Machine\Personal store
Get-ChildItem -Path Cert:\LocalMachine\My |
Select-Object Subject, NotBefore, NotAfter, Thumbprint, EnhancedKeyUsageList
# Find certificates expiring in the next 30 days
$threshold = (Get-Date).AddDays(30)
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.NotAfter -lt $threshold } |
Select Subject, NotAfter, Thumbprint
# Export a certificate (public only) by thumbprint
$tp = "YOUR_THUMBPRINT"
Export-Certificate -Cert (Get-ChildItem Cert:\LocalMachine\My\$tp) -FilePath C:\Temp\exported.cer
# Verify a certificate chain
$certPath = "C:\Temp\server.cer"
Get-AuthenticodeSignature -FilePath $certPath | Format-List *
20.2 Validate AIA/CDP/OCSP endpoints (certutil)
# Test reachability of a CA configuration
certutil -config - -ping
# Display CA configuration
certutil -getconfig
# Check a certificate, retrieve AIA/CDP and test URLs
certutil -verify -urlfetch C:\Temp\server.cer
# Dump and verify CRLs
certutil -urlcache crl delete
certutil -f -verifyCrl http://pki.contoso.com/pki/contoso.crl
# OCSP responder test (replace URL)
certutil -url http://ocsp.contoso.com/ocsp
# View stores
certutil -store my
certutil -store -enterprise CA
# Check template list published on a CA
certutil -catemplates
20.3 Request, renew, revoke (certreq & certutil)
# Create a CSR via INF and submit with certreq
@"
[Version]
Signature="$Windows NT$"
[NewRequest]
Subject = "CN=api01.contoso.com"
RequestType = PKCS10
KeyLength = 2048
Exportable = FALSE
KeySpec = 1
MachineKeySet = TRUE
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
HashAlgorithm = sha256
SMIME = FALSE
[Extensions]
2.5.29.17 = "{text}"
_continue_ = "dns=api01.contoso.com&"
_continue_ = "dns=api.contoso.com"
[RequestAttributes]
CertificateTemplate = WebServer
"@ | Out-File C:\Temp\webserver.inf -Encoding ascii
certreq -new C:\Temp\webserver.inf C:\Temp\webserver.req
certreq -submit -config "CA-SERVER\Contoso-CA" C:\Temp\webserver.req C:\Temp\webserver.cer
certreq -accept C:\Temp\webserver.cer
# Renew a CA certificate (run on the CA)
certutil -renewCert ReuseKeys
# Revoke a certificate by serial number
certutil -revoke SERIALNUMBER
21) Hands-On: Templates & Auto-Enrollment (Admin)
Quick checklist for safe template publication and auto-enrollment:
- Create or duplicate a template (e.g., Computer → Web Server), set key length/EKUs, enable private key export only when necessary.
- Assign Enroll/Autoenroll permissions to tightly scoped AD groups.
- On the Issuing CA, publish the template and restart CA service.
- Configure Group Policy: Computer Configuration → Policies → Windows Settings → Security Settings → Public Key Policies.
- Force policy update and test with a pilot OU before broad rollout.
22) Hands-On: OCSP & NDES Quick Starts
22.1 OCSP (Online Responder)
- Install the Online Responder role on a dedicated server.
- Provision an OCSP Response Signing certificate from a dedicated template.
- Define revocation configuration for each Issuing CA; verify status with
certutil -urlandpkiview.msc.
22.2 NDES (SCEP)
- Install NDES; configure RA certificates and service account.
- Integrate with MDM (e.g., Intune) using SCEP profiles.
- Harden the NDES server; rotate RA certs periodically; monitor event logs and 403/500 errors in IIS.
23) Troubleshooting Playbook
Use this structured approach to move from symptoms → layer → probable cause → fix.
23.1 Symptoms Matrix
- Enrollment fails: Permissions on template; CA unavailable; wrong subject rules; NDES RA cert expired; CES/CEP auth issues.
- Chain errors: Missing intermediate in store; stale AIA; wrong EKU; SHA-1 or weak algorithm; name mismatch.
- Revocation checks fail: CRL expired/unreachable; OCSP not trusted or wrong signing cert; firewall or proxy blocking.
- TLS handshake failures: SChannel mismatch (protocol/cipher); expired cert; missing private key; client doesn’t trust chain.
- Auto-enrollment silent failure: GPO link/permissions; blocked RPC; DCOM; template not published; user lacks Autoenroll.
23.2 First-Responder Commands
# On a client: refresh policy and force auto-enrollment
gpupdate /force
certutil -pulse
# Check auto-enrollment operational status
certutil -user -v -template
# Validate a server certificate chain and revocation
certutil -verify -urlfetch C:\Temp\server.cer
# Test OCSP for a specific certificate
certutil -ocsp C:\Temp\server.cer
# Inspect SChannel events (TLS failures) in Event Viewer:
# Applications and Services Logs → Microsoft → Windows → Schannel → System
23.3 Template & Permission Checks
- Open Certificate Templates MMC → check Security tab for Enroll/Autoenroll on proper groups.
- If using “Supply in the request,” ensure requesters can’t impersonate privileged subjects.
- Ensure “Application Policies” (EKUs) match the scenario (e.g., Server Authentication, Client Authentication, Code Signing).
23.4 AIA/CDP/OCSP Health
# Enterprise PKI health (run pkiview.msc)
# Fix red X items: expired CRLs, unreachable AIA/CDP URLs, wrong permissions on publication folders.
# Manually fetch artifacts
Invoke-WebRequest -Uri "http://pki.contoso.com/pki/contoso.crl" -OutFile C:\Temp\contoso.crl
Invoke-WebRequest -Uri "http://pki.contoso.com/pki/contosoCA.cer" -OutFile C:\Temp\contosoCA.cer
23.5 NDES/SCEP Quick Fixes
- Check RA certificates in the Local Computer store → NDES RA template validity.
- Validate IIS app pool identity and SPNs; ensure 2048+ keys and SHA-256.
- Look for HTTP 403/500 in IIS logs; verify SCEP URL in the MDM profile.
23.6 CES/CEP Checks
- Confirm Kerberos/NTLM or cert-based auth is configured as per your design.
- Validate service account delegation if constrained delegation is used.
- Ensure the service URL is reachable from the client network zones.
23.7 CA Service & Database
# Restart CA service after template/publication changes
net stop certsvc && net start certsvc
# Review CA database size and growth, and verify backups
certutil -backupdb C:\PKIBackups\CA_DB
certutil -backupKey C:\PKIBackups\Keys
# Query pending/failed requests
certutil -view -restrict "Disposition=9" # 9 = failed
certutil -view -restrict "Disposition=11" # 11 = revoked
24) PowerShell: Find Expiring Server Certificates at Scale
Run from an admin workstation with WinRM access to target servers.
$Servers = @("web01","api01","sql01")
$Days = 45
$Deadline = (Get-Date).AddDays($Days)
$results = foreach ($s in $Servers) {
try {
Invoke-Command -ComputerName $s -ScriptBlock {
Get-ChildItem Cert:\LocalMachine\My |
Where-Object { $_.NotAfter -lt $using:Deadline } |
Select-Object @{n='Server';e={$env:COMPUTERNAME}},
Subject, NotAfter, Thumbprint, HasPrivateKey
}
} catch {
[PSCustomObject]@{ Server=$s; Subject=$null; NotAfter=$null; Thumbprint=$null; HasPrivateKey=$null; Error=$_.Exception.Message }
}
}
$results | Sort-Object NotAfter | Format-Table -Auto
# Optionally export
$results | Export-Csv C:\Temp\ExpiringCerts.csv -NoTypeInformation
25) PowerShell: Auto-Enrollment Verification Report
# Ensure machines in a given OU have a Web Server certificate
Import-Module ActiveDirectory
$OU = "OU=Servers,DC=contoso,DC=com"
$computers = Get-ADComputer -SearchBase $OU -Filter *
$report = foreach ($c in $computers) {
try {
Invoke-Command -ComputerName $c.Name -ScriptBlock {
$cert = Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.EnhancedKeyUsageList.FriendlyName -contains "Server Authentication"
} | Sort-Object NotAfter -Descending | Select-Object -First 1
[PSCustomObject]@{
Computer=$env:COMPUTERNAME
HasServerAuthCert = [bool]$cert
NotAfter = $cert.NotAfter
Thumbprint = $cert.Thumbprint
}
}
} catch {
[PSCustomObject]@{ Computer=$c.Name; HasServerAuthCert=$false; NotAfter=$null; Thumbprint=$null; Error=$_.Exception.Message }
}
}
$report | Export-Csv C:\Temp\AutoEnrollReport.csv -NoTypeInformation
$report | Format-Table -Auto
26) Microsoft Graph: Intune Certificate Connector & Profile Health
If you integrate AD CS with Intune for SCEP/PKCS, the Microsoft Graph API helps you verify connector health and profile assignments.
The snippets below use the Microsoft Graph PowerShell SDK (Connect-MgGraph) and typical endpoints for device management.
26.1 List certificate connector details
# Install-Module Microsoft.Graph -Scope CurrentUser
Connect-MgGraph -Scopes "DeviceManagementConfiguration.Read.All","DeviceManagementManagedDevices.Read.All","DeviceManagementServiceConfig.Read.All"
Select-MgProfile -Name beta # If needed for newer endpoints
# List certificate connectors (preview/beta in some tenants)
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/certificateConnectorDetails" |
ConvertTo-Json -Depth 5
# Common fields to review: connectorName, machineName, status, lastHeartbeatDateTime
26.2 Retrieve SCEP profile assignments & status
# List SCEP profiles
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations?$filter=isof('microsoft.graph.androidDeviceOwnerScepCertificateProfile') or isof('microsoft.graph.windows10SCEPCertificateProfile')" |
ConvertTo-Json -Depth 6
# For a specific profile (replace {id}):
$profileId = "{PROFILE-ID}"
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations/$profileId/assignments" |
ConvertTo-Json -Depth 6
# Optional: device configuration status summary (varies by profile type)
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/deviceConfigurations/$profileId/deviceStatusSummary"
26.3 Find devices missing the expected client cert
# Example: Query managed Windows devices and check compliance or a custom attribute
# (Pair this with your Auto-Enrollment Verification Report)
Invoke-MgGraphRequest -Method GET -Uri "https://graph.microsoft.com/beta/deviceManagement/managedDevices?$filter=operatingSystem eq 'Windows'&$top=999" |
ConvertFrom-Json | Select-Object -ExpandProperty value |
Select-Object deviceName, userPrincipalName, complianceState, lastSyncDateTime
Tip: Combine Graph data (assignment/compliance) with on-device PowerShell checks to pinpoint where SCEP delivery is blocked (policy scope, connector offline, NDES errors) versus where the certificate exists but fails revocation or chain validation.
27) Security Pitfalls to Avoid
- Templates allowing any subject with Client Authentication EKU to enroll without strong identity proof—can enable privilege escalation.
- Publishing CRLs too infrequently—clients accept revoked certs during gaps.
- Large, long-lived multipurpose certs (“kitchen sink” EKUs) that blur roles and increase attack surface.
- NDES left with default URLs, default permissions, and weak RA key lifecycle.
28) Governance: Policies, Naming, and Change Control
- Naming: Consistent CN/SAN patterns (e.g.,
CN=<host>, SAN = FQDNs). - Change control: Require approvals for template changes; record before/after diffs and sign-off.
- Key lifecycle: Keys for signing vs. encryption separated; rotations planned; escrow auditable.
29) Checklists
29.1 Design Readiness
- Offline Root CA with HSM and ceremony docs.
- Two or more Issuing CAs for HA and maintenance windows.
- HTTP-based AIA/CDP with redundancy and short TTLs.
- OCSP responders sized for peak revocation traffic.
- NDES and CES/CEP in a secure DMZ or controlled zone.
29.2 Operational Hygiene
- Regular CRL publication and OCSP signer renewal.
- Template review every quarter; remove stale or risky templates.
- SIEM alerts for failed enrollments, sudden issuance spikes, or CA service restarts.
- Quarterly DR tests: CA DB restore, AIA/CDP/OCSP validation after failover.
30) FAQ
Q: Should I use ECDSA or RSA?
A: Prefer ECDSA where ecosystem support is mature (modern browsers, OS, load balancers). Otherwise use RSA-2048/3072 with SHA-256.
Q: Do I need OCSP if my CRLs are frequent?
A: For high-scale/low-latency apps, OCSP reduces bandwidth and speeds status checks. Many enterprises use both.
Q: Can AD CS issue public certs?
A: Keep public-facing names on public CAs to meet browser trust programs and CT logging requirements; use AD CS for internal names.
31) Further Reading (Authoritative)
- Microsoft Learn: AD CS Overview
- Microsoft: AD CS Best Practices
- Intune: Certificates with SCEP/PKCS
- Azure Key Vault Overview
Note: Internal keyword links in this article point to cloudknowledge.in as requested.
32) Wrap-Up
AD CS remains the enterprise standard for private trust. Combine a safe CA hierarchy, secure templates, strong AIA/CDP/OCSP design, and disciplined operations with the automation above (PowerShell, certutil, and Microsoft Graph) to keep outages rare and risk low. When in doubt, start with the health checks in this guide, fix revocation and chain issues first, and only then troubleshoot enrollment flows.











Leave a Reply