Funzionamento parallelo

Complessità: Media
Durata: Illimitata (fino alla disattivazione Classic)
Rischio: Basso

Funzionamento simultaneo di PKI classica e Post-Quantum per massima compatibilità.


Architettura

flowchart TB subgraph CLASSIC["🔐 PKI CLASSICA"] CR[Root-CA classica] CI[Intermediate classica] CC[Certificati classici] end subgraph HYBRID["🔄 PKI IBRIDA"] HR[Root-CA ibrida] HI[Intermediate ibrida] HC[Certificati ibridi] end subgraph CLIENTS["👥 CLIENT"] OLD[Client legacy] NEW[Client moderni] end CR --> CI --> CC HR --> HI --> HC CC --> OLD HC --> NEW CC -.->|Fallback| NEW style CLASSIC fill:#ffebee style HYBRID fill:#e8f5e9


Quando funzionamento parallelo?

Scenario Raccomandazione
———-—————–
Sistemi legacy non aggiornabili ✓ Parallelo
Migrazione graduale su anni ✓ Parallelo
Requisiti normativi per retrocompatibilità ✓ Parallelo
Greenfield / Nuovo progetto ✗ Direttamente Hybrid
Tutti i client aggiornabili ✗ Migrazione Hybrid

Configurazione

Struttura directory

/etc/pki/
├── classic/
│   ├── root-ca.pem
│   ├── intermediate-ca.pem
│   ├── intermediate-ca.key
│   ├── crl/
│   └── issued/
├── hybrid/
│   ├── root-ca.pem
│   ├── intermediate-ca.pem
│   ├── intermediate-ca.key
│   ├── crl/
│   └── issued/
└── scripts/
    ├── issue-classic.sh
    ├── issue-hybrid.sh
    └── issue-both.sh

Script emissione duale

#!/bin/bash
# /etc/pki/scripts/issue-both.sh
# Emette un certificato da ENTRAMBE le PKI
 
CSR_FILE="$1"
OUTPUT_PREFIX="$2"
 
if [ -z "$CSR_FILE" ] || [ -z "$OUTPUT_PREFIX" ]; then
    echo "Utilizzo: $0 <file-csr> <prefisso-output>"
    exit 1
fi
 
# Emissione certificato classico
echo "Emissione certificato classico..."
openssl ca -config /etc/pki/classic/openssl.cnf \
    -in "$CSR_FILE" \
    -out "${OUTPUT_PREFIX}-classic.pem" \
    -days 365 \
    -batch
 
# Emissione certificato ibrido
echo "Emissione certificato ibrido..."
/usr/local/bin/wvds-sign --mode hybrid \
    --ca /etc/pki/hybrid/intermediate-ca.pfx \
    --csr "$CSR_FILE" \
    --out "${OUTPUT_PREFIX}-hybrid.pem" \
    --days 365
 
echo "Completato:"
echo "  Classico: ${OUTPUT_PREFIX}-classic.pem"
echo "  Ibrido:   ${OUTPUT_PREFIX}-hybrid.pem"

Configurazione server

Nginx: Certificato duale

server {
    listen 443 ssl;
    server_name api.example.com;
 
    # Primario: Certificato ibrido
    ssl_certificate     /etc/ssl/certs/api-hybrid.pem;
    ssl_certificate_key /etc/ssl/private/api.key;
}
 
# Alternativa: Server separato per Legacy
server {
    listen 443 ssl;
    server_name api-legacy.example.com;
 
    ssl_certificate     /etc/ssl/certs/api-classic.pem;
    ssl_certificate_key /etc/ssl/private/api.key;
}

Gestione Trust Store

Client con entrambe le CA

# Trust Store con entrambe le Root-CA
cat /etc/pki/classic/root-ca.pem /etc/pki/hybrid/root-ca.pem > /etc/ssl/certs/ca-bundle.pem
 
# Oppure aggiungerle singolarmente
update-ca-trust extract

Trust Store Windows

# Importare entrambe le Root-CA
Import-Certificate -FilePath "classic-root.cer" -CertStoreLocation Cert:\LocalMachine\Root
Import-Certificate -FilePath "hybrid-root.cer" -CertStoreLocation Cert:\LocalMachine\Root

CRL/OCSP per entrambe le PKI

# Distribuzione CRL
location /crl/classic/ {
    alias /etc/pki/classic/crl/;
    types { application/pkix-crl crl; }
}
 
location /crl/hybrid/ {
    alias /etc/pki/hybrid/crl/;
    types { application/pkix-crl crl; }
}

Monitoraggio

# Prometheus: Monitorare entrambe le PKI
scrape_configs:
  - job_name: 'pki-classic'
    static_configs:
      - targets: ['localhost:9793']
    relabel_configs:
      - target_label: pki
        replacement: 'classic'

  - job_name: 'pki-hybrid'
    static_configs:
      - targets: ['localhost:9793']
    relabel_configs:
      - target_label: pki
        replacement: 'hybrid'

Tracciamento migrazione

#!/bin/bash
# migration-status.sh - Stato avanzamento migrazione
 
echo "=== Stato migrazione PKI ==="
 
classic_count=$(find /etc/pki/classic/issued -name "*.pem" | wc -l)
hybrid_count=$(find /etc/pki/hybrid/issued -name "*.pem" | wc -l)
total=$((classic_count + hybrid_count))
 
if [ "$total" -gt 0 ]; then
    hybrid_percent=$((hybrid_count * 100 / total))
else
    hybrid_percent=0
fi
 
echo "Classici: $classic_count"
echo "Ibridi:   $hybrid_count"
echo "Totale:   $total"
echo "Migrazione: $hybrid_percent%"

Dismissione Classic

flowchart LR subgraph ACTIVE["✅ ATTIVO"] A1[Entrambe PKI attive] end subgraph TRANSITION["🔄 TRANSIZIONE"] T1[Classic: solo rinnovi] T2[Hybrid: nuovi certificati] end subgraph SUNSET["🌅 SUNSET"] S1[Classic: solo attivi] S2[Nessun nuovo cert Classic] end subgraph END["🛑 FINE"] E1[Classic disattivata] end ACTIVE --> TRANSITION --> SUNSET --> END style ACTIVE fill:#e8f5e9 style END fill:#ffebee

Timeline:

Fase Azione Trigger
————–———
Attivo Entrambe PKI emettono Inizio
Transizione Classic solo rinnovi 80% Hybrid
Sunset Classic lasciare scadere 95% Hybrid
Fine Classic-CA offline Tutti Classic scaduti

Checklist

# Punto di verifica
——————-
1 Entrambe PKI configurate
2 Script dual-issue funzionanti
3 Trust Store contengono entrambe CA
4 CRL/OCSP disponibili per entrambe
5 Monitoraggio attivo per entrambe
6 Tracciamento migrazione configurato
7 Piano phase-out documentato

Documentazione correlata


« ← Classic → Hybrid | → Strategia di rollback »


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

Zuletzt geändert: il 30/01/2026 alle 01:37