Se avete messo in piedi ADFS (active directory federation services) per autenticare le utenze del vostro dominio in Office365 saprete che per mantenere la comunicazione tra il vostro servizio adfs ed office365 avete bisogno di un certificato che sia trustato da entrambi i server/servizi. Ovviamente si possono usare certificati generati da una CA pubblica, che tornano anche più comodi visto che sono di per se già trustati da entrambe le parti, ma è anche possibile utilizzare certificati self signed; il problema è che i certificati hanno una scadenza dopo la quale non sono più validi e quindi si rischia di interrompere la comunicazione tra i due siti.
Premessa: qualsiasi operazione di cui parlerò in questo articolo va eseguita sul server ADFS principale.
Cosa bisogna fare quando il certificato utilizzato sta per scadere? Rinnovarlo prima che scada ovviamente 🙂 e dato che ci si potrebbe dimenticare (office 365 comunque vi avvisa) la cosa più comoda è abilitare l’auto rinnovo.
Prima di tutto verificate se l’auto certificate rollover è abilitato, da powershell date questi due comandi:
PS C:\Windows\system32> Add-PSSnapin microsoft.adfs.powershell
PS C:\Windows\system32> Get-ADFSProperties
Il comando dovrebbe restituirvi dati simili a questi:
AutoCertificateRollover : True
CertificateCriticalThreshold : 2
CertificateDuration : 365
CertificateGenerationThreshold : 20
CertificatePromotionThreshold : 5
CertificateRolloverInterval : 720
La prima voce vi dice se l’auto rollover è abilitato o meno, se non lo fosse potete abilitarlo:
Set-ADFSProperties -AutoCertificateRollover $true
Le altre voci vi indicano altri parametri interessanti:
CertificateGenerationThreshold: indica quanti giorni prima della scadenza del certificato il vostro server adfs si autogenera un nuovo certificato
CertificatePromotionThreshold: quanti giorni prima della scadenza del certificato viene fatta la promozione da certificato secondario a certificato primario (si perché quando l’auto rollover genera un nuovo certificato in realtà non sostituisce quello principale ma ne crea uno secondario che va ad affiancarsi a quello principale in modo tale che, prima della scadenza del principale il nuovo certificato venga riconosciuto in tempo da office365 e dopo venga promosso a primario)
CertificateRolloverInterval: indica ogni quanti minuti il servizio adfs fa il check per vedere se deve generare nuovi certificati
CertificateCriticalThreshold: indica quanti giorni prima della scadenza adfs forza la generazione di un nuovo certificato anche nel caso non ci fosse tempo per replicarlo sui servizi di office365 (caso estremo)
Qui trovate la pagina ufficiale con tutti i parametri e le proprietà di adfs: http://social.technet.microsoft.com/wiki/contents/articles/16156.ad-fs-2-0-understanding-autocertificaterollover-threshold-properties.aspx
Un altro comando molto utile è quello di update se volete forzare la creazione di un nuovo certificato:
Update-ADFSCertificate
a cui eventualmente si può aggiungere il parametro -Urgent ma con molta attenzione perché mette direttamente il nuovo certificato come primario e se le info/metadata/certificati non vengono istantaneamente comunicati ad office365 perdiamo l’autenticazione, continuate a leggere…
Bene per ora abbiamo visto come modificare i parametri e come generare nuovi certificati lato adfs…. ma se cambiamo il certificato primario e non lo comunichiamo ad office365 ovviamente il certificato non verrà ritenuto valido e quindi si bloccherà tutto (ovvero le utenze non saranno più autenticate). Come fare quindi per trasferire i meta data ad office365 magari in maniera automatica? Fortunatamente Microsoft ci da una mano con questo script:
https://gallery.technet.microsoft.com/scriptcenter/Office-365-Federation-27410bdc
è uno script powershell, dovete scaricarlo ed eseguirlo, dovrete avere a disposizione un utente administrator del dominio on premises ed un utente administrator di office365, vi riporto tutti i prerequisiti, niente di particolarmente complesso ma assicuratevi di averli tutti:
To execute this tool successfully:
- You must make sure that you have installed the latest version of the Microsoft Online Services Module for Windows PowerShell
- You need to have a functioning AD FS 2.0 Federation Service
- You need to have access to Global Administrator credentials for your Office 365 tenant
- You need to have at least one verified domain in the Office 365 tenant must be of type ‘Federated’
- This tool must be executed on a writable Federation Server
- The currently logged on user must be a member of the local Administrators group
- The Microsoft Online Services Module for Windows PowerShell must be installed. You can download the module from http://onlinehelp.microsoft.com/en-us/office365-enterprises/ff652560.aspx
Ok se siamo a posto con i prerequisiti possiamo eseguire lo script che vi richiederà le due credenziali (on premises e office365) ed al termine dell’esecuzione vi genererà uno script in C:\Office365-Scripts\ e vi creerà in automatico uno scheduled task che eseguirà lo script ogni giorno. Questo script si occuperà di trasferire ad office365 tutte le modifiche dei metadata che comprendono anche le modifiche ai certificati; in questo modo siamo sicuri che ogni giorno ci sarà una sincronizzazione tra quello che abbiamo sul server adfs e quello che abbiamo su office365. In questo modo abbiamo chiuso il cerchio per quanto riguarda la gestione dell’AutoCertificateRollover.
Per chiarezza riassumo un attimo come dovrebbe funzionare tutto il giro con l’auto rollover configurato:
1) Quando si arriva al termine definito dal parametro CertificateGenerationThreshold viene generato un nuovo certificato che sarà impostato come secondario
2) In maniera automatica questo nuovo certificato sarà comunicato/trasferito ad office365 grazie allo scheduled task che esegue lo script contenuto in C:\Office365-Scripts\ ogni giorno e da quel momento sarà accettato come valido da office365
3) Al termine definito dal parametro CertificatePromotionThreshold il certificato secondario diventerà principale e sarà effettivamente utilizzato per la comunicazione e l’autenticazione tra adfs ed office365 e sarà ritenuto valido da office 365 perché “lo conosce già”