Guía de usuario de ACME para PKI Trust Manager
Habilite ACME en PKI Trust Manager e inscriba certificados con acme.sh, certbot o win-acme.
Esta guía explica cómo habilitar ACME en PKI Trust Manager e inscribir certificados con acme.sh, certbot o win-acme.
1. Cómo funciona ACME aquí#
PKI Trust Manager expone un servidor ACME RFC 8555 (parte de CertAPI). Los clientes se conectan a la URL directory de ACME, registran una cuenta con External Account Binding (EAB), crean una solicitud para un dominio y reciben el certificado emitido por su CA.
ACME client ──https──▶ https://<acme-fqdn>/acme/directory (nginx → CertAPI)
│ account (EAB) → order → finalize
▼
CAProxy(ca.ApiUrl) → caapi → ADCS → certificate
- EAB es obligatorio. El directory anuncia
externalAccountRequired: true; el servidor no acepta cuentas sin EAB. - La validación del dominio puede aprobarse automáticamente (
RequireDomainValidation = 0en la aplicación ACME) o exigirse mediantehttp-01/dns-01.
2. Configuración del administrador: habilitar ACME en PKI Trust Manager#
Realice estos pasos una vez para cada dominio ACME (en Web Admin UI o como administrador).
-
Crear una aplicación ACME
- Web Admin UI → Integrations → New
- Type: ACME
- Domain: nombre de host ACME, por ejemplo
acme.secure.tron(debe coincidir con el encabezado Host que enviará el cliente; sin puerto) - Certificate template: seleccione una plantilla asociada a su CA (por ejemplo,
Secure-WorkstationAuthentication→Secure-ISSUING-CA) - Require domain validation:
Offpara aprobar los desafíos automáticamente,Onparahttp-01/dns-01
-
Crear un usuario/entidad ACME (EAB)
- Web Admin UI → Users → Create → tipo ACME
- La interfaz genera y muestra dos valores; guárdelos.
- Key ID (KID) — por ejemplo,
58913e5c-1690-455c-9a73-834586af9daf - HMAC key — por ejemplo,
OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk - Estas son las credenciales EAB del cliente (
--eab-kid/--eab-hmac-key).
-
DNS
- Dirija el FQDN de ACME al servidor PKI Trust Manager:
acme.secure.tron → <server IP>
- Dirija el FQDN de ACME al servidor PKI Trust Manager:
-
Enrutamiento del proxy inverso (nginx)
- El FQDN de ACME debe dirigirse a CertAPI. Si implementó la solución con el script de instalación, añada el FQDN a los nombres ACME adicionales (
EXTRA_ACME_FQDNSen.env, por ejemploacme,acme2,acme3,acme-eab.secure.tron), vuelva a ejecutar la actualización de nginx (opción de implementación 2 — Add or Modify FQDNs), o añádalo aserver_nameennginx.minimal.confy vuelva a crear nginx. - Verifique:
curl -k https://<acme-fqdn>/acme/directorydebe devolver el directory de ACME.
- El FQDN de ACME debe dirigirse a CertAPI. Si implementó la solución con el script de instalación, añada el FQDN a los nombres ACME adicionales (
-
Configuración del cliente (opcional)
Acme, Enabled = truepara el cliente (valor predeterminado).CertificatePolicy, RequireApproval = falsepara la emisión automática.
3. Uso del cliente#
Todos los ejemplos utilizan
acme-eab.secure.tron, KID58913e5c-1690-455c-9a73-834586af9dafy HMACOTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk. Sustitúyalos por sus propios valores.
3a. acme.sh (Linux / macOS / Windows Git Bash)#
# install (one time)
curl https://get.acme.sh | sh
# issue (use http:// directory URL for lab setups with self-signed cert;
# directory advertises http:// URLs anyway)
~/.acme.sh/acme.sh --issue \
--server http://acme-eab.secure.tron/acme/directory \
-d acme-eab.secure.tron \
--eab-kid 58913e5c-1690-455c-9a73-834586af9daf \
--eab-hmac-key 'OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk' \
--webroot /tmp/acme-webroot \
--keylength 2048 \
--force
# certificates land in ~/.acme.sh/acme-eab.secure.tron/
# renew (acme.sh installs cron/task automatically; or run --renew manually)
~/.acme.sh/acme.sh --renew -d acme-eab.secure.tron --force3b. certbot (Linux / macOS / WSL2 en Windows)#
# install: Debian/Ubuntu
sudo apt-get install -y certbot
# macOS: brew install certbot
# Windows: use WSL2 (certbot has no native Windows support)
# LAB ONLY — trust PKI Trust Manager self-signed cert (certbot verifies TLS
# and has no insecure flag). Not needed with real certificate.
sudo cp /opt/pki-trust-manager/certs/cert.crt /usr/local/share/ca-certificates/pki-tm.crt
sudo update-ca-certificates
# issue (EAB + RSA 2048 are required — certbot defaults to ECDSA, which
# ADCS template rejects)
sudo certbot certonly --manual --preferred-challenges http \
--server https://acme-eab.secure.tron/acme/directory \
-d acme-eab.secure.tron \
--eab-kid 58913e5c-1690-455c-9a73-834586af9daf \
--eab-hmac-key 'OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk' \
--key-type rsa --rsa-key-size 2048 \
--manual-auth-hook 'true' \
--agree-tos -m [email protected] -n
# certificates land in /etc/letsencrypt/live/acme-eab.secure.tron/
# (certbot installs automatic renewal task)3c. win-acme (Windows nativo)#
# download + extract win-acme (no installer):
# https://github.com/win-acme/win-acme/releases (win-acme.v2.2.9.1701.x64.trimmed.zip)
# LAB ONLY — trust PKI Trust Manager self-signed cert in Windows store:
Import-Certificate -FilePath cert.crt -CertStoreLocation Cert:\CurrentUser\Root
# issue (filesystem validation avoids needing admin; server auto-passes)
.\wacs.exe --source manual --host acme-eab.secure.tron `
--baseuri https://acme-eab.secure.tron/acme/directory `
--eab-key-identifier 58913e5c-1690-455c-9a73-834586af9daf `
--eab-key OTiuWblfcWUzzxCkk4lPbrCrgWSB-h26UmakHGy04Lk `
--validation filesystem --webroot C:\certs\acmewebroot `
--store pemfiles --pemfilespath C:\certs `
--accepttos --emailaddress [email protected] --notaskscheduler
# certificates exported to C:\certs\ (acme-eab.secure.tron-crt.pem, -key.pem, -chain.pem)4. Verificación#
# issued certificate
openssl x509 -in <cert-file> -noout -subject -issuer -dates -ext subjectAltName
# expect: CN/SAN = your ACME domain, issuer = your CA (e.g. Secure-ISSUING-CA)En Web Admin UI, la inscripción aparece en Certificates con el estado Issued.
5. Solución de problemas#
| Síntoma | Causa / solución |
|---|---|
externalAccountRequired / errores EAB | Use valores válidos de --eab-kid / --eab-hmac-key del usuario ACME |
serverInternal al crear la cuenta | La vía sin EAB no está admitida; utilice siempre EAB |
certbot: denied by the CA | certbot eligió ECDSA de forma predeterminada; añada --key-type rsa --rsa-key-size 2048 |
acme.sh: curl error 60 | Certificado TLS autofirmado; use la URL directory http:// (laboratorio) o confíe en el certificado |
| certbot/win-acme: falla la verificación TLS | Importe el certificado autofirmado en el almacén de confianza (solo laboratorio) |
| El puerto 443 muestra Web UI en vez de ACME | Falta el FQDN de ACME en nginx server_name; añádalo a EXTRA_ACME_FQDNS y actualice nginx |
unauthorized en new-order | Acme:Enabled está desactivado para el cliente |
| Rechazo del tamaño de clave | Tamaño mínimo de clave de la plantilla ADCS; use RSA 2048 |
| win-acme: "Run as administrator" | La validación SelfHosting requiere administración; use --validation filesystem |
| win-acme: error renewal-info | Error no bloqueante del servidor en la imagen; el certificado se emite de todos modos |
6. Referencia — endpoints ACME#
| Endpoint | Puerto |
|---|---|
https://<fqdn>/acme/directory | 443 |
https://<fqdn>:8556/acme/directory | 8556 (puerto local dedicado de ACME) |
http://<fqdn>/acme/directory | 80 (el directory anuncia URL http://) |