Runbook: Opoziv certifikata

Trajanje: ~5 minuta
Uloga: PKI operator / Security
Prioritet: VISOK kod kompromitacije


Workflow

flowchart TD A[Zahtjev za opoziv] --> B{Razlog?} B -->|Kompromitacija| C[ODMAH blokirati] B -->|Zamjena| D[Planirano blokiranje] B -->|Greška| E[Provjera + blokiranje] C --> F[Ažuriranje CRL-a] D --> F E --> F F --> G[Distribucija CRL-a] G --> H[Ažuriranje OCSP-a] H --> I[Obavijest] I --> J[Dokumentacija] style C fill:#ffebee style F fill:#fff3e0 style G fill:#e3f2fd


Razlozi opoziva (RFC 5280)

Kod Razlog Kada koristiti
—–——–—————-
0 unspecified Standard (ne preporučuje se)
1 keyCompromise Privatni ključ kompromitiran
2 cACompromise CA kompromitiran
3 affiliationChanged Promjena organizacije
4 superseded Zamijenjen novim certifikatom
5 cessationOfOperation Usluga ukinuta
9 privilegeWithdrawn Ovlasti opozvane

Korak 1: Identifikacija certifikata

# Pretraživanje po serijskom broju
openssl x509 -in certificate.pem -serial -subject -noout
 
# Pretraživanje u CA bazi podataka
grep -r "CN=server.example.com" /etc/pki/CA/index.txt
# PowerShell: Pronalaženje certifikata
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
    $_.Subject -like "*server.example.com*"
} | Select-Object SerialNumber, Subject, Thumbprint

Korak 2: Provođenje opoziva

OpenSSL (CLI)

# Opoziv certifikata
openssl ca -config openssl.cnf \
    -revoke /path/to/certificate.pem \
    -crl_reason keyCompromise
 
# Alternativa: Po serijskom broju
openssl ca -config openssl.cnf \
    -revoke_by_serial 01234567890ABCDEF \
    -crl_reason keyCompromise

C# (WvdS.System.Security.Cryptography)

// Opoziv certifikata i kreiranje CRL-a
var crlBuilder = new CertificateRevocationListBuilder();
 
// Dodavanje opoziva
crlBuilder.AddEntry(
    revokedCert.SerialNumber,
    DateTimeOffset.UtcNow,
    X509RevocationReason.KeyCompromise);
 
// Potpisivanje CRL-a (hibridni način)
using var issuerCert = new X509Certificate2("ca.pfx", "password");
var crlNumber = BigInteger.Parse("42");
var nextUpdate = DateTimeOffset.UtcNow.AddDays(7);
 
byte[] crl = crlBuilder.Build(
    issuerCert,
    crlNumber,
    nextUpdate,
    HashAlgorithmName.SHA384,
    CryptoMode.Hybrid);
 
File.WriteAllBytes("crl.der", crl);

Korak 3: Generiranje i distribucija CRL-a

# Generiranje novog CRL-a
openssl ca -config openssl.cnf -gencrl -out crl.pem
 
# Konverzija CRL-a u DER format (za distribuciju)
openssl crl -in crl.pem -outform DER -out crl.der
 
# Provjera CRL-a
openssl crl -in crl.pem -text -noout

Distribution Points:

Metoda Cilj Naredba
——–—————
HTTP Web server cp crl.der /var/www/pki/crl.der
LDAP Active Directory ldapmodify -f update-crl.ldif
CDP U certifikatu Automatski putem URL-a
# Kopiranje CRL-a na web server
scp crl.der webserver:/var/www/html/pki/crl.der
 
# Nginx/Apache Reload (ako postoji cache)
ssh webserver "systemctl reload nginx"

Korak 4: Ažuriranje OCSP-a (ako se koristi)

# Ažuriranje OCSP responder indexa (automatski kod OpenSSL CA)
# Responder čita /etc/pki/CA/index.txt
 
# Testiranje OCSP odgovora
openssl ocsp \
    -issuer intermediate.pem \
    -cert certificate.pem \
    -url http://ocsp.example.com \
    -resp_text

Očekivani odgovor nakon opoziva:

Cert Status: revoked
Revocation Time: Dec 15 10:30:00 2024 GMT
Revocation Reason: keyCompromise

Korak 5: Obavijest

Obavezne obavijesti:

Primatelj Metoda Sadržaj
———–——–———
Vlasnik certifikata E-Mail Serijski broj, razlog, sljedeći koraci
Security tim Ticket Detalji incidenta
Pogođeni sustavi Alert Automatski putem monitoringa
# Slanje e-mail predloška
cat << 'EOF' | mail -s "Certifikat opozvan - Potrebna akcija" admin@example.com
Certifikat je opozvan:
 
Serijski broj: 01:23:45:67:89:AB:CD:EF
Subject: CN=server.example.com
Razlog: Key Compromise
Datum: $(date -Iseconds)
 
Potrebna akcija:
1. Konfiguriranje usluge s novim certifikatom
2. Uklanjanje starog certifikata iz svih sustava
 
Za pitanja: pki-team@example.com
EOF

Korak 6: Dokumentacija

Polje Vrijednost
——-————
Serijski broj 01:23:45:67:89:AB:CD:EF
Subject CN=server.example.com
Razlog opoziva keyCompromise
Datum opoziva 2024-12-15 10:30:00 UTC
CRL broj 42
Operator Ime operatera
Ticket SEC-2024-0815

Nužda: Masovni opoziv

Kod kompromitacije CA:Runbook za hitni opoziv

# Opoziv svih certifikata jednog CA
for cert in /etc/pki/CA/newcerts/*.pem; do
    openssl ca -config openssl.cnf -revoke "$cert" -crl_reason cACompromise
done
 
# Novi CRL s kratkim rokom valjanosti
openssl ca -config openssl.cnf -gencrl -crldays 1 -out emergency-crl.pem

Kontrolna lista

# Točka provjere
—————-
1 Certifikat upisan u CRL
2 CRL potpisan i valjan
3 CRL dostupan na svim CDP-ovima
4 OCSP odgovara revoked
5 Vlasnik certifikata obaviješten
6 Security ticket dokumentiran

Rješavanje problema

Problem Uzrok Rješenje
—————-———-
already revoked Dvostruki opoziv Ignorirati
unknown serial Nije od ovog CA Provjeriti CA
CRL nevaljan Greška potpisa Provjeriti CA ključ
OCSP odgovara good Cache/Sync Ponovno pokrenuti OCSP responder

Povezani runbookovi


« ← Obnova certifikata | → Health Check »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: 30.01.2026. u 06:35