Condividi tramite


Configurazione dei server di pubblicazione attendibili ClickOnce

 

Brian Noyes
Microsoft MVP

Aprile 2005

Si applica a:
   Visual Studio 2005

Riepilogo: La sicurezza ClickOnce consente di sfruttare le protezioni di sicurezza di runtime fornite dalla sicurezza dall'accesso al codice, consentendo comunque una determinazione dinamica delle autorizzazioni per una determinata applicazione nel punto in cui l'applicazione viene distribuita tramite ClickOnce. (11 pagine stampate)

Contenuto

Autori attendibili e firma dell'applicazione ClickOnce 101
Controlli di sicurezza ClickOnce all'avvio
Entra nella zona
ClickOnce Trusted Publishers in Action
Automazione del processo
Conclusione
Informazioni sull'autore

La sicurezza ClickOnce consente l'elevazione automatica dei privilegi per un'applicazione distribuita clickOnce in base alla richiesta dell'utente o agli autori attendibili. Quando si distribuisce un'applicazione con ClickOnce, le operazioni eseguite dall'applicazione o le risorse a cui tenta di accedere possono richiedere autorizzazioni di sicurezza dall'accesso al codice superiori a quelle concesse in base ai criteri correnti. In tal caso, per impostazione predefinita il runtime di .NET Framework nel computer client richiederà all'utente e chiederà all'utente se vuole installare l'applicazione e concedere l'attendibilità elevata.

In un ambiente aziendale in cui gli amministratori possiedono il controllo di configurazione e desktop su ogni desktop è possibile, è in genere preferibile evitare di dover richiedere all'utente decisioni di attendibilità. La maggior parte degli utenti non ha la complessità per comprendere le implicazioni delle decisioni di attendibilità e non sa quando deve o non deve concedere le autorizzazioni dell'applicazione. ClickOnce consente di controllare questo problema consentendo alle applicazioni ClickOnce di elevare automaticamente i propri privilegi senza richiedere conferma all'utente, se i manifesti dell'applicazione sono stati firmati da un autore attendibile.

Autori attendibili e firma dell'applicazione ClickOnce 101

Quindi cosa costituisce un editore attendibile? Prima di tutto, è necessario firmare sempre i manifesti della distribuzione e dell'applicazione ClickOnce con un certificato del server di pubblicazione. Successivamente, il certificato usato per firmare un'applicazione ClickOnce deve essere configurato nell'archivio certificati Autori attendibili nel computer dell'utente. Infine, l'autorità di certificazione che ha emesso il certificato deve essere configurata nell'archivio certificati autorità di certificazione radice attendibile nel computer dell'utente. Farò a volta gli strati di ognuno di questi tre pezzi.

Quando si crea un'applicazione Windows Forms in Visual Studio 2005 e la si pubblica con ClickOnce, Visual Studio genererà automaticamente un certificato di pubblicazione e lo userà per firmare l'applicazione al momento della pubblicazione. In questo modo, genera un file di certificato personale (file con estensione pfx) e lo aggiunge al progetto di Visual Studio con una convenzione di denominazione file predefinita di <ProjectName>_TemporaryKey.pfx. Visual Studio aggiungerà anche questo certificato all'archivio certificati personale e abiliterà le impostazioni del progetto che impostano questo certificato come quello da usare per firmare i manifesti dell'applicazione ClickOnce. Poiché tutto questo avviene automaticamente, potrebbe non essere neanche consapevole che si sta verificando.

Nota Beta 1 ha consentito di denominare i manifesti usando un file di chiave con nome sicuro (file con estensione snk per convenzione). Beta 2 e RTM non supportano più questa operazione ed è necessario firmare i manifesti con un certificato editore, in genere un file pfx che potrebbe o non essere protetto da password.

Il processo di firma usa le chiavi pubbliche e private nel certificato per applicare una firma digitale XML ai file manifesto XML di distribuzione e applicazione generati per un'applicazione ClickOnce. Questo approccio basato sulla firma digitale garantisce che si conosca chi ha firmato una determinata distribuzione dell'applicazione ClickOnce in base alla chiave pubblica incorporata nel file manifesto e che il file non sia stato manomesso o il relativo contenuto sia stato modificato in alcun modo dopo la firma. Ciò impedisce a un utente malintenzionato di aggiungere impostazioni o file imprevisti a un'applicazione ClickOnce dopo la pubblicazione da parte di un'autorità attendibile.

