The friendliest Windows app for free Let's Encrypt certificates
- Download the latest architecture artifact from Actions/Releases (acm-win-x86, acm-win-x64, or acm-win-arm64)
- Extract the package and run
acm.exe - Go to “Issue New Certificate” tab and click the big button
Defaults to Let's Encrypt production (real certificates). Use the advanced options in Issue New Certificate to switch to staging when testing.
- Minimum runtime for development and source builds: .NET 10 (net10.0-windows).
- Minimum SDK for local build/test/publish commands: .NET SDK 10.0.
- Windows 10/11.
- Dashboard with big friendly buttons
- Issue wizard (domains, wildcards, HTTP-01 auto, DNS-01 plugin workflow)
- Manage certificates (list, expiry, renew/revoke)
- Logs tab with colored output
- Runtime folders auto-created next to the executable (plugins/, logs/, certs/, storage/)
- Self-contained single .exe (runs on any Windows 10/11)
At startup the app creates these folders beside the executable:
- plugins/ for DNS plugin DLL files
- logs/ for persistent log files
- certs/ for generated certificate files
- storage/ for account/config/secrets JSON files
Legacy root files are migrated to storage/ on startup.
Expected extracted structure:
- ACMECertManager/acm.exe
- ACMECertManager/plugins/
- ACMECertManager/logs/
- ACMECertManager/certs/
- ACMECertManager/storage/
Use an in-place upgrade so your certificates and settings stay intact.
Simple update steps:
- Close ACMECertManager if it is running.
- Download the new release package for your architecture.
- Extract/copy the new files into your existing ACMECertManager folder.
- Allow overwrite of app binaries (including acm.exe).
- Make sure these folders are still present after update: plugins/, logs/, certs/, storage/.
- Launch acm.exe.
What is preserved on upgrade (if you keep the same folder):
- certs/ (issued certificate files)
- storage/certificates.json (certificate list/metadata)
- storage/acme-account.json (ACME account key)
- storage/dns-secrets.json (saved DNS plugin credentials)
- storage/ui-settings.json (UI settings)
- logs/ (log history)
- plugins/ (DNS plugin DLLs you added)
What can be lost:
- If you delete the old folder before copying the new release, you lose local data unless you backed up and restored certs/, storage/, logs/, and plugins/.
- If certs/ is missing but storage/certificates.json exists, entries may remain but certificate files referenced by those entries may be missing.
- Put provider DLLs in plugins/.
- Launch the app and open Issue New Certificate.
- Select DNS-01 and choose a plugin from the dropdown.
- Fill required plugin fields.
- Issue certificate.
Operational sequence:
- Download the pre-built package for your architecture (x86, x64, ARM64).
- Extract the ACMECertManager directory from the archive.
- Verify acm.exe, plugins, logs, certs, and storage exist.
- Place desired DNS plugin DLLs into plugins/.
- Start the app to auto-scan and load plugin DLLs.
- Choose DNS-01 and select the plugin from the DNS dropdown.
- Enter plugin-required credentials and provider data.
- After issuance, certificate files are saved in certs/ and shown in Manage Certificates.
- Use Revoke Selected (CA) and Delete Selected (Local) for certificate lifecycle actions.
Warning: DNS plugin secrets are currently stored in plaintext in storage/dns-secrets.json.
Saved DNS credentials now default to the current certificate hostname as Domain/Context when available. Blank Domain/Context is only used when no hostname is provided.
Advanced ACME options (Issue New Certificate):
- Use Let's Encrypt staging server for test issuance.
- Optionally override with a custom ACME directory URL.
Certificate output and visibility:
- If PFX output is selected, issuance now validates that certificate.pfx was actually created.
- Issued certificates are persisted to storage/certificates.json and immediately reloaded into the Manage Certificates grid.
Way 1 – Easiest (GitHub Actions already built it)
- Go to Actions tab → click latest workflow → download your architecture artifact (
acm-win-x86,acm-win-x64,acm-win-arm64)
Way 2 – Build yourself
- Install free Visual Studio Code with .NET 10 support (or install .NET SDK 10.0).
- Open
ACMECertManager.sln - Press F5 to run immediately
- To create single .exe: right-click project → Publish → self-contained win-x64 → Publish
- Production is the default. Use staging from advanced options when testing to avoid rate limits.
- Run as Administrator first time (for HTTP-01 on port 80)
- Certificates auto-saved in
certs/folder - DNS plugin credentials are stored unsecured (plaintext) in
storage/dns-secrets.json
See PLUGIN_DEVELOPMENT.md for instructions on building custom DNS plugin DLLs.
Sample implementation included: samples/HurricaneElectricDnsPlugin
License: GPL v3