====== 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:** → [[..:disaster-recovery:notfall-revocation|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 =====
* [[.:zertifikat-ausstellen|Izdavanje certifikata]] – Zamjenski certifikat
* [[..:disaster-recovery:notfall-revocation|Hitni opoziv]] – Masovni opoziv
* [[hr:int:pqcrypt:szenarien:kurzreferenz:validierung|Kratki pregled validacije]] – Provjera CRL/OCSP
----
<< [[.:zertifikat-erneuern|← Obnova certifikata]] | [[.:health-check|→ Health Check]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>runbook certifikat opoziv revocation crl ocsp operator}}