I certificati dell'editore sono disponibili in due versioni, ad esempio autogenerate o verificate da terze parti (ad esempio, da Verisign). Un certificato viene emesso da un'autorità di certificazione, che ha un certificato che lo identifica come autorità emittente di certificati. Un certificato autogenerato è quello creato a scopo di sviluppo e si diventa fondamentalmente sia l'autorità di certificazione che l'autore rappresentato dal certificato. Per essere usato per scopi di produzione, è consigliabile usare un certificato generato da terze parti, una società esterna come Verisign o un'autorità interna, ad esempio l'amministratore di dominio in un ambiente aziendale.

Per essere considerato un autore attendibile, il certificato dell'editore deve essere installato nell'archivio certificati Autori attendibili nel computer dell'utente e l'autorità emittente del certificato dell'editore deve avere il proprio certificato installato nell'archivio certificati Autorità di certificazione radice attendibile. È possibile usare la console di gestione dei certificati certmgr.exe in Windows per gestire e installare i certificati negli archivi nel computer ed è anche possibile installarli usando Visual Studio 2005. Verrà illustrato il processo di uso di Visual Studio più avanti in questo articolo.

Controlli di sicurezza ClickOnce all'avvio

Quando un'applicazione ClickOnce viene avviata per la prima volta sul desktop di un utente, il runtime di .NET Framework verifica prima di tutto che i manifesti dell'applicazione non siano stati manomessi perché sono stati firmati con qualsiasi certificato dell'editore usato per la firma. Se il controllo viene superato, il runtime esaminerà quindi l'archivio autorità di certificazione radice attendibile e verificherà se il certificato per l'autorità di certificazione del certificato dell'editore è installato in tale archivio. Esaminerà quindi chi è l'autore del certificato e verifica se il certificato si trova nell'archivio Autori attendibili. Se queste due cose sono vere, per impostazione predefinita l'utente non verrà richiesto e all'applicazione verranno concessi tutti i privilegi specificati nel file manifesto dell'applicazione. Un trust dell'applicazione per questa applicazione verrà aggiunto ai criteri di sicurezza di .NET Framework dell'utente, l'app verrà avviata ed eseguita e, se le autorizzazioni sono state specificate correttamente nel manifesto dell'applicazione, l'utente non dovrebbe mai visualizzare una richiesta o un'eccezione di sicurezza.

Se sia l'autorità emittente del certificato che l'autore rappresentato dal certificato sono sconosciuti nel computer client (in base ai certificati installati negli archivi), all'utente verrà chiesto di visualizzare la finestra di dialogo illustrata nella figura 1 e di decidere se consentire all'applicazione di ottenere i privilegi necessari, a seconda della zona da cui viene avviata l'applicazione. Se si fa clic sul collegamento Altre informazioni... nella parte inferiore, si otterrà la finestra di dialogo visualizzata nella figura 2, che fornisce all'utente un po'più dettagli su ciò che sta per accadere se fa clic sul pulsante Installa , ma in generale è probabilmente solo spaventarli, come la maggior parte delle finestre di dialogo di sicurezza, perché fornisce pochissime informazioni su ciò che sta realmente succedendo.

Figura 1. Richiesta utente dell'autore e dell'autorità di certificazione non attendibili

Figura 2. Finestra di dialogo Altre informazioni

Se il certificato usato per firmare i manifesti dell'applicazione viene generato da un'autorità di certificazione radice attendibile, ma il certificato dell'editore specifico non si trova nell'archivio autori attendibili, l'utente verrà comunque richiesto, ma con un prompt leggermente più descrittivo rispetto a quando l'autorità emittente del certificato dell'editore è sconosciuta (vedere la figura 3). Il prompt più descrittivo indicherà l'organizzazione dell'editore, perché con la tecnologia del certificato Authenticode e le radici attendibili, è possibile considerare attendibile almeno che l'organizzazione di pubblicazione sia chi dichiara di essere in base all'autorità emittente del certificato. Se si considera attendibile l'autorità emittente, è possibile considerare attendibile che l'editore non pretenda di essere qualcuno che non sono.

Figura 3. Richiesta utente autorità di certificazione attendibile

