Migrazione AD CS: come spostare una Certification Authority Enterprise Root da Windows Server 2012 R2 a 2019 in sicurezza

Migrare una Certification Authority AD CS da Windows Server 2012 R2 a 2019 senza ricreare la PKI è possibile e sicuro con un approccio “side‑by‑side”. In questa guida trovi una procedura dettagliata, checklist, script e consigli per gestire anche il cambio di nome del server.

Indice

Scenario e obiettivo

L’utente amministra una Enterprise Root CA su Windows Server 2012 R2 e intende eseguire il passaggio a Windows Server 2019 mantenendo intatti:

  • la catena di fiducia esistente e tutti i certificati già emessi,
  • le chiavi della CA e il relativo certificato,
  • le impostazioni di pubblicazione CRL/AIA, i template e le policy.

Inoltre si chiede l’impatto di un cambio di nome del server durante la migrazione.

Perché scegliere la migrazione “side‑by‑side”

Microsoft scoraggia l’upgrade “in‑place” di una CA. La migrazione su un nuovo host 2019 riduce i rischi e consente rollback immediato. I principali vantaggi:

  • Rischio contenuto: il vecchio server resta operativo fino a validazione completata.
  • Finestra di fermo minima: la CA può essere resa disponibile subito dopo il restore.
  • Nessun impatto sui certificati esistenti: identità della CA invariata.
  • Possibilità di cambiare hostname senza toccare l’identità crittografica della CA.

Concetti chiave da fissare

  • Nome della CA (Common Name): è l’identità crittografica. Non va cambiato; cambiare il CN costringerebbe a rifare l’intera gerarchia PKI.
  • Nome del server (FQDN/NetBIOS): può cambiare. I certificati già emessi però contengono gli URI CRL/AIA; occorre garantirne la raggiungibilità (mantenere i vecchi percorsi o reindirizzarli).
  • CRL/AIA: gli URL di distribuzione delle liste di revoca (CRL) e dei certificati della CA (AIA) sono incisi nei certificati emessi. Devono rimanere validi per tutta la vita dei certificati.
  • Database CA: contiene richieste, certificati emessi, stato di revoca. Va migrato integralmente.
  • Chiavi private della CA: devono essere migrate, non rigenerate, per preservare la fiducia.

Prerequisiti e checklist

Prima di iniziare, verifica quanto segue.

ElementoVerificaNote
Patching 2012 R2Ultimi aggiornamenti installatiRiduce rischi di backup/restore.
Backup CADatabase, configurazione, chiavi, CRL/AIAVedi comandi di seguito.
Account servizioSe usi MSA/gMSA, presente anche sul nuovo hostPermessi su chiavi e percorsi di pubblicazione.
Tempo/NTPOra coerente su tutti i serverFondamentale per validità CRL/certificati.
Firewall/ACLPermessi su LDAP/SMB/HTTPDistribuzione CRL/AIA e auto‑enrollment.
Spazio e snapshotSnapshot VM o backup fullPer rollback rapido.

Schema di alto livello della migrazione

  1. Preparare backup completo sulla 2012 R2 e validare CRL/AIA.
  2. Installare un nuovo Windows Server 2019 (hostname diverso consigliato) e il ruolo AD CS senza configurarlo.
  3. Ripristinare la CA su 2019 riusando certificato e chiavi.
  4. Allineare i percorsi CRL/AIA (mantenendo quelli storici o impostando alias DNS/DFS).
  5. Verificare con pkiview.msc e test di emissione; poi dismettere la 2012 R2.

Backup e verifiche sul server 2012 R2

Esegui un backup completo con privilegi di amministratore della CA.

rem Backup database e registri CA
certutil -backupDB "D:\CA-Backup\DB"

rem Backup chiavi private e certificato CA (proteggi il PFX con password)
certutil -backupKey "D:\CA-Backup\KEY"

rem Esporta configurazione di registro
reg export "HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration" "D:\CA-Backup\CA-Config.reg" /y

rem Salva CRL e certificato della CA pubblicati
xcopy /e /i /y \\CertEnroll D:\CA-Backup\CertEnroll 

Valida la pubblicazione CRL/AIA:

