====== 3.3 Obratovanje ======
Operativne naloge za infrastrukturo PQ-kriptografije.
----
===== Zdravstveni pregledi =====
Te preglede izvajajte redno:
==== Hitri pregled (dnevno) ====
# Ali je OpenSSL na voljo?
openssl version
# Pričakovano: OpenSSL 3.6.0 ali novejši
# Ali so PQ-algoritmi aktivni?
openssl list -signature-algorithms | grep -i "ml-dsa" | head -1
# Pričakovano: ML-DSA-44, ML-DSA-65 ali ML-DSA-87
==== Popolni zdravstveni pregled ====
**Linux/macOS:**
#!/bin/bash
echo "=== WvdS PQ Crypto Health Check ==="
# 1. OpenSSL
echo -n "OpenSSL: "
openssl version | grep -q "3\.[6-9]\|[4-9]\." && echo "OK" || echo "NAPAKA (Različica prestara)"
# 2. Podpora ML-DSA
echo -n "ML-DSA: "
openssl list -signature-algorithms 2>/dev/null | grep -qi "ml-dsa" && echo "OK" || echo "NAPAKA"
# 3. Podpora ML-KEM
echo -n "ML-KEM: "
openssl list -kem-algorithms 2>/dev/null | grep -qi "ml-kem" && echo "OK" || echo "NAPAKA"
# 4. Ponudnik
echo -n "Ponudnik: "
openssl list -providers | grep -q "default" && echo "OK" || echo "NAPAKA"
# 5. FIPS (opcijsko)
echo -n "FIPS: "
openssl list -providers | grep -qi "fips" && echo "OK" || echo "Ni konfigurirano"
# 6. .NET Runtime
echo -n ".NET 8: "
dotnet --list-runtimes 2>/dev/null | grep -q "NETCore.App 8" && echo "OK" || echo "NAPAKA"
echo "=== Zdravstveni pregled končan ==="
**Windows (PowerShell):**
Write-Host "=== WvdS PQ Crypto Health Check ===" -ForegroundColor Cyan
# 1. OpenSSL
$opensslVersion = & openssl version 2>$null
if ($opensslVersion -match "3\.[6-9]") {
Write-Host "OpenSSL: OK ($opensslVersion)" -ForegroundColor Green
} else {
Write-Host "OpenSSL: NAPAKA" -ForegroundColor Red
}
# 2. ML-DSA
$mldsa = & openssl list -signature-algorithms 2>$null | Select-String "ML-DSA"
if ($mldsa) {
Write-Host "ML-DSA: OK" -ForegroundColor Green
} else {
Write-Host "ML-DSA: NAPAKA" -ForegroundColor Red
}
# 3. ML-KEM
$mlkem = & openssl list -kem-algorithms 2>$null | Select-String "ML-KEM"
if ($mlkem) {
Write-Host "ML-KEM: OK" -ForegroundColor Green
} else {
Write-Host "ML-KEM: NAPAKA" -ForegroundColor Red
}
# 4. .NET
$dotnet = & dotnet --list-runtimes 2>$null | Select-String "NETCore.App 8"
if ($dotnet) {
Write-Host ".NET 8: OK" -ForegroundColor Green
} else {
Write-Host ".NET 8: NAPAKA" -ForegroundColor Red
}
Write-Host "=== Zdravstveni pregled končan ===" -ForegroundColor Cyan
----
===== Certifikati preko OpenSSL CLI =====
==== Ustvarjanje korenskega CA ====
**Klasično (RSA 4096):**
# 1. Generiraj zasebni ključ
openssl genpkey -algorithm RSA -out root-ca.key -pkeyopt rsa_keygen_bits:4096
# 2. Ustvari samopodpisani korenski CA
openssl req -new -x509 -key root-ca.key -out root-ca.crt -days 3650 \
-subj "/C=SI/O=Organizacija/CN=Korenski CA"
# 3. Prikaži certifikat
openssl x509 -in root-ca.crt -text -noout
**Post-kvantni (ML-DSA-65):**
# 1. Generiraj zasebni ključ ML-DSA
openssl genpkey -algorithm ML-DSA-65 -out root-ca-pq.key
# 2. Ustvari samopodpisani PQ korenski CA
openssl req -new -x509 -key root-ca-pq.key -out root-ca-pq.crt -days 3650 \
-subj "/C=SI/O=Organizacija/CN=PQ Korenski CA"
# 3. Prikaži certifikat
openssl x509 -in root-ca-pq.crt -text -noout
==== Ustvarjanje vmesnega CA ====
# 1. Zasebni ključ za vmesni CA
openssl genpkey -algorithm RSA -out intermediate.key -pkeyopt rsa_keygen_bits:4096
# 2. Ustvari CSR
openssl req -new -key intermediate.key -out intermediate.csr \
-subj "/C=SI/O=Organizacija/CN=Vmesni CA"
# 3. Podpiši s korenskim CA (z razširitvami CA)
openssl x509 -req -in intermediate.csr -CA root-ca.crt -CAkey root-ca.key \
-CAcreateserial -out intermediate.crt -days 1825 \
-extfile <(echo "basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign")
# 4. Preveri verigo
openssl verify -CAfile root-ca.crt intermediate.crt
==== Ustvarjanje certifikata končne entitete ====
# 1. Zasebni ključ
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
# 2. CSR s SAN (Subject Alternative Name)
openssl req -new -key server.key -out server.csr \
-subj "/C=SI/O=Organizacija/CN=server.example.com" \
-addext "subjectAltName=DNS:server.example.com,DNS:www.example.com"
# 3. Podpiši z vmesnim CA
openssl x509 -req -in server.csr -CA intermediate.crt -CAkey intermediate.key \
-CAcreateserial -out server.crt -days 365 \
-extfile <(echo "basicConstraints=CA:FALSE
keyUsage=critical,digitalSignature,keyEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=DNS:server.example.com,DNS:www.example.com")
# 4. Preveri celotno verigo
openssl verify -CAfile root-ca.crt -untrusted intermediate.crt server.crt
==== Pregled certifikata ====
# Prikaži podrobnosti certifikata
openssl x509 -in cert.crt -text -noout
# Samo Subject in Issuer
openssl x509 -in cert.crt -subject -issuer -noout
# Obdobje veljavnosti
openssl x509 -in cert.crt -dates -noout
# Prstni odtis
openssl x509 -in cert.crt -fingerprint -sha256 -noout
# Izvleci javni ključ
openssl x509 -in cert.crt -pubkey -noout
# Algoritem podpisa
openssl x509 -in cert.crt -text -noout | grep "Signature Algorithm"
==== Pretvorba formatov certifikatov ====
# PEM v DER
openssl x509 -in cert.pem -outform DER -out cert.der
# DER v PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
# PEM v PKCS#12 (PFX)
openssl pkcs12 -export -out cert.pfx -inkey private.key -in cert.crt -certfile ca-chain.crt
# PKCS#12 v PEM (certifikat + ključ)
openssl pkcs12 -in cert.pfx -out cert-and-key.pem -nodes
----
===== Upravljanje Trust Store =====
==== Windows Certificate Store ====
**Uvoz CA certifikata (PowerShell kot administrator):**
# Korenski CA v Trusted Root Certification Authorities
Import-Certificate -FilePath "root-ca.crt" -CertStoreLocation Cert:\LocalMachine\Root
# Vmesni CA v Intermediate Certification Authorities
Import-Certificate -FilePath "intermediate.crt" -CertStoreLocation Cert:\LocalMachine\CA
# Preveri
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Subject -like "*Root CA*"}
**Seznam certifikatov:**
# Vsi korenski CA
Get-ChildItem Cert:\LocalMachine\Root | Format-Table Subject, Thumbprint, NotAfter
# Certifikati, ki potečejo (< 30 dni)
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.NotAfter -lt (Get-Date).AddDays(30)} | Format-Table Subject, NotAfter
**Odstranitev certifikata:**
# Po prstnem odtisu
Get-ChildItem Cert:\LocalMachine\Root | Where-Object {$_.Thumbprint -eq "ABC123..."} | Remove-Item
==== Linux Trust Store ====
**Debian/Ubuntu:**
# Dodaj CA certifikat
sudo cp root-ca.crt /usr/local/share/ca-certificates/wvds-root-ca.crt
sudo update-ca-certificates
# Preveri
ls /etc/ssl/certs/ | grep wvds
# Odstrani certifikat
sudo rm /usr/local/share/ca-certificates/wvds-root-ca.crt
sudo update-ca-certificates --fresh
**RHEL/CentOS:**
# Dodaj CA certifikat
sudo cp root-ca.crt /etc/pki/ca-trust/source/anchors/wvds-root-ca.crt
sudo update-ca-trust
# Preveri
trust list | grep -A2 "WvdS"
==== macOS Keychain ====
# Dodaj CA v sistemski Keychain
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain root-ca.crt
# Preveri
security find-certificate -a -c "Root CA" /Library/Keychains/System.keychain
----
===== Varnostno kopiranje in obnovitev =====
**Komponente za varnostno kopiranje:**
^ Komponenta ^ Pot ^ Pogostost ^ Prioriteta ^
| Zasebni ključ korenskega CA | Shramba brez povezave | Po ustvarjanju | **Kritično** |
| Ključ vmesnega CA | Strežnik | Dnevno | Visoko |
| Shramba PQ-ključev | ''%LOCALAPPDATA%\WvdS.Crypto\PqKeys\'' | Dnevno | Visoko |
| Certifikati (PFX) | Imenik aplikacije | Po ustvarjanju | Srednje |
**Skript za varnostno kopiranje (Linux):**
#!/bin/bash
BACKUP_DIR="/backup/pq-crypto/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
# Shramba PQ-ključev
cp -r ~/.local/share/wvds-crypto/pqkeys/ "$BACKUP_DIR/"
# Certifikati
cp /etc/ssl/certs/wvds-*.crt "$BACKUP_DIR/"
# Zavaruj dovoljenja
chmod 700 "$BACKUP_DIR"
chmod 600 "$BACKUP_DIR"/*
echo "Varnostna kopija ustvarjena: $BACKUP_DIR"
**Pomembno:** Shramba PQ-ključev **ni** vključena v varnostno kopijo Windows Certificate Store!
----
===== Nadzor =====
**Nadzor poteka certifikatov:**
# Vsi certifikati z datumom poteka < 30 dni
for cert in /etc/ssl/certs/*.crt; do
expiry=$(openssl x509 -in "$cert" -enddate -noout 2>/dev/null | cut -d= -f2)
if [ -n "$expiry" ]; then
expiry_epoch=$(date -d "$expiry" +%s 2>/dev/null)
now_epoch=$(date +%s)
days_left=$(( (expiry_epoch - now_epoch) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "OPOZORILO: $cert poteče čez $days_left dni"
fi
fi
done
**Roki za obnovitev:**
^ Tip certifikata ^ Obnovitev pred potekom ^
| Korenski CA | 30 dni |
| Vmesni CA | 14 dni |
| Končna entiteta | 7 dni |
----
===== Nadaljnje branje =====
* [[.:troubleshooting|Odpravljanje napak]] – Reševanje operativnih težav
* [[..:konzepte:sicherheit|Varnost]] – Najboljše prakse
* [[.:konfiguration|Konfiguracija]] – Aktivacija FIPS-načina
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>betrieb zertifikate backup trust-store health-check openssl}}