Dopo aver creato un trust dell'applicazione per una determinata applicazione, a causa della configurazione automatica basata su un certificato di autore attendibile o in base all'utente richiesto e consentendo l'installazione dell'applicazione, le versioni successive della stessa applicazione non dovranno richiedere di nuovo a meno che le autorizzazioni di sicurezza richieste non vengano modificate.

Entra nella zona

Esistono cinque zone di sicurezza predefinite usate nel sito di amministrazione centrale per decisioni di attendibilità basate sull'origine: MyComputer, LocalIntranet, Internet, TrustedSites e UntrustedSites. Queste stesse zone vengono usate per determinare quale tipo di richiesta deve essere consentita per gli utenti rispetto all'elevazione delle autorizzazioni dell'applicazione ClickOnce. Ogni zona corrisponde al contesto da cui viene avviata un'applicazione ClickOnce, determinata dall'indirizzo di percorso completo usato per il manifesto della distribuzione (file con estensione application) per l'applicazione ClickOnce.

La tabella 1 mostra alcuni esempi di zone di avvio in base all'indirizzo usato per il manifesto della distribuzione. Ciò che fondamentalmente si suddivide in è se l'indirizzo è un percorso di file locale a un'unità non di rete, l'applicazione verrà avviata nella zona MyComputer. Se l'indirizzo usa un protocollo di rete (condivisione file HTTP o UNC) e la parte del server dell'indirizzo è un singolo nome del computer, verrà valutata la provenienza dalla zona LocalIntranet. Se la parte del nome del server dell'indirizzo contiene punti, viene valutata come proveniente dall'area Internet. TrustedSites e UntrustedSites dipendono da singoli indirizzi configurati come parte delle impostazioni di sicurezza Siti attendibili e Siti con restrizioni di Internet Explorer.

Tabella 1. Esempi di zona di avvio ClickOnce

Indirizzo di avvio Zona di avvio
http://deploymentserver/MyClickOnceApp/MyClickOnceApp.application LocalIntranet
\\deploymentserver\MyClickOnceApp\MyClickOnceApp.application LocalIntranet
http://some.dotted.servername/Apps/MyClickOnceApp.application Internet
\\127.0.0.1\sharefolder\MyClickOnceApp.application Internet
C:\inetpub\wwwroot\MyClickOnceApp\MyClickOnceApp.application MyComputer