certutil -getreg CA\CRLPublicationURLs
certutil -getreg CA\CACertPublicationURLs
pkiview.msc

Controlla che la CA stia emettendo regolarmente, che le CRL non siano in scadenza e che eventuali Delta CRL siano coerenti con la policy.

Preparazione del nuovo server Windows Server 2019

  • Unisci il server al dominio con nome diverso (consigliato), assegna IP e DNS corretti.
  • Installa il ruolo Active Directory Certificate Services, ma non configurare la CA in questa fase.
Install-WindowsFeature ADCS-Cert-Authority -IncludeManagementTools

Se usi un HSM, installa il provider e verifica che le chiavi possano essere importate. Se la CA è software‑based, il restore userà KSP/CSP originale (CAPI o CNG) senza generare nuove chiavi.

Ripristino della CA su 2019

  1. Copia backup, CRL e certificato della CA sul nuovo server (ad es. D:\CA-Restore).
  2. Avvia il wizard di configurazione AD CS e scegli Certification AuthorityEnterpriseUsa un certificato esistente e una chiave privata.
  3. Importa il PFX della CA (o seleziona il provider/HSM) e specifica il medesimo nome di CA della 2012 R2.
  4. Ripristina il database CA dal percorso salvato quando richiesto o con certutil -restoreDB a servizio fermo.
net stop certsvc
certutil -restoreDB "D:\CA-Restore\DB"
net start certsvc

Importa eventuali certificati della CA in AD e ripubblica CRL e AIA:

certutil -dspublish -f "D:\CA-Restore\CertEnroll<CA-Name>.crt" RootCA
certutil -crl

Allineamento dei percorsi CRL/AIA

Per non rompere i certificati già emessi, conserva gli URL storici. Esempio di configurazione mista (vecchio hostname mantenuto tramite alias DNS e share):

TipoURI consigliatiNote operative
CDP (CRL)ldap:///CN=<CAName>,<...>,CN=CDP,CN=Public Key Services,CN=Services,<ForestDN>?certificateRevocationList?base?objectClass=cRLDistributionPoint
http://pki.<domain>/CertEnroll/<CAName>.crl
file://\\OLD-CA\CertEnroll<CAName>.crl
Mantieni \\OLD-CA\CertEnroll come alias (DFS/CNAME) puntato alla nuova share.
AIA (CA cert)ldap:///CN=<CAName>,CN=AIA,CN=Public Key Services,CN=Services,<ForestDN>?cACertificate?base?objectClass=certificationAuthority
http://pki.<domain>/CertEnroll/<CAName>.crt
file://\\OLD-CA\CertEnroll<CAName>.crt
Assicura permessi di lettura anonimi su HTTP se usato per i client esterni.

Rivedi e applica i percorsi con:

certutil -getreg CA\CRLPublicationURLs
certutil -getreg CA\CACertPublicationURLs

rem Se devi modificarli:
certutil -setreg CA\CRLPublicationURLs ""
certutil -setreg CA\CACertPublicationURLs ""
net stop certsvc & net start certsvc
certutil -crl 

Opzione consigliata: crea un CNAME DNS old-canew-ca e/o pubblica la share \\OLD-CA\CertEnroll via DFS Namespace puntandola alla nuova share del 2019. In questo modo tutti gli URL storici rimangono validi.

Verifiche e test prima della dismissione

  • Apri Enterprise PKI (pkiview.msc) e verifica verde su AIA/CDP, compresa la Delta CRL se attiva.
  • Emetti un certificato di prova da un client e valida la catena:
certreq -new request.inf request.req
certreq -submit request.req issued.cer
certutil -verify -urlfetch issued.cer
  • Controlla che GPO, script, applicazioni (VPN, IIS, RADIUS, NDES/SCEP, Wi‑Fi) non referenzino percorsi hard‑coded con il vecchio hostname. Se sì, aggiorna o fornisci gli alias.
  • Se usi OCSP, aggiorna il responder con il certificato di firma su 2019 o ricrea il binding verso la CA migrata.

