What's Changed
Added
- Multi-CA management for the ACME client — UCM can now issue certificates from several external ACME authorities (Let's Encrypt, Actalis, ZeroSSL, Google Trust Services, HARICA…) instead of a single one. ACME CA accounts are managed from the UI (CRUD, per-account External Account Binding, default selection, registration status), each certificate request picks its issuing CA, and the order is pinned to that account so renewals stay on the same authority. The
AcmeClientOrder.acme_client_account_idforeign key (migration047) links each order to its external CA account;AcmeClientService.for_issuance(environment, account_id=)resolves explicit account > configured custom directory > Let's Encrypt environment, andfor_order(order)reuses the pinned account on verify/finalize/status/renewal (#149).
📜 Recent release history (last 2 versions)
[2.180] - 2026-06-30
Fixed
- Custom ACME CA directory and EAB are now honored for issuance and renewal — when a custom ACME directory URL was configured in Settings → ACME client (e.g. Actalis, ZeroSSL, Google Trust Services) together with External Account Binding credentials, certificate issuance and renewal still went to Let's Encrypt instead of the configured CA. The custom directory and the EAB persisted in
SystemConfigwere never used by the issuance/renewal path;acme.client.directory_urlwas effectively dead for issuance. A newAcmeClientService.for_issuance()factory reads the configured custom directory (over the Let's Encrypt staging/production mapping) and backfills legacy EAB fromSystemConfigonto theAcmeClientAccountrow, andfor_order()resolves the issuing account from the order's recordedaccount_urlso an order keeps its CA across changes to the directory setting. All issuance, verify, finalize, status, auto-poll and renewal entry points now route through these factories (#147).
[2.179] - 2026-06-27
Fixed
- Dashboard could not be scrolled on smaller desktop viewports — on laptops where the sidebar narrowed the grid below the large breakpoint, the dashboard rendered a non-scrollable multi-row grid clipped inside a fixed-height container, so the lower widgets (Recent Activity, System Health, ACME Accounts, Trust Store) were unreachable. The grid container now scrolls vertically when the layout overflows instead of being clipped (#144).
- Certificate linting no longer spawns a cascade of error toasts — the conformance-lint modal (
CertificateLintModal) retriggered its own fetch in a loop whenever a lint call failed, because the toast-dispatch callbacks it depended on were recreated on every render. Toast / notification callbacks are now stable, and the modal guards against concurrent lint calls, so a failed lint surfaces a single error instead of an unbounded stack (#145).
Added
- Downloadable diagnostic log bundle — Settings → About → Diagnostic exposes an admin-only button that downloads a ZIP of the most relevant logs (
ucm.log,error.log,access.log, the last lines of the systemd journal when available) plus a short secret-free system diagnostic (version, DB backend, migration number, services status). Sensitive tokens (Bearer credentials, passwords, API tokens, JWTs, PEM private-key blocks) are redacted before packaging, and each log file is capped so the bundle stays lightweight.
Full history: CHANGELOG.md
Installation
Docker (Recommended)
# From Docker Hub
docker pull neyslim/ultimate-ca-manager:2.181
# Or from GitHub Container Registry
docker pull ghcr.io/neyslim/ultimate-ca-manager:2.181
# Run
docker run -d -p 8443:8443 \
-e SECRET_KEY=$(openssl rand -hex 32) \
--name ucm neyslim/ultimate-ca-manager:2.181Debian/Ubuntu
wget https://github.com/NeySlim/ultimate-ca-manager/releases/download/v2.181/ucm_2.181_all.deb
sudo dpkg -i ucm_2.181_all.deb
sudo apt-get install -fFedora/RHEL
wget https://github.com/NeySlim/ultimate-ca-manager/releases/download/v2.181/ucm-2.181-1.fc43.noarch.rpm
sudo dnf install ./ucm-2.181-1.fc43.noarch.rpmSilent/Automated Install
# Skip firewall prompts for CI/automation
sudo UCM_PORT=8443 UCM_FIREWALL=no dpkg -i ucm_2.181_all.debDefault Credentials
- Username:
admin - Password:
changeme123
Change the password immediately after first login!
Documentation
- Installation Guide
- API Documentation