

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# UEFI Secure Boot per istanze Amazon EC2
<a name="uefi-secure-boot"></a>

UEFI Secure Boot si basa sul processo di avvio sicuro di lunga data di Amazon EC2 e fornisce funzionalità aggiuntive defense-in-depth che aiutano i clienti a proteggere il software dalle minacce che persistono anche dopo i riavvii. Garantisce che l'istanza avvia solo il software firmato con chiavi crittografiche. Le chiavi sono archiviate nel database delle chiavi dell'[archivio delle variabili non volatili UEFI](uefi-variables.md). UEFI Secure Boot impedisce la modifica non autorizzata del flusso di avvio dell'istanza.

**Topics**
+ [Come funziona UEFI Secure Boot con le istanze Amazon EC2](how-uefi-secure-boot-works.md)
+ [Requisiti per l’avvio sicuro UEFI su Amazon EC2](launch-instance-with-uefi-sb.md)
+ [Verifica dell'abilitazione di un'istanza Amazon EC2 per UEFI Secure Boot](verify-uefi-secure-boot.md)
+ [Creare un'AMI di Linux con chiavi personalizzate di UEFI Secure Boot](create-ami-with-uefi-secure-boot.md)
+ [Crea il blob binario per UEFI Secure Boot AWS](aws-binary-blob-creation.md)

# Come funziona UEFI Secure Boot con le istanze Amazon EC2
<a name="how-uefi-secure-boot-works"></a>

UEFI Secure Boot è una caratteristica specificata in UEFI, che fornisce la verifica dello stato della catena di avvio. È progettato per garantire che solo i file binari UEFI verificati crittograficamente vengano eseguiti dopo l'inizializzazione automatica del firmware. Questi file binari includono i driver UEFI e il bootloader principale, oltre a componenti caricati a catena.

UEFI Secure Boot specifica quattro database chiave, utilizzati in una catena di attendibilità. I database sono archiviati nell'archivio delle variabili UEFI.

La catena di attendibilità è la seguente:

**Database delle chiavi della piattaforma (Platform Key, PK)**  
Il database PK è il root di attendibilità. Contiene una singola chiave PK pubblica che viene utilizzata nella catena di attendibilità per l'aggiornamento del database delle chiavi di scambio delle chiavi (Key Exchange Key, KEK).  
Per modificare il database PK, è necessario disporre della chiave PK privata per firmare una richiesta di aggiornamento. Ciò include l'eliminazione del database PK scrivendo una chiave PK vuota.

**Database delle chiavi di scambio delle chiavi (KEK)**  
Il database KEK è un elenco di chiavi KEK pubbliche utilizzate nella catena di attendibilità per l'aggiornamento dei database delle firme (DB) e denylist (dbx).  
Per modificare il database KEK pubblico, è necessario disporre della chiave PK privata per firmare una richiesta di aggiornamento.

**Database firma (DB)**  
Il database DB è un elenco di chiavi pubbliche e hash utilizzati nella catena di attendibilità per convalidare tutti i file binari di avvio UEFI.  
Per modificare il database db, è necessario disporre della chiave PK privata o di chiavi KEK private per firmare una richiesta di aggiornamento.

**Database di denylist firme (dbx)**  
Il database dbx è un elenco di chiavi pubbliche e hash binari che non sono attendibili e vengono utilizzati nella catena di attendibilità come file di revoca.  
Il database dbx ha sempre la precedenza su tutti gli altri database di chiavi.  
Per modificare il database dbx, è necessario disporre della chiave PK privata o di chiavi KEK private per firmare una richiesta di aggiornamento.  
Il forum UEFI mantiene un dbx disponibile pubblicamente per molti file binari e certificati reputati non validi all'indirizzo [https://uefi.org/revocationlistfile](https://uefi.org/revocationlistfile).

**Importante**  
UEFI Secure Boot applica la convalida della firma su qualsiasi file binario UEFI. Per consentire l'esecuzione di un binario UEFI in UEFI Secure Boot, lo devi firmare con una delle chiavi db private descritte sopra.

Per impostazione predefinita, UEFI Secure Boot è disabilitato e il sistema è in modalità `SetupMode`. Quando il sistema è in modalità `SetupMode`, tutte le variabili chiave possono essere aggiornate senza una firma crittografica. Quando il PK è impostato, UEFI Secure Boot viene abilitato e viene chiuso. SetupMode 

# Requisiti per l’avvio sicuro UEFI su Amazon EC2
<a name="launch-instance-with-uefi-sb"></a>

Quando [avvii un’istanza Amazon EC2](LaunchingAndUsingInstances.md) con un’AMI supportata e un tipo di istanza supportato, tale istanza convaliderà automaticamente i binari di avvio UEFI rispetto al suo database UEFI Secure Boot. e non sono necessarie ulteriori configurazioni. Puoi configurare UEFI Secure Boot su un'istanza anche dopo l'avvio.

**Nota**  
UEFI Secure Boot protegge l'istanza e il suo sistema operativo dalle modifiche del flusso di avvio. Se crei una nuova AMI da un'AMI di origine con UEFI Secure Boot abilitato e modifichi certi parametri durante il processo di copia, come cambiare `UefiData` all'interno dell'AMI, puoi disabilitare UEFI Secure Boot.

**Topics**
+ [Supportato AMIs](#uefi-amis)
+ [Tipi di istanze supportati](#uefi-instance)

## Supportato AMIs
<a name="uefi-amis"></a>

**Linux AMIs**  
Per lanciare un'istanza Linux, l'AMI di Linux deve avere UEFI Secure Boot abilitato.

Amazon Linux supporta UEFI Secure Boot a partire dalla AL2023 versione 2023.1. Tuttavia, UEFI Secure Boot non è abilitato per impostazione predefinita. AMIs Per ulteriori informazioni, consulta [UEFI Secure Boot nella Guida](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) per l'*AL2023 utente*. Le versioni precedenti di Amazon Linux AMIs non sono abilitate per UEFI Secure Boot. Per utilizzare un'AMI supportata, è necessario eseguire una serie di passaggi di configurazione sulla propria AMI Linux. Per ulteriori informazioni, consulta [Creare un'AMI di Linux con chiavi personalizzate di UEFI Secure Boot](create-ami-with-uefi-secure-boot.md).

**Windows AMIs**  
Per lanciare un'istanza Windows, l'AMI di Linux deve avere UEFI Secure Boot abilitato. *Per trovare un'AMI AWS Windows preconfigurata per UEFI Secure Boot con chiavi Microsoft, vedi [Trova Windows Server AMIs configurato con NitroTPM e UEFI Secure Boot](https://docs.aws.amazon.com/ec2/latest/windows-ami-reference/ami-windows-tpm.html#ami-windows-tpm-find) nel Windows Reference.AWS AMIs *

Al momento l'importazione di Windows con UEFI Secure Boot tramite il comando [import-image](https://docs.aws.amazon.com/cli/latest/reference/ec2/import-image.html) non è supportata.

## Tipi di istanze supportati
<a name="uefi-instance"></a>

Tutti i tipi di istanze virtualizzate che supportano UEFI supportano anche UEFI Secure Boot. Per i tipi di istanza che supportano UEFI Secure Boot, consulta [Requisiti per la modalità di avvio UEFI](launch-instance-boot-mode.md).

**Nota**  
I tipi di istanza bare metal non supportano UEFI Secure Boot.

# Verifica dell'abilitazione di un'istanza Amazon EC2 per UEFI Secure Boot
<a name="verify-uefi-secure-boot"></a>

Puoi usare le procedure seguenti per determinare se Amazon EC2 è abilitato per UEFI Secure Boot.

## Istanze Linux
<a name="verify-uefi-secure-boot-linux"></a>

Per verificare se un'istanza Linux è abilitata per UEFI Secure Boot, utilizza l'utilità `mokutil`. Installa `mokutil` se non è già presente nell'istanza. Per le istruzioni di installazione per Amazon Linux 2, consulta [Trovare e installare pacchetti software su un'istanza Amazon Linux 2](https://docs.aws.amazon.com/linux/al2/ug/find-install-software.html). Per altre distribuzioni Linux, consulta la relativa documentazione specifica.

**Per verificare se un'istanza Linux è abilitata per UEFI Secure Boot**  
Connettiti alla tua istanza ed esegui il seguente comando come `root` in una finestra del terminale.

```
mokutil --sb-state 
```

Di seguito è riportato un output di esempio.
+ Se UEFI Secure Boot è abilitato, l'output contiene `SecureBoot enabled`.
+ Se UEFI Secure Boot non è abilitato, l'output contiene `SecureBoot disabled` o `Failed to read SecureBoot`.

## Istanze Windows
<a name="verify-uefi-secure-boot-windows"></a>

**Per verificare se un'istanza Windows è abilitata per UEFI Secure Boot**

1. Connettiti alla tua istanza.

1. Apri lo strumento msinfo32.

1. Controlla il campo **Secure Boot State** (Stato Secure Boot). Se UEFI Secure Boot è abilitato, il valore è **Supportato**, come mostrato nell'immagine seguente.  
![\[Stato di avvio sicuro all'interno delle informazioni di sistema.\]](http://docs.aws.amazon.com/it_it/AWSEC2/latest/UserGuide/images/secure-boot-state-win.png)

È inoltre possibile utilizzare il PowerShell cmdlet Windows `Confirm-SecureBootUEFI` per verificare lo stato di Secure Boot. Per ulteriori informazioni sul cmdlet, vedere [Confirm- SecureBoot UEFI nella documentazione](https://learn.microsoft.com/en-us/powershell/module/secureboot/confirm-securebootuefi) Microsoft.

# Creare un'AMI di Linux con chiavi personalizzate di UEFI Secure Boot
<a name="create-ami-with-uefi-secure-boot"></a>

Queste istruzioni mostrano come creare un’AMI di Linux con UEFI Secure Boot e chiavi private personalizzate. Amazon Linux supporta UEFI Secure Boot a partire dalla AL2023 versione 2023.1. Per ulteriori informazioni, consulta [UEFI Secure Boot on AL2023](https://docs.aws.amazon.com/linux/al2023/ug/uefi-secure-boot.html) nella *Amazon Linux 2023 User Guide*.

**Importante**  
La procedura seguente è destinata **esclusivamente agli utenti esperti**. Per utilizzare queste procedure è necessario disporre di una conoscenza sufficiente del flusso di avvio della distribuzione SSL e Linux.

**Prerequisiti**
+ Verranno utilizzati i seguenti strumenti:
  + OpenSSL: [https://www.openssl.org/](https://www.openssl.org/)
  + [efivar — efivar https://github.com/rhboot/](https://github.com/rhboot/efivar)
  + [efitools — https://git.kernel. org/pub/scm/linux/kernel/git/jejb/efitools.git/](https://git.kernel.org/pub/scm/linux/kernel/git/jejb/efitools.git/)
  + Comando [get-instance-uefi-data](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html)
+ L'istanza Linux deve essere stata avviata con un'AMI Linux che supporta la modalità di avvio UEFI e deve contenere dati non volatili.

Le istanze appena create senza chiavi UEFI Secure Boot vengono create in `SetupMode`, che ti consente di registrare le tue chiavi. Alcuni AMIs sono preconfigurati con UEFI Secure Boot e non è possibile modificare le chiavi esistenti. Se desideri modificare le chiavi, devi creare una nuova AMI basata sull'AMI originale.

Sono disponibili due modi per propagare le chiavi nell'archivio delle variabili, descritti di seguito sotto Opzione A e Opzione B. L'Opzione A descrive come farlo dall'interno dell'istanza, imitando il flusso di hardware reale. L'Opzione B descrive come creare un blob binario, che viene poi passato come file con codifica base64 quando si crea l'AMI. Per entrambe le opzioni, è necessario innanzitutto creare le tre coppie di chiavi, utilizzate per la catena di attendibilità.

**Topics**
+ [Attività 1 - Creare coppie di chiavi](#uefi-secure-boot-create-three-key-pairs)
+ [Attività 2 - Opzione A: aggiunta delle chiavi all’archivio delle variabili dall’interno dell’istanza](#uefi-secure-boot-optionA)
+ [Attività 2 - Opzione B: creazione di un blob binario contenente un archivio delle variabili preriempito](#uefi-secure-boot-optionB)

## Attività 1 - Creare coppie di chiavi
<a name="uefi-secure-boot-create-three-key-pairs"></a>

UEFI Secure Boot si basa sui seguenti tre database di chiavi, utilizzati in una catena di attendibilità: la chiave di piattaforma (PK), la chiave di scambio delle chiavi (KEK) e il database delle firme (DB).¹

Crea ciascuna chiave sull'istanza. Per preparare le chiavi pubbliche in un formato valido per lo standard UEFI Secure Boot, devi creare un certificato per ciascuna chiave. `DER` definisce il formato SSL (codifica binaria di un formato). Devi quindi convertire ogni certificato in un elenco di firme UEFI, che è il formato binario compreso da UEFI Secure Boot. Infine, devi firmare ogni certificato con la chiave pertinente.

**Topics**
+ [Preparazione alla creazione delle coppie di chiavi](#uefisb-prepare-to-create-key-pairs)
+ [Coppia di chiavi 1: crea la chiave della piattaforma (PK)](#uefisb-create-key-pair-1)
+ [Coppia di chiavi 2: crea la chiave di scambio chiave (KEK)](#uefisb-create-key-pair-2)
+ [Coppia di chiavi 3: crea il database delle firme (DB)](#uefisb-create-key-pair-3)
+ [Firma l'immagine di avvio (kernel) con la chiave privata.](#uefi-secure-boot-sign-kernel)

### Preparazione alla creazione delle coppie di chiavi
<a name="uefisb-prepare-to-create-key-pairs"></a>

Prima di creare le coppie di chiavi, crea un identificatore univoco globale (GUID) da utilizzare nella generazione delle chiavi.

1. [Collegati all'istanza.](connect.md)

1. Esegui il comando seguente in un prompt della shell.

   ```
   uuidgen --random > GUID.txt
   ```

### Coppia di chiavi 1: crea la chiave della piattaforma (PK)
<a name="uefisb-create-key-pair-1"></a>

La PK è il root di attendibilità per le istanze UEFI Secure Boot. La PK privata viene utilizzata per aggiornare la KEK, che a sua volta può essere utilizzata per aggiungere chiavi autorizzate al database delle firme (DB).

Lo standard X.509 viene utilizzato per creare la coppia di chiavi. Per informazioni sullo standard, consulta [X.509](https://en.wikipedia.org/wiki/X.509) su *Wikipedia*.

**Per creare la PK**

1. Crea la chiave. Devi assegnare un nome alla variabile `PK`.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout PK.key -new -x509 -sha256 -days 3650 -subj "/CN=Platform key/" -out PK.crt
   ```

   Vengono specificati i seguenti parametri:
   + `-keyout PK.key`: il file della chiave privata.
   + `-days 3650`: il numero di giorni per cui il certificato è valido.
   + `-out PK.crt`: il certificato che viene utilizzato per creare la variabile UEFI.
   + `CN=Platform key`: il nome comune (CN) della chiave. È possibile inserire il nome della propria organizzazione anziché. *Platform key*

1. Crea il certificato.

   ```
   openssl x509 -outform DER -in PK.crt -out PK.cer
   ```

1. Converti il certificato in un elenco di firme UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" PK.crt PK.esl
   ```

1. Firma l'elenco delle firme UEFI con la PK privata (autofirmata).

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt PK PK.esl PK.auth
   ```

### Coppia di chiavi 2: crea la chiave di scambio chiave (KEK)
<a name="uefisb-create-key-pair-2"></a>

La KEK privata viene utilizzata per aggiungere chiavi al db, ossia l'elenco delle firme autorizzate da avviare sul sistema. 

**Per creare la KEK**

1. Crea la chiave.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout KEK.key -new -x509 -sha256 -days 3650 -subj "/CN=Key Exchange Key/" -out KEK.crt
   ```

1. Crea il certificato.

   ```
   openssl x509 -outform DER -in KEK.crt -out KEK.cer
   ```

1. Converti il certificato in un elenco di firme UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" KEK.crt KEK.esl
   ```

1. Firma l'elenco delle firme con la PK privata.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k PK.key -c PK.crt KEK KEK.esl KEK.auth
   ```

### Coppia di chiavi 3: crea il database delle firme (DB)
<a name="uefisb-create-key-pair-3"></a>

L'elenco db contiene chiavi autorizzate per l'avvio sul sistema. Per modificare l'elenco, è necessaria la KEK privata. Le immagini di avvio saranno firmate con la chiave privata creata in questa fase.

**Per creare il db**

1. Crea la chiave.

   ```
   openssl req -newkey rsa:4096 -nodes -keyout db.key -new -x509 -sha256 -days 3650 -subj "/CN=Signature Database key/" -out db.crt
   ```

1. Crea il certificato.

   ```
   openssl x509 -outform DER -in db.crt -out db.cer
   ```

1. Converti il certificato in un elenco di firme UEFI.

   ```
   cert-to-efi-sig-list -g "$(< GUID.txt)" db.crt db.esl
   ```

1. Firma l'elenco delle firme con la KEK privata.

   ```
   sign-efi-sig-list -g "$(< GUID.txt)" -k KEK.key -c KEK.crt db db.esl db.auth
   ```

### Firma l'immagine di avvio (kernel) con la chiave privata.
<a name="uefi-secure-boot-sign-kernel"></a>

Per Ubuntu 22.04, le seguenti immagini richiedono le firme.

```
/boot/efi/EFI/ubuntu/shimx64.efi
/boot/efi/EFI/ubuntu/mmx64.efi
/boot/efi/EFI/ubuntu/grubx64.efi
/boot/vmlinuz
```

**Per firmare un'immagine**  
Utilizza una sintassi come la seguente per firmare un'immagine.

```
sbsign --key db.key --cert db.crt --output /boot/vmlinuz /boot/vmlinuz
```

**Nota**  
Devi firmare tutti i nuovi kernel. Di solito, *`/boot/vmlinuz`* esegue un collegamento simbolico all'ultimo kernel installato.

Per informazioni sulla catena di avvio e sulle immagini richieste, consulta la documentazione per la distribuzione.

¹ Grazie alla ArchWiki community per tutto il lavoro svolto. I comandi per creare il PK, creare il KEK, creare il DB e firmare l'immagine provengono da [Creating keys](https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Creating_keys), scritto dal team and/or di ArchWiki manutenzione che ha contribuito. ArchWiki 

## Attività 2 - Opzione A: aggiunta delle chiavi all’archivio delle variabili dall’interno dell’istanza
<a name="uefi-secure-boot-optionA"></a>

Dopo avere creato le [tre coppie di chiavi](#uefi-secure-boot-create-three-key-pairs), puoi connetterti alla tua istanza e aggiungere le chiavi all'archivio delle variabili dall'interno dell'istanza completando le fasi seguenti. Altrimenti, completa i passaggi indicati in [Attività 2 - Opzione B: creazione di un blob binario contenente un archivio delle variabili preriempito](#uefi-secure-boot-optionB).

**Topics**
+ [Fase 1: avvio di un'istanza che supporti UEFI Secure Boot](#step1-launch-uefi-sb)
+ [Fase 2: configurazione di un'istanza per supportare UEFI Secure Boot](#step2-launch-uefi-sb)
+ [Fase 3: creazione di un'AMI dall'istanza](#step3-launch-uefi-sb)

### Fase 1: avvio di un'istanza che supporti UEFI Secure Boot
<a name="step1-launch-uefi-sb"></a>

Quando [avvii un'istanza](LaunchingAndUsingInstances.md) con i seguenti prerequisiti, l'istanza sarà pronta per essere configurata per supportare UEFI Secure Boot. È possibile abilitare il supporto per UEFI Secure Boot su un'istanza solo al momento dell'avvio; non è possibile abilitarlo in un secondo momento.

**Prerequisiti**
+ **AMI**: l'AMI Linux deve supportare la modalità di avvio UEFI. Per verificare che l'AMI supporti la modalità di avvio UEFI, il parametro della modalità di avvio AMI deve essere **uefi**. Per ulteriori informazioni, consulta [Determinare il parametro della modalità di avvio di un'AMI di Amazon EC2](ami-boot-mode.md).

  Nota che fornisce AWS solo Linux AMIs configurato per supportare UEFI per i tipi di istanze basati su Graviton. AWS attualmente non fornisce Linux x86\$164 che supporti la modalità di avvio UEFI. AMIs Puoi configurare un'AMI personalizzata che supporta la modalità di avvio UEFI per tutte le architetture. Per utilizzare un'AMI personalizzata che supporta la modalità di avvio UEFI, devi eseguire una serie di passaggi di configurazione sulla tua AMI. Per ulteriori informazioni, consulta [Impostare la modalità di avvio di un'AMI Amazon EC2](set-ami-boot-mode.md).
+ **Tipo di istanza**: tutti i tipi di istanze virtualizzate che supportano UEFI supportano anche UEFI Secure Boot. I tipi di istanza bare metal non supportano UEFI Secure Boot. Per i tipi di istanza che supportano UEFI Secure Boot, consulta [Requisiti per la modalità di avvio UEFI](launch-instance-boot-mode.md).
+ Avvia l'istanza dopo il rilascio di UEFI Secure Boot. Solo le istanze avviate dopo il 10 maggio 2022 (quando è stato rilasciato UEFI Secure Boot) possono supportare UEFI Secure Boot.

Dopo avere avviato l'istanza, puoi verificare che sia pronta per essere configurata per supportare UEFI Secure Boot (in altre parole, puoi procedere alla [Fase 2](#step2-launch-uefi-sb)) verificando se i dati UEFI sono presenti. La presenza di dati UEFI indica che i dati non volatili sono persistenti.

**Per verificare se l'istanza è pronta per la fase 2**  
Utilizza il comando [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) e specifica l'ID dell'istanza.

```
aws ec2 get-instance-uefi-data --instance-id i-1234567890abcdef0
```

L'istanza è pronta per la fase 2 se i dati UEFI sono presenti nell'output. Se l'output è vuoto, l'istanza non può essere configurata per supportare UEFI Secure Boot. Ciò può verificarsi se l'istanza è stata avviata prima che il supporto UEFI Secure Boot fosse disponibile. Avvia una nuova istanza e riprova.

### Fase 2: configurazione di un'istanza per supportare UEFI Secure Boot
<a name="step2-launch-uefi-sb"></a>

#### Registrazione delle coppie di chiavi nell'archivio delle variabili UEFI dell'utente sull'istanza
<a name="step2a-launch-uefi-sb"></a>

**avvertimento**  
Le immagini di avvio devono essere firmate *dopo* avere registrato le chiavi, altrimenti non potrai avviare l'istanza.

Dopo avere creato gli elenchi di firme UEFI firmati (`PK`, `KEK` e `db`), gli elenchi devono essere iscritti al firmware UEFI.

La scrittura nella variabile `PK` è possibile solo se:
+ Nessuna PK è ancora iscritta, nel qual caso la variabile `SetupMode` ha il valore `1`. Per verificarlo, utilizza il comando seguente. L'output è `1` o `0`.

  ```
  efivar -d -n 8be4df61-93ca-11d2-aa0d-00e098032b8c-SetupMode 
  ```
+ La nuova PK è firmata dalla chiave privata della PK esistente.

**Per registrare le chiavi nell'archivio delle variabili UEFI dell'utente**  
I seguenti comandi devono essere eseguiti sull'istanza.

Se SetupMode è abilitata (il valore è`1`), le chiavi possono essere registrate eseguendo i seguenti comandi sull'istanza:

```
[ec2-user ~]$ efi-updatevar -f db.auth db
```

```
[ec2-user ~]$ efi-updatevar -f KEK.auth KEK
```

```
[ec2-user ~]$ efi-updatevar -f PK.auth PK
```

**Per verificare che UEFI Secure Boot sia abilitato**  
Per verificare che UEFI Secure Boot sia abilitato, attieniti alla procedura descritta in [Verifica dell'abilitazione di un'istanza Amazon EC2 per UEFI Secure Boot](verify-uefi-secure-boot.md).

Ora puoi esportare l'archivio delle variabili UEFI con il comando CLI [https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/get-instance-uefi-data.html) oppure procedere alla fase successiva e firmare le immagini di avvio per riavviare un'istanza abilitata per UEFI Secure Boot.

### Fase 3: creazione di un'AMI dall'istanza
<a name="step3-launch-uefi-sb"></a>

Per creare un'AMI dall'istanza, puoi utilizzare la console o l'`CreateImage`API, la CLI o. SDKs Per le istruzioni relative alla console, consulta la sezione [Creare un'AMI supportata da Amazon EBS](creating-an-ami-ebs.md). Per le istruzioni relative all'API, consulta [CreateImage](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_CreateImage.html).

**Nota**  
L'API `CreateImage` copia automaticamente l'archivio delle variabili UEFI dell'istanza nell'AMI. La console utilizza l'API `CreateImage`. Dopo avere avviato le istanze utilizzando questa AMI, le istanze avranno lo stesso archivio delle variabili UEFI.

## Attività 2 - Opzione B: creazione di un blob binario contenente un archivio delle variabili preriempito
<a name="uefi-secure-boot-optionB"></a>

Dopo aver creato le [tre coppie di chiavi](#uefi-secure-boot-create-three-key-pairs), puoi creare un blob binario contenente un archivio delle variabili preriempito contenente le chiavi UEFI Secure Boot. Altrimenti, completa i passaggi indicati in [Attività 2 - Opzione A: aggiunta delle chiavi all’archivio delle variabili dall’interno dell’istanza](#uefi-secure-boot-optionA).

**avvertimento**  
Le immagini di avvio devono essere firmate *prima* di registrare le chiavi, altrimenti non potrai avviare l'istanza.

**Topics**
+ [Fase 1: creazione di un nuovo archivio delle variabili o aggiornamento di un archivio esistente](#uefi-secure-boot-create-or-update-variable)
+ [Fase 2: caricamento del blob binario al momento della creazione dell'AMI](#uefi-secure-boot-upload-binary-blob-on-ami-creation)

### Fase 1: creazione di un nuovo archivio delle variabili o aggiornamento di un archivio esistente
<a name="uefi-secure-boot-create-or-update-variable"></a>

Puoi creare l'archivio delle variabili *non in linea* senza un'istanza in esecuzione utilizzando lo strumento python-uefivars. Lo strumento può creare un nuovo archivio delle variabili a partire dalle chiavi. Lo script attualmente supporta il EDK2 formato, il AWS formato e una rappresentazione JSON che è più facile da modificare con strumenti di livello superiore.

**Per creare l'archivio delle variabili non in linea senza un'istanza in esecuzione**

1. Scarica lo strumento al seguente link.

   ```
   https://github.com/awslabs/python-uefivars
   ```

1. Crea un nuovo archivio delle variabili a partire dalle chiavi eseguendo il comando seguente. Questo creerà un blob binario con codifica base64 in .bin. *your\$1binary\$1blob* Lo strumento supporta anche l'aggiornamento di un blob binario tramite il parametro `-I`.

   ```
   ./uefivars.py -i none -o aws -O your_binary_blob.bin -P PK.esl -K KEK.esl --db db.esl --dbx dbx.esl
   ```

### Fase 2: caricamento del blob binario al momento della creazione dell'AMI
<a name="uefi-secure-boot-upload-binary-blob-on-ami-creation"></a>

Utilizza [https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/register-image.html) per passare i dati dell'archivio delle variabili UEFI. Per il parametro `--uefi-data` specifica il blob binario, mentre per il parametro `--boot-mode` specifica `uefi`.

```
aws ec2 register-image \
    --name uefi_sb_tpm_register_image_test \
    --uefi-data $(cat your_binary_blob.bin) \
    --block-device-mappings "DeviceName=/dev/sda1,Ebs= {SnapshotId=snap-0123456789example,DeleteOnTermination=true}" \
    --architecture x86_64 \
    --root-device-name /dev/sda1 \
    --virtualization-type hvm \
    --ena-support \
    --boot-mode uefi
```

# Crea il blob binario per UEFI Secure Boot AWS
<a name="aws-binary-blob-creation"></a>

Puoi completare le fasi seguenti per personalizzare le variabili UEFI Secure Boot durante la creazione di un'AMI. La KEK che viene utilizzata in queste fasi è in vigore a partire da settembre 2021. Se Microsoft aggiorna la KEK, devi utilizzare la KEK più recente.

**Per creare il blob AWS binario**

1. Crea un elenco di firme PK vuoto.

   ```
   touch empty_key.crt
   cert-to-efi-sig-list empty_key.crt PK.esl
   ```

1. Scarica i certificati KEK.

   ```
   https://go.microsoft.com/fwlink/?LinkId=321185
   ```

1. Avvolgi i certificati KEK in un elenco di firme UEFI (`siglist`).

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_KEK.esl MicCorKEKCA2011_2011-06-24.crt 
   ```

1. Scarica i certificati db di Microsoft.

   ```
   https://www.microsoft.com/pkiops/certs/MicWinProPCA2011_2011-10-19.crt
   https://www.microsoft.com/pkiops/certs/MicCorUEFCA2011_2011-06-27.crt
   ```

1. Genera l'elenco delle firme db.

   ```
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_Win_db.esl MicWinProPCA2011_2011-10-19.crt
   sbsiglist --owner 77fa9abd-0359-4d32-bd60-28f4e78f784b --type x509 --output MS_UEFI_db.esl MicCorUEFCA2011_2011-06-27.crt
   cat MS_Win_db.esl MS_UEFI_db.esl > MS_db.esl
   ```

1. L’Unified Extensible Firmware Interface Forum (UEFI) non fornisce più i file DBX. Ora sono forniti da Microsoft su GitHub. [Scarica l'ultimo aggiornamento DBX dal repository degli aggiornamenti di Microsoft Secure Boot all'indirizzo https://github.com/microsoft/ secureboot\$1objects.](https://github.com/microsoft/secureboot_objects)

1. Decomprimi il file update-binary firmato.

   Crea `SplitDbxContent.ps1` con il contenuto dello script seguente. [In alternativa, è possibile installare lo script da Gallery utilizzando. PowerShell ](https://www.powershellgallery.com/packages/SplitDbxContent/1.0) `Install-Script -Name SplitDbxContent`

   ```
   <#PSScriptInfo
    
   .VERSION 1.0
    
   .GUID ec45a3fc-5e87-4d90-b55e-bdea083f732d
    
   .AUTHOR Microsoft Secure Boot Team
    
   .COMPANYNAME Microsoft
    
   .COPYRIGHT Microsoft
    
   .TAGS Windows Security
    
   .LICENSEURI
    
   .PROJECTURI
    
   .ICONURI
    
   .EXTERNALMODULEDEPENDENCIES
    
   .REQUIREDSCRIPTS
    
   .EXTERNALSCRIPTDEPENDENCIES
    
   .RELEASENOTES
   Version 1.0: Original published version.
    
   #>
   
   <#
   .DESCRIPTION
    Splits a DBX update package into the new DBX variable contents and the signature authorizing the change.
    To apply an update using the output files of this script, try:
    Set-SecureBootUefi -Name dbx -ContentFilePath .\content.bin -SignedFilePath .\signature.p7 -Time 2010-03-06T19:17:21Z -AppendWrite'
   .EXAMPLE
   .\SplitDbxAuthInfo.ps1 DbxUpdate_x64.bin
   #>
   
   
   # Get file from script input
   $file  = Get-Content -Encoding Byte $args[0]
   
   # Identify file signature
   $chop = $file[40..($file.Length - 1)]
   if (($chop[0] -ne 0x30) -or ($chop[1] -ne 0x82 )) {
       Write-Error "Cannot find signature"
       exit 1
   }
   
   # Signature is known to be ASN size plus header of 4 bytes
   $sig_length = ($chop[2] * 256) + $chop[3] + 4
   $sig = $chop[0..($sig_length - 1)]
   
   if ($sig_length -gt ($file.Length + 40)) {
       Write-Error "Signature longer than file size!"
       exit 1
   }
   
   # Content is everything else
   $content = $file[0..39] + $chop[$sig_length..($chop.Length - 1)]
   
   # Write signature and content to files
   Set-Content -Encoding Byte signature.p7 $sig
   Set-Content -Encoding Byte content.bin $content
   ```

   Utilizza lo script per decomprimere i file DBX firmati.

   ```
   PS C:\Windows\system32> SplitDbxContent.ps1 .\dbx.bin
   ```

   In questo modo vengono creati due file: `signature.p7` e `content.bin`. Utilizza `content.bin` nella fase successiva.

1. Crea un archivio delle variabili UEFI usando lo script `uefivars.py`.

   ```
   ./uefivars.py -i none -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin 
   ```

1. Controlla il blob binario e l'archivio delle variabili UEFI.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o json | less
   ```

1. È possibile aggiornare il blob passandolo nuovamente allo stesso strumento.

   ```
   ./uefivars.py -i aws -I uefiblob-microsoft-keys-empty-pk.bin -o aws -O uefiblob-microsoft-keys-empty-pk.bin -P ~/PK.esl -K ~/MS_Win_KEK.esl --db ~/MS_db.esl  --dbx ~/content.bin
   ```

   Output previsto

   ```
   Replacing PK
   Replacing KEK
   Replacing db
   Replacing dbx
   ```