Dismissione sicura del vecchio server

  1. Pubblica una nuova CRL sul nuovo server e attendi propagazione AD/HTTP/SMB.
  2. Ferma il servizio sulla 2012 R2: net stop certsvc.
  3. Conferma dal client che catena e revoca siano ancora risolvibili solo tramite i nuovi percorsi/alias.
  4. Rimuovi il ruolo AD CS dalla 2012 R2. Mantieni un backup offline per eventuale emergenza.

Gestione del cambio nome server

Il cambio di hostname non impatta l’identità della CA se rispetti due regole:

  1. Il nome della CA resta lo stesso durante il restore.
  2. Gli URL CRL/AIA storici restano raggiungibili (alias DNS, DFS, re‑publishing su HTTP).

Dove può emergere la dipendenza dal vecchio nome:

  • GPO che puntano a \\OLD-CA\CertEnroll.
  • Script di infrastruttura (job di publishing manuale o backup).
  • Applicazioni con trust store o URL di CRL codificati.

Rimedi pratici:

  • Imposta un CNAME old-canew-ca.
  • Esponi la share storica via DFS (namespace invariato, target aggiornato).
  • Mantieni HTTPhttp://pki.domain/CertEnroll” invariato spostando il backend dietro IIS 2019.

Automazione utile con PowerShell

Alcuni snippet che velocizzano backup, restore e reporting.

# Esegui come amministratore sulla vecchia CA
$root = "D:\CA-Backup"
New-Item -ItemType Directory $root -Force | Out-Null

Backup DB e chiavi (ti verrà chiesta la password PFX)

certutil.exe -backupDB "$root\DB"
certutil.exe -backupKey "$root\KEY"

Esporta configurazione di registro

reg.exe export "HKLM\SYSTEM\CurrentControlSet\Services\CertSvc\Configuration" "$root\CA-Config.reg" /y

Copia CRL e cert della CA

robocopy \OLD-CA\CertEnroll "$root\CertEnroll" .crl .crt /e

Report degli URL CDP/AIA

"CDP:`n" + (certutil.exe -getreg CA\CRLPublicationURLs) | Out-File "$root\CDP.txt"
"`nAIA:`n" + (certutil.exe -getreg CA\CACertPublicationURLs) | Out-File "$root\AIA.txt" 
# Sul nuovo server, dopo l'installazione del ruolo
Ripristino DB e ripubblicazione CRL
net stop certsvc
certutil.exe -restoreDB "D:\CA-Restore\DB"
net start certsvc
certutil.exe -crl

Validazione post‑migrazione

Oltre a pkiview.msc, esegui questi controlli:

  • CA operativa: servizio CertSvc in esecuzione, nessun errore in Event Viewer > Applications and Services Logs > Microsoft > Windows > CertificateServices*.
  • CRL valide: verifica scadenze e overlap.
  • Auto‑enrollment: avvia su un client gpupdate /force e poi certutil -pulse.
  • Risoluzione URL: certutil -url http://pki.domain/CertEnroll/<CAName>.crl.

Piano di rollback

  1. Se la validazione fallisce, spegni la 2019, riaccendi la 2012 R2 (o ripristina snapshot) e ripubblica le CRL sul percorso storico.
  2. Analizza i log e riprova in laboratorio; la presenza di backup completo ti consente di tornare allo stato precedente senza perdita.

In‑place upgrade: pro e contro

AspettoSide‑by‑sideIn‑place upgrade
RischioBasso, server originale intattoAlto, rollback complesso
Fermo servizioMinimoProlungato
CompatibilitàIsolata, puoi testare primaDriver/agent potrebbero fallire
HostnamePuò cambiare senza impattoInvariato, ma upgrade a rischio

L’upgrade in‑place si considera solo in mancanza di hardware/VM aggiuntive, sempre con backup completo identico a quello richiesto per la migrazione.

Domande frequenti

Posso cambiare il nome della CA durante la migrazione?

No. Il CN della CA non deve cambiare. Se cambi il nome della CA, la fiducia dei certificati già emessi si interrompe e va ricostruita l’intera gerarchia.

Posso cambiare algoritmo/chiave della CA?

La migrazione non richiede re‑key. Se desideri rinnovare con nuova chiave (es. RSA‑4096 o passaggio a CNG), pianificalo come rinnovo separato dopo la migrazione, gestendo i certificati “cross‑certified” e le AIA.

