API pro certifikáty¶
Správa životního cyklu certifikátů — žádost, vydání, odvolání, obnovení, import/export
Verze dokumentu: 1.2.0
Poslední aktualizace: 2026-08-23
Přehled endpointů¶
| Metoda | Endpoint | Popis |
|---|---|---|
| POST | /api/v1/certificates/csr |
Odeslat žádost o podpis certifikátu (CSR) |
| GET | /api/v1/certificates |
Zobrazit certifikáty |
| GET | /api/v1/certificates/:id |
Získat detail certifikátu |
| POST | /api/v1/certificates/:id/approve |
Schválit čekající CSR |
| POST | /api/v1/certificates/:id/reject |
Zamítnout čekající CSR |
| POST | /api/v1/certificates/:id/revoke |
Odvolat certifikát |
| POST | /api/v1/certificates/:id/unrevoke |
Zrušit odvolání certifikátu |
| GET | /api/v1/certificates/:id/export |
Exportovat certifikát |
| POST | /api/v1/certificates/import |
Importovat certifikát |
| POST | /api/v1/certificates/import/file |
Import souboru (PEM/DER/PFX) |
| POST | /api/v1/certificates/import/preview |
Náhled importu |
| POST | /api/v1/certificates/import/bulk |
Hromadný import (PEM balík) |
| GET | /api/v1/certificates/:id/status |
Získat stav odvolání |
| POST | /api/v1/certificates/:id/archive |
Archivovat certifikát |
| POST | /api/v1/certificates/:id/restore |
Obnovit certifikát z archivu |
| DELETE | /api/v1/certificates/:id/permanent |
Trvalé smazání |
| POST | /api/v1/certificates/:id/renew |
Obnovit (renew) certifikát |
| GET | /api/v1/certificates/:id/renewal-history |
Historie obnovení |
| GET | /api/v1/certificates/:id/rotation/config |
Konfigurace rotace |
| PUT | /api/v1/certificates/:id/rotation/config |
Aktualizovat konfiguraci rotace |
| POST | /api/v1/certificates/:id/rotation/trigger |
Spustit rotaci |
| GET | /api/v1/certificates/:id/rotation/history |
Historie rotace |
| CRUD | /api/v1/certificates/:id/targets |
Správa cílů rotace |
| POST | /api/v1/discovered-certificates/:id/assign |
Změnit vazbu objeveného inventáře na projekt |
| POST | /api/v1/discovered-certificates/:id/adopt |
Převzít objevený inventář jako spravovaný certifikát |
| POST | /api/v1/discovered-certificates/:id/import-key |
Importovat privátní klíč k převzatému certifikátu |
| POST | /api/v1/discovered-certificates/bulk/assign |
Hromadně změnit vazbu na projekt |
| POST | /api/v1/discovered-certificates/bulk/adopt |
Hromadně převzít objevený inventář |
| GET | /api/v1/ca/:id/crl |
Stáhnout CRL (DER, per-CA) |
| POST | /api/v1/ca/:id/crl/regenerate |
Vynutit regeneraci CRL |
Přiřazení a převzetí objeveného certifikátu¶
Operace assign a adopt mají odlišný dopad na životní cyklus:
| Operace | Způsobilý inventář | Výsledek |
|---|---|---|
assign |
Objevený inventář včetně položek již propojených se spravovaným certifikátem | Změní pouze vazbu na projekt. Pokud je inventář již spravovaný, jeho stav ve spravovaném životním cyklu zůstane zachován. |
adopt |
Nespravovaný inventář ve stavu DISCOVERED nebo ASSIGNED |
Vytvoří nebo propojí spravovaný certifikát a převede inventář do spravovaného životního cyklu. Cílem musí být certifikátový projekt a prostředí musí existovat v autentizované organizaci a být pro projekt povoleno. |
Přiřazení k projektu¶
POST /api/v1/discovered-certificates/550e8400-e29b-41d4-a716-446655440020/assign HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"project_id": "550e8400-e29b-41d4-a716-446655440001"
}
Přiřazení nevytvoří spravovaný certifikát a neresetuje existující spravovaný stav.
Převzetí do správy¶
POST /api/v1/discovered-certificates/550e8400-e29b-41d4-a716-446655440020/adopt HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"project_id": "550e8400-e29b-41d4-a716-446655440001",
"environment": "production",
"auto_renew_enabled": true
}
Převzetí zaznamená metadata certifikátu a vlastnictví životního cyklu, ale nepřenese do MazeVault úschovu privátního klíče. Nově vytvořený spravovaný certifikát má private_key_storage_mode nastaveno na none, i když discovery hlásí existenci privátního klíče ve zdrojovém umístění.
Úschova privátního klíče
Import privátního klíče je samostatná operace dostupná až po převzetí. Pokud chcete vědomě převést úschovu klíče do MazeVault, použijte POST /api/v1/discovered-certificates/:id/import-key. Samotné převzetí klíč nikdy neimportuje.
Hromadné operace¶
Hromadný výběr musí být homogenní: pro bulk/assign vyberte pouze spravovaný inventář, nebo pro bulk/adopt pouze nespravovaný inventář ve stavu DISCOVERED/ASSIGNED. Webové rozhraní smíšený výběr odmítne a ani přes API se nesmí odeslat jako jedna operace.
Odeslání CSR¶
Backend očekává předem vygenerovaný CSR v PEM formátu — klíčové páry a pole subjektu jsou zakódovány klientem před odesláním.
POST /api/v1/certificates/csr HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"csr_pem": "-----BEGIN CERTIFICATE REQUEST-----\nMIIC...\n-----END CERTIFICATE REQUEST-----",
"template_id": "tmpl_web_server",
"agent_id": "agent_abc123",
"project_id": "proj_abc123",
"requested_cn": "api.example.com"
}
Pole požadavku¶
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
csr_pem |
string | ✅ | PEM-kódovaný PKCS#10 CSR (vygenerovaný klientem) |
template_id |
string | ✅ | ID šablony certifikátu (tmpl_web_server, tmpl_client_auth atd.) |
agent_id |
string | — | ID agenta odesílajícího CSR |
project_id |
string | ✅ | ID projektu |
requested_cn |
string | — | Požadovaný Common Name (přepisuje CN v CSR, pokud to politika povoluje) |
Odpověď 201 Created¶
{
"id": "cert_def456",
"common_name": "api.example.com",
"status": "pending_approval",
"serial_number": "01:AB:CD:EF:12:34",
"ca_id": "ca_root001",
"project_id": "proj_abc123",
"requested_at": "2026-02-10T14:30:00Z",
"requested_by": "usr_abc123"
}
Výpis certifikátů¶
GET /api/v1/certificates?project_id=proj_abc123&status=active&page=1 HTTP/1.1
Authorization: Bearer <token>
Parametry dotazu¶
| Parametr | Typ | Popis |
|---|---|---|
project_id |
string | Filtrovat podle projektu |
status |
string | Filtrovat: active, pending_approval, revoked, expired |
ca_id |
string | Filtrovat podle vydávající CA |
common_name |
string | Vyhledávat podle CN (shoda podřetězce) |
expiring_within_days |
integer | Certifikáty s expirací do N dnů |
page |
integer | Číslo stránky |
per_page |
integer | Položek na stránku (max: 100) |
Odpověď 200 OK¶
{
"data": [
{
"id": "cert_def456",
"common_name": "api.example.com",
"serial_number": "01:AB:CD:EF:12:34",
"status": "active",
"issuer_cn": "MazeVault Internal CA",
"not_before": "2026-02-10T00:00:00Z",
"not_after": "2027-02-10T00:00:00Z",
"key_type": "RSA-2048",
"san": ["api.example.com", "api-internal.example.com"],
"project_id": "proj_abc123"
}
],
"pagination": {
"page": 1,
"per_page": 25,
"total": 1
}
}
Odvolání certifikátu¶
POST /api/v1/certificates/cert_def456/revoke HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"reason": "keyCompromise",
"comment": "Private key exposed in security incident"
}
Kódy důvodů odvolání (RFC 5280)¶
| Kód | Důvod | Popis |
|---|---|---|
| 0 | unspecified |
Bez konkrétního důvodu |
| 1 | keyCompromise |
Kompromitace privátního klíče |
| 2 | caCompromise |
Kompromitace privátního klíče CA |
| 3 | affiliationChanged |
Změna příslušnosti subjektu |
| 4 | superseded |
Certifikát nahrazen novým |
| 5 | cessationOfOperation |
Subjekt ukončil provoz |
| 6 | certificateHold |
Dočasné pozastavení (reverzibilní) |
Odpověď 200 OK¶
{
"id": "cert_def456",
"status": "revoked",
"revocation_reason": "keyCompromise",
"revoked_at": "2026-02-10T15:00:00Z",
"revoked_by": "usr_abc123"
}
Import certifikátu¶
Jednotlivý import¶
POST /api/v1/certificates/import HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"certificate_pem": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----",
"private_key_pem": "***REMOVED***",
"chain_pem": "-----BEGIN CERTIFICATE-----\nMIID...\n-----END CERTIFICATE-----",
"project_id": "proj_abc123"
}
| Pole | Typ | Povinné | Popis |
|---|---|---|---|
certificate_pem |
string | ✅ | Certifikát v PEM formátu |
private_key_pem |
string | — | Privátní klíč v PEM formátu |
chain_pem |
string | — | Řetězec CA v PEM formátu |
project_id |
string | ✅ | Cílový projekt |
Hromadný import (PEM balík)¶
POST /api/v1/certificates/import/bulk HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"pem_bundle": "-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----",
"project_id": "proj_abc123"
}
Export certifikátu¶
Parametry dotazu¶
| Parametr | Hodnoty | Popis |
|---|---|---|
format |
pem, der, pkcs12 |
Formát exportu |
include_chain |
true, false |
Zahrnout řetězec CA (výchozí: true) |
include_key |
true, false |
Zahrnout privátní klíč (výchozí: false) |
password |
string | Heslo pro PKCS#12 export (povinné pro pkcs12) |
Audit
Exporty certifikátů zahrnující privátní klíč jsou zaznamenány jako auditní události s vysokou závažností.
ACME protokol — endpointy¶
MazeVault poskytuje plnohodnotný ACME server (RFC 8555) pro automatizovanou správu certifikátů. Tyto endpointy využívají ACME klienti jako cert-manager.
Přehled ACME endpointů¶
| Metoda | Endpoint | Popis |
|---|---|---|
| GET | /api/acme/directory |
ACME adresář (discovery) |
| HEAD | /api/acme/new-nonce |
Získat replay-protection nonce |
| POST | /api/acme/new-nonce |
Získat replay-protection nonce |
| POST | /api/acme/new-account |
Registrace nového účtu (vyžaduje EAB) |
| POST | /api/acme/new-order |
Vytvoření objednávky certifikátu |
| POST | /api/acme/order/:id |
Získat stav objednávky |
| POST | /api/acme/authz/:id |
Získat detail autorizace |
| POST | /api/acme/challenge/:id |
Spustit validaci výzvy |
| POST | /api/acme/finalize/:id |
Odeslat CSR k podpisu |
| POST | /api/acme/cert/:id |
Stáhnout vydaný certifikát |
ACME adresář¶
Odpověď 200 OK:
{
"newNonce": "https://vault.example.com/api/acme/new-nonce",
"newAccount": "https://vault.example.com/api/acme/new-account",
"newOrder": "https://vault.example.com/api/acme/new-order",
"revokeCert": "https://vault.example.com/api/acme/revoke-cert",
"keyChange": "https://vault.example.com/api/acme/key-change",
"meta": {
"externalAccountRequired": true,
"profiles": {
"web-server": { "description": "Template: Web Server TLS" },
"client-auth": { "description": "Template: Client Authentication" }
}
}
}
Správa EAB přihlašovacích údajů¶
| Metoda | Endpoint | Oprávnění | Popis |
|---|---|---|---|
| POST | /api/v1/organizations/:id/acme-credentials |
ca:write |
Vytvořit EAB přihlašovací údaje |
| GET | /api/v1/organizations/:id/acme-credentials |
ca:read |
Vypsat EAB přihlašovací údaje |
| DELETE | /api/v1/organizations/:id/acme-credentials/:credId |
ca:write |
Odvolat EAB přihlašovací údaje |
Vytvoření EAB přihlašovacích údajů¶
POST /api/v1/organizations/{org_id}/acme-credentials HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"project_id": "proj_abc123",
"default_template_id": "tmpl_def456",
"cluster_label": "prod-aks-westeurope"
}
Odpověď 201 Created:
{
"id": "cred_xyz789",
"eab_key_id": "***REMOVED***",
"eab_hmac_key": "***REMOVED***",
"cluster_label": "prod-aks-westeurope",
"created_at": "2026-03-14T10:00:00Z"
}
Jednorázový HMAC klíč
Hodnota eab_hmac_key je vrácena pouze při vytvoření. Uložte ji bezpečně — později ji nelze získat.
Podrobný návod na nastavení ACME s cert-managerem a příklady Kubernetes YAML najdete v Návodu pro automatizaci certifikátů pomocí ACME.
Distribuce CRL¶
CRL endpointy jsou per-CA. Každá CA má svůj vlastní distribuční bod CRL.
Stažení CRL¶
Vrátí CRL ve formátu DER pro zadanou CA.
Vynucení regenerace CRL¶
POST /api/v1/ca/ca_root001/crl/regenerate HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
{
"type": "full"
}
| Pole | Hodnoty | Popis |
|---|---|---|
type |
full, delta |
Úplný CRL nebo delta CRL |
SCEP endpoint¶
SCEP operace odpovídají RFC 8894. Podporuje GetCACaps, GetCACert, PKIOperation.
Požadovaná oprávnění¶
| Operace | Požadované oprávnění |
|---|---|
| Odeslat CSR | certificate:request |
| Zobrazit certifikáty | certificate:read |
| Schválit/zamítnout CSR | certificate:approve |
| Odvolat certifikát | certificate:revoke |
| Importovat certifikát | certificate:import |
| Exportovat certifikát | certificate:read |
| Archivovat / Obnovit | certificate:archive |
| Trvalé smazání | certificate:permanent_delete |
| Spravovat konfiguraci rotace | rotation:write |
| Spustit rotaci | rotation:execute |
| Spustit obnovení | certificate:write |
| Spravovat CRL | ca:admin |
Archiv certifikátů a životní cyklus¶
Archivovat certifikát¶
Přesune certifikát do archivu.
Obnovit certifikát z archivu¶
Trvalé smazání¶
Nevratné
Trvalé smazání odstraní certifikát a veškerá přidružená data.
Rotace certifikátů¶
Automatizace rotace certifikátů do externích cílů (správci tajemství, load balancery, cloudové služby).
Získat konfiguraci rotace¶
Aktualizovat konfiguraci rotace¶
PUT /api/v1/certificates/cert_def456/rotation/config HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
Spustit rotaci¶
Historie rotace¶
Správa cílů rotace¶
| Metoda | Endpoint | Popis |
|---|---|---|
| POST | /api/v1/certificates/:id/targets |
Vytvořit cíl rotace |
| GET | /api/v1/certificates/:id/targets |
Vypsat cíle rotace |
| GET | /api/v1/certificates/:id/targets/:targetId |
Detail cíle |
| PUT | /api/v1/certificates/:id/targets/:targetId |
Aktualizovat cíl |
| DELETE | /api/v1/certificates/:id/targets/:targetId |
Smazat cíl |
| POST | /api/v1/certificates/:id/targets/:targetId/sync |
Ruční synchronizace cíle |
Obnovení certifikátu (Renewal)¶
Spustit obnovení¶
Historie obnovení¶
Fronta obnovení¶
| Metoda | Endpoint | Popis |
|---|---|---|
| GET | /api/v1/renewal-queue |
Seznam certifikátů čekajících na obnovení |
| POST | /api/v1/renewal-queue/:id/approve |
Schválit obnovení |
| POST | /api/v1/renewal-queue/:id/cancel |
Zrušit obnovení |
Náhled importu¶
Náhled certifikátů před importem:
POST /api/v1/certificates/import/preview HTTP/1.1
Authorization: Bearer <token>
Content-Type: application/json
Vrátí parsované detaily certifikátu bez importu.
Import souboru¶
POST /api/v1/certificates/import/file HTTP/1.1
Authorization: Bearer <token>
Content-Type: multipart/form-data
Přijímá soubory certifikátů (PEM, DER, PFX/PKCS#12) přes multipart upload.
Související¶
- Začínáme — Autentizace a základy API
- Průvodce správou certifikátů — Práce s certifikáty přes UI
- Konfigurace TLS — Nastavení nasazení TLS