Per impostazione predefinita, MyComputer, LocalIntranet e TrustedSites sono configurati per consentire all'utente di richiedere privilegi di sicurezza elevati di un'applicazione ClickOnce se tale applicazione non è firmata da un autore attendibile. L'impostazione predefinita dell'area Internet è che se il manifesto dell'applicazione è firmato da un certificato autore emesso da un'autorità radice attendibile, tale applicazione può richiedere all'utente autorizzazioni elevate, se necessario, ovvero il certificato dell'editore non viene installato anche nell'archivio Autori attendibili. Se un'applicazione avviata dall'interno non è firmata con un certificato emesso da un'autorità radice attendibile, l'applicazione non potrà essere eseguita. L'impostazione predefinita dell'area UntrustedSites è che se l'applicazione non è firmata da un certificato di pubblicazione attendibile emesso da un'autorità radice attendibile, l'applicazione non potrà essere eseguita (in altre parole, non è consentita alcuna richiesta da parte dell'utente).

Queste impostazioni possono essere modificate se si desidera per l'azienda configurando una chiave del Registro di sistema oscura che verrà controllata da ClickOnce per determinare i criteri di richiesta dell'utente. Ognuno dei comportamenti descritti in precedenza corrisponde a un valore che è possibile impostare per ognuna delle zone tramite questa chiave del Registro di sistema.

Chiave del Registro di sistema \HKLM\Software\Microsoft\. NETFramework\Security\TrustManager\PromptingLevel è quello che consente di personalizzare il comportamento di richiesta. Questa chiave non è presente per impostazione predefinita dopo un'installazione di .NET Framework 2.0, quindi sarà necessario crearla manualmente se si desidera personalizzare queste impostazioni.

In tale chiave del Registro di sistema è possibile aggiungere uno qualsiasi di 5 valori stringa, denominati MyComputer, LocalIntranet, Internet, TrustedSites e UntrustedSites. Questi corrispondono alle rispettive zone. Come valore per questi valori, è possibile impostare una delle tre stringhe: Enabled, Disabled o AuthenticodeRequired. Enabled è l'impostazione predefinita per le aree MyComputer, LocalIntranet e TrustedSites. L'impostazione predefinita di Internet è AuthenticodeRequired e l'impostazione predefinita UntrustedSites è Disabled. La tabella 2 mostra i valori che è possibile impostare per ogni zona e i relativi effetti. La figura 4 mostra i valori delle chiavi del Registro di sistema impostati sul comportamento predefinito, ma tenere presente che questa chiave non esiste per impostazione predefinita, quindi in genere verrà creata solo se si intende impostarle su valori diversi rispetto alle impostazioni predefinite.

Tabella 2. Richiesta degli effetti di avvio della chiave del Registro di sistemaLevel

Valore Autorità radice non attendibile Certificato rilasciato dall'autorità radice attendibile Autorità radice attendibile e certificato di pubblicazione attendibile
Attivato Richiesta utente non amichevole Richiesta utente descrittiva Nessun prompt; autorizzazioni concesse e avvio dell'app
AuthenticodeRequired Applicazione disabilitata Richiesta utente descrittiva Nessun prompt; autorizzazioni concesse e avvio dell'app
Disabled Applicazione disabilitata Applicazione disabilitata Nessun prompt; autorizzazioni concesse e avvio dell'app

Figura 4. Valore della chiave del Registro di sistema richiesto dall'utente

ClickOnce Trusted Publishers in Action

Per testare questo problema, è necessario configurare i certificati nel computer di sviluppo. Il primo passaggio consiste nell'avere un certificato da usare per firmare le app ClickOnce e configurare tale certificato negli archivi certificati desiderati nel computer di sviluppo o test. Come accennato in precedenza, Visual Studio genererà un nuovo certificato per ogni progetto ClickOnce, a meno che non si configura un certificato da usare per firmare i manifesti ClickOnce prima di pubblicare prima l'applicazione. È consigliabile generare un nuovo certificato di test, salvarlo in una posizione nota e quindi usarlo per firmare tutti i progetti ClickOnce di sviluppo in modo che non sia necessario spaccare gli archivi certificati con un gruppo di certificati di test. Il certificato generato automaticamente non è protetto da password e è consigliabile usare solo i file di certificato protetti da password.

Per generare un nuovo file di certificato in Visual Studio 2005 protetto da password, passare alla finestra delle proprietà del progetto (fare doppio clic sul nodo Proprietà in Esplora soluzioni o fare clic con il pulsante destro del mouse sul nodo del progetto e selezionare Proprietà dal menu di scelta rapida). Selezionare la scheda Firma , selezionare la casella di controllo Firma i manifesti ClickOnce e fare clic sul pulsante Crea certificato di test... (vedere La figura 5). Verrà richiesto di immettere una password e verrà aggiunto un nuovo file pfx con un nome predefinito al progetto. Questo certificato verrà impostato anche come certificato usato per firmare i manifesti e verrà installato nell'archivio certificati personale in Windows. È quindi possibile rinominare il file, copiarlo in un percorso riutilizzabile e quindi configurare tale certificato come certificato per qualsiasi applicazione premendo il pulsante Seleziona da file nella scheda Firma .

Figura 5. Proprietà del progetto di firma

Dopo aver ottenuto un certificato e identificato quale usare per firmare i manifesti ClickOnce nelle proprietà del progetto di firma, è possibile pubblicare l'applicazione da Visual Studio e i manifesti verranno firmati con tale certificato. Se si ha un certificato di pubblicazione "reale", ovvero verisign uno o uno che l'organizzazione di sviluppo usa un'altra autorità radice attendibile, è possibile usare tale certificato, ovvero da un file descritto in precedenza o puntando al certificato nell'archivio personale dei certificati usando il pulsante Select From Store ... nelle proprietà del progetto di firma.

Per vedere come è possibile evitare una richiesta utente con una distribuzione attendibile del server di pubblicazione, è necessario configurare il certificato del server di pubblicazione nel computer in cui verrà avviata l'app con ClickOnce, che spesso è il computer di sviluppo a scopo di prima valutazione e sviluppo. Se il certificato è stato generato come descritto in precedenza (o usando l'utilità da riga di comando makecert.exe fornita con Visual Studio), sarà necessario aggiungere tale certificato all'archivio Autorità di certificazione radice attendibili. Ciò è dovuto al fatto che non si è solo l'editore, ma si è anche l'autorità emittente del certificato. Si vuole quindi installare lo stesso certificato nell'archivio Server di pubblicazione attendibili, ovvero il passaggio finale che consente all'applicazione di avviare senza richiedere alcuna richiesta.