Il cambio di hostname rompe i certificati già emessi?

Non se mantieni i vecchi URL CRL/AIA raggiungibili (alias DNS/DFS/HTTP) e non se il nome della CA resta invariato.

Uso un HSM: cosa cambia?

Verifica sul nuovo server il provider HSM e le politiche di export/import delle chiavi. Alcuni HSM non consentono l’export: in quel caso migri la chiave restando sullo stesso dispositivo o segui la procedura del vendor.

Devo ricreare i template dei certificati?

No. I template vivono in Active Directory; la CA migrata li ritroverà identici. Verifica soltanto le Autorizzazioni di emissione e le proprietà di auto‑enrollment.

Come gestire OCSP e NDES/SCEP?

OCSP: aggiorna il responder con il certificato di firma emesso dalla CA migrata. NDES: verifica i binding verso la CA e i permessi del servizio; spesso serve solo aggiornare l’hostname di destinazione se non usi alias.

Checklist rapida

  • Aggiorna 2012 R2 e verifica lo stato CRL.
  • Esegui backup di DB, chiavi, registro, CRL/AIA.
  • Prepara il 2019, uniscilo al dominio, installa il ruolo AD CS.
  • Configura la CA su 2019 riusando certificato e chiavi e stesso nome di CA.
  • Allinea CDP/AIA mantenendo anche l’hostname storico (alias DNS/DFS).
  • Verifica con pkiview.msc, emetti un certificato di prova e testa certutil -verify -urlfetch.
  • Allinea GPO/script/applicazioni che puntano al vecchio hostname.
  • Dismetti la 2012 R2 solo dopo validazione completa e pubblicazione CRL.

Appendice: esempi di policy CRL

Un’impostazione prudente prevede overlap per coprire la propagazione:

certutil -setreg CA\CRLPeriodUnits 7
certutil -setreg CA\CRLPeriod "Days"
certutil -setreg CA\CRLOverlapUnits 12
certutil -setreg CA\CRLOverlapPeriod "Hours"
net stop certsvc &amp; net start certsvc
certutil -crl

Adatta le unità alle tue policy di sicurezza e ai tempi di distribuzione.

Appendice: CAPolicy.inf di esempio

Se vuoi forzare impostazioni al prossimo rinnovo della CA, usa un CAPolicy.inf prima dell’operazione di renew (non necessario per la semplice migrazione):

[Version]
Signature="$Windows NT$"

[BasicConstraintsExtension]
PathLength=0
Critical=TRUE

[CRLDistributionPoint]
URL="[http://pki.<domain>/CertEnroll/<CAName>.crl](http://pki.<domain>/CertEnroll/<CAName>.crl)"

[AuthorityInformationAccess]
URL="[http://pki.<domain>/CertEnroll/<CAName>.crt](http://pki.<domain>/CertEnroll/<CAName>.crt)"

[certsrv_server]

AlternateSignatureAlgorithm=0

Riepilogo operativo

La strategia più sicura per migrare una Enterprise Root CA da 2012 R2 a 2019 è side‑by‑side su nuovo host: backup completo, restore delle stesse chiavi e dello stesso nome di CA, conservazione degli URL CRL/AIA storici (o reindirizzati). Con test accurati e alias appropriati, anche il cambio di hostname non comporta alcun impatto sui certificati già in circolazione.


Suggerimenti supplementari

  • Lab: replica la CA in laboratorio e prova la procedura end‑to‑end.
  • Snapshot: se la CA è virtualizzata, scatta un checkpoint prima delle modifiche.
  • Audit: monitora i log applicativi critici (VPN, Wi‑Fi, proxy, RADIUS, MDM) per errori di revoca.
  • Roadmap: lo stesso approccio ti agevolerà in futuro verso Windows Server 2022/2025.

Risorse utili per approfondire (senza collegamenti): cerca su Microsoft Learn le guide “Migrazione AD CS a Windows Server 2019”, “AD CS Migration: Migrating the Certification Authority” e la documentazione “Performing the Upgrade or Migration”.

Indice