Download ADCS Health Check
One file, nothing to install. Verify the checksum before you run the script.
- Version
- 0.2.0
- Released
- Size
- 95 KB (97,185 bytes)
- Signature
- not signed yet (signature on its way)
- SHA256
12e450aeed46ea92cc4f743b42abfcf0df0c9ed8e8b07b44e507b8ea878c3e3a
Permanent link to this version: ADCS-HealthCheck-0.2.0.ps1
Verify the checksum
The hash must match the SHA256 value above. Only then unblock and run the file:
Get-FileHash .\ADCS-HealthCheck.ps1 -Algorithm SHA256
Unblock-File .\ADCS-HealthCheck.ps1
powershell -ExecutionPolicy Bypass -File .\ADCS-HealthCheck.ps1System requirements
- Windows Server or Windows client, member of a domain with an enterprise CA
- Windows PowerShell 5.1 or PowerShell 7 (on Windows)
- Domain account; read access to the CA for the CA database (e.g. CA administrator)
- No modules, no RSAT, no internet access needed
Changelog
0.2.0 – 2026-09-25
Bilingual, and moved to the new website certmon.de.
- Report and console in English and German. New parameter
-Language de|en; without it the language follows the Windows display language (German → German, anything else → English). - All texts live in one table per language; no more hard-coded texts in the code.
- Every finding has a stable
Id(e.g.CRL_EXPIRED,CRL_ORPHANED,CA_CERT_EXPIRING). Category and status are language-independent ids as well (CRL,CA_CERTS…;Critical,Warning,Info,OK). - JSON output changed: fields are now
id,category,status,object,message,recommendation,date(ISO 8601, UTC), pluslanguage,exitCodeandsummary. If you parse the JSON of 0.1.x, switch to the ids (previously German category and status names). - The waitlist link in the report points to
https://certmon.de/<de|en>/(with UTM parameters); product name "ADCS Health Check by certmon.de". Vendor remains 247-IT. - English dates in
yyyy-MM-ddformat, numbers formatted per language (1,284 / 1.284). - Minor: correct singular for "expired 1 day ago", findings start with a capital letter, "Freeware, provided as is without any warranty" note in the report.
- The build copies script, versioned copy, checksum,
version.jsonand sample reports (DE/EN) to the website (website/public/) after the tests pass. - README also in English (
README.en.md), draft license termsLICENSE.md.
0.1.2 – 2026-09-25
After test runs as domain admin (DC) and as a regular domain user (member server).
- Several expired CA certificates with the same name are combined into one line listing all expiry dates.
- Orphaned CRLs: more careful wording when the paths of the issued certificates could not be determined.
- The "other servers not checked" note also appears when the local certificate store is empty.
0.1.1 – 2026-09-24
Lessons from the first run in a real environment (DC with enterprise CA, CA moved in 2020).
- Orphaned CRLs after moving a CA are detected and reported as a note instead of critical (location not referenced and a newer version exists elsewhere). One entry per location instead of per base/delta.
- New note when the issued certificates contain no HTTP CRL path.
- CRL findings name the certificates that use the location.
- Local store: expired certificates from other issuers (e.g. Microsoft services) are only counted.
- Fix: the C# part compiles under Windows PowerShell 5.1 (warning treated as error on a bit operation).
- Minor: grammar in the chain validation.
0.1.0 – 2026-09-24
First version.
- Find enterprise CAs in AD, check availability
- CA certificates: expiry, key length, signature algorithm, chain validation with revocation status
- CRLs from AD and HTTP: expiry, overdue publishing, stale copies, missing LDAP objects
- CDP/AIA availability
- NTAuth store
- Expiring, not yet renewed certificates from the CA database
- Local computer store
- HTML report with traffic light (light/dark, mobile, printable), optional JSON, exit codes for RMM
- Demo mode for screenshots
Freeware, provided as is without any warranty. Use at your own risk. Questions: mail@247-it.com