Per rendere tutto concreto, esaminiamo un esempio dei numeri. Avviare un nuovo progetto applicazione Windows in Visual Studio 2005 e assegnarne il nome ClickOnceTrustedPub. Dopo aver creato il progetto, passare alle proprietà del progetto facendo doppio clic sul nodo Proprietà nell'albero Esplora soluzioni nel nodo del progetto e selezionare la scheda Firma.

Selezionare quindi la casella per firmare i manifesti ClickOnce. Premere il pulsante Crea certificato di test e immettere una password per il certificato. Il file che verrà creato e aggiunto al progetto verrà denominato ClickOnceTrustedPub_TemporaryKey.pfx. Rinominarla in devcert.pfx in Esplora soluzioni. Questo sarebbe anche un buon momento per copiare il file in una cartella di sviluppo comune nel computer in modo che sia possibile riutilizzarla per i progetti successivi e non dover mantenere rigenerare e configurare i certificati. Quando si crea il file di certificato, Visual Studio lo ha installato anche nell'archivio personale dei certificati.

Per aggiungere questo certificato all'autorità di certificazione radice attendibile e agli archivi di pubblicazione attendibili, fare clic sul pulsante Altri dettagli nella scheda Proprietà del progetto di firma. Viene visualizzata la finestra di dialogo informazioni sul certificato (vedere la figura 6). Fare clic sul pulsante Installa certificato... nella parte inferiore della scheda Generale e verrà visualizzata l'Importazione guidata certificati.

Figura 6. Finestra di dialogo Certificate information (Informazioni certificato)

Nel secondo passaggio della procedura guidata selezionare il pulsante di opzione Per inserire tutti i certificati nell'archivio seguente, quindi premere il pulsante Sfoglia (vedere Figura 7). Verrà aperta una finestra di dialogo in cui è possibile selezionare dall'elenco degli archivi certificati (vedere la figura 8).

Figura 7. Selezione dell'archivio guidata certificati

Figura 8. Finestra di dialogo Selezione archivio certificati

La prima volta che si esegue questo processo, selezionare l'archivio Autorità di certificazione radice attendibili , fare clic su Avanti e quindi fine nella procedura guidata. Verrà richiesto un dialogo dettagliato di avviso sulla sicurezza sui rischi per l'installazione di un certificato dell'autorità radice. Andare avanti e fare clic su oppure non sarà possibile provare la funzionalità del server di pubblicazione attendibile di ClickOnce, ma assicurarsi di comprendere il rischio che venga descritto. Se un altro utente ha ottenuto il certificato, firmato un'applicazione con esso e quindi la ha avviata nel computer, Windows considera l'applicazione come pubblicata da un'azienda verificata da un'autorità attendibile.

Ripetere il processo descritto a partire dal pulsante Altri dettagli , ma questa volta installare lo stesso certificato nell'archivio Server di pubblicazione attendibili.

Dopo aver eseguito questa operazione, è possibile pubblicare l'applicazione con ClickOnce. A tale scopo, selezionare Pubblica<ProjectName> dal menu Compila in Visual Studio e fare clic su Fine nella procedura guidata visualizzata. Verrà creata l'app, pubblicata con le impostazioni di pubblicazione ClickOnce predefinite e verrà visualizzata una pagina Web da cui è possibile testare l'installazione come client facendo clic sul pulsante Installa nella pagina Web. Se si fa clic su questo pulsante, l'applicazione deve scaricare ed eseguire sul desktop senza alcuna forma di richiesta. Le autorizzazioni predefinite richieste da un'applicazione ClickOnce sono senza restrizioni (attendibilità completa) e il collegamento del pulsante Installa predefinito presentato usa un URL della zona LocalIntranet. Quindi, se si è ripetuto questo stesso processo senza aver configurato il certificato di pubblicazione attendibile, è stato richiesto con la finestra di dialogo visualizzata nella figura 1.

Automazione del processo

In un ambiente operativo con molti computer utente da gestire, non si avrà Visual Studio disponibile in ogni computer per configurare i certificati di pubblicazione, quindi sarà necessario usare la console di gestione dei certificati (certmgr.exe) inclusa in Windows. Se si esegue solo certmgr.exe senza argomenti da una riga di comando, viene visualizzata una finestra di Microsoft Management Console (MMC) che consente di aggiungere o rimuovere certificati da uno degli archivi nel computer locale. Ma anche con questo, potrebbe non essere necessario toccare ogni computer per configurare i certificati. Il processo può essere automatizzato anche usando certmgr.exe con alcuni parametri della riga di comando.

Per prima cosa è necessario esportare la parte pubblica di un certificato in un file di certificato (.cer) da certmgr usando il pulsante Esporta :

Figura 9. Certmgr.exe l'esportazione dei certificati

Dopo aver eseguito questa operazione, è possibile copiare il file del certificato in un computer di destinazione ed eseguire certmgr.exe nella riga di comando. Sarà necessario passare il nome del file insieme al quale archiviarlo per inserirlo come parametri della riga di comando con le opzioni appropriate e che installerà il certificato nel computer:

certmgr –add alice.cer –s Root
certmgr –add alice.cer –s TrustedPublisher

Tutto questo può essere scriptato o aggiunto a un programma di installazione personalizzato tramite un progetto di installazione e distribuzione di Visual Studio (o qualche altra forma di programma di installazione) e il pacchetto di Windows Installer risultante (.msi file) può essere aggiunto al bootstrapper per l'applicazione ClickOnce. Per altre informazioni sul bootstrapper, vedere l'articolo di Sean Draine usare il bootstrapper di Visual Studio 2005 per Kick-Start l'installazione nel numero di ottobre 2004 di MSDN Magazine.

Conclusione

La sicurezza ClickOnce consente di sfruttare le protezioni di sicurezza di runtime fornite dalla sicurezza di accesso al codice, consentendo comunque una determinazione dinamica delle autorizzazioni per un'applicazione specifica al punto in cui l'applicazione viene distribuita tramite ClickOnce. Tuttavia, questa flessibilità arriva a un prezzo: è necessario decidere se consentire all'utente di essere quello responsabile dell'elevazione delle autorizzazioni dell'applicazione tramite richiesta e se si vuole che la richiesta sia basata su dove proviene il certificato del server di pubblicazione. Il comportamento predefinito di ClickOnce è il più semplice da comprendere. Un'applicazione eseguirà automaticamente l'elevazione delle autorizzazioni perché viene distribuita da un server di pubblicazione attendibile oppure richiederà all'utente di decidere se considerare attendibile il server di pubblicazione. In ambienti più controllati, è possibile limitare la richiesta dell'utente e questo articolo ha descritto come eseguire questa operazione usando la chiave del Registro di sistema PromptingLevel e la configurazione dei certificati dell'autorità radice attendibile e del server di pubblicazione nel computer dell'utente. Comprendere gli effetti dei vari valori e come si comportano con configurazioni diverse dell'archivio certificati è importante usare correttamente le protezioni di sicurezza di ClickOnce.

 

Informazioni sull'autore

Brian Noyes è un relatore di Microsoft MVP e noto relatore, allenatore, scrittore e consulente con IDesign, Inc. (www.idesign.net). Parla presso TechEd US e Malesia, Visual Studio Connections, VSLive!, DevEssentials e altre conferenze ed è uno dei relatori più valutati dell'Ufficio relatori INETA. Ha pubblicato numerosi articoli sullo sviluppo di .NET Framework per MSDN Magazine, Visual Studio Magazine, asp.netPRO, The Server Side .NET, CoDe Magazine, .NET Developer's Journal e altre pubblicazioni. Il suo ultimo libro, Data Binding in Windows Forms 2.0, parte della Addison-Wesley .NET Development Series, raggiungerà gli scaffali nell'autunno del 2005. Brian ha iniziato a programmare per stimolare il suo cervello mentre volava F-14 Tomcats nella Marina, applicando le sue competenze e interesse per la programmazione di simulazioni di aeromobili e avionica, prototipi e applicazioni di supporto mentre stimolava le sue ghiandole surrenali frequentando Top Gun e U.S. Naval Test Pilot School.