

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à.

# AL2 Tutorial
<a name="al2-tutorials"></a>

 I seguenti tutorial mostrano come eseguire attività comuni utilizzando istanze Amazon EC2 in esecuzione. AL2 [Per i tutorial video, consulta Video didattici e laboratori.AWS](https://www.aws.training/) 

Per AL2023 istruzioni, consulta [i tutorial nella Guida](https://docs.aws.amazon.com/linux/al2023/ug/tutorials-al2023.html) per l'*utente di Amazon Linux 2023*.

**Topics**
+ [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md)
+ [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md)
+ [Tutorial: Ospita un WordPress blog su AL2](hosting-wordpress.md)

# Tutorial: installa un server LAMP su AL2
<a name="ec2-lamp-amazon-linux-2"></a>

[Le seguenti procedure consentono di installare un server Web Apache con supporto PHP e MariaDB (un fork di MySQL sviluppato dalla comunità) sull'istanza (a volte chiamata server web LAMP o stack LAMP).](https://mariadb.org/about/) AL2 Puoi usare questo server per ospitare un sito Web statico o distribuire un'applicazione PHP dinamica che legge e scrive informazioni in un database.

**Importante**  
Se si sta tentando di configurare un server web LAMP su una distribuzione diversa, come Ubuntu o Red Hat Enterprise Linux, questo tutorial non funzionerà. AL2023Per[, AL2023 consulta Installare](https://docs.aws.amazon.com//linux/al2023/ug/ec2-lamp-amazon-linux-2023.html) un server LAMP su. Per Ubuntu, consulta la seguente documentazione della community di Ubuntu: [ApacheMySQLPHP](https://help.ubuntu.com/community/ApacheMySQLPHP). Per altre distribuzioni, consulta la relativa documentazione specifica.

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager Automation anziché le seguenti attività, esegui il [AWS documento ALAMPServer Docs-Install](https://console.aws.amazon.com/systems-manager/automation/execute/AWSDocs-InstallALAMPServer-AL2) - Automation. AL2

**Topics**
+ [Fase 1: preparare il server LAMP](#prepare-lamp-server)
+ [Fase 2: verificare il server LAMP](#test-lamp-server)
+ [Fase 3: proteggere il server di database](#secure-mariadb-lamp-server)
+ [Fase 4: (Facoltativo) Installazione phpMyAdmin](#install-phpmyadmin-lamp-server)
+ [Risoluzione dei problemi](#lamp-troubleshooting)
+ [Argomenti correlati](#lamp-more-info)

## Fase 1: preparare il server LAMP
<a name="prepare-lamp-server"></a>

**Prerequisiti**
+ Questo tutorial presuppone che tu abbia già avviato una nuova istanza utilizzando AL2, con un nome DNS pubblico raggiungibile da Internet. Per ulteriori informazioni, consulta [Launch an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) nella *Amazon EC2 User* Guide. È inoltre necessario aver configurato il gruppo di sicurezza per consentire le connessioni SSH (porta 22), HTTP (porta 80) e HTTPS (porta 443). Per ulteriori informazioni su questi prerequisiti, consulta [le regole dei gruppi di sicurezza nella Guida](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) per l'utente di *Amazon EC2*.
+ La seguente procedura installa l'ultima versione di PHP attualmente disponibile su. AL2 `php8.2` Se hai in programma di utilizzare applicazioni PHP diverse da quelle descritte in questo tutorial, devi controllare che siano compatibili con `php8.2`.<a name="install_apache-2"></a>

**Per preparare il server LAMP**

1. [Connettiti alla tua istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html).

1. Per verificare che tutti i pacchetti software siano aggiornati, eseguire un aggiornamento rapido del software sull'istanza. Questo processo può richiedere alcuni minuti, ma è importante assicurarsi di disporre della versione più recente degli aggiornamenti della sicurezza e delle correzioni dei bug.

   L'opzione `-y` installa gli aggiornamenti senza chiedere conferma. Se desideri esaminare gli aggiornamenti prima di installarli, puoi omettere questa opzione.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Installare i repository Amazon Linux Extras `mariadb10.5` per ottenere le versioni più recenti del pacchetto e MariaDB.

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install mariadb10.5
   ```

   Se si verifica un errore indicante `sudo: amazon-linux-extras: command not found`, l'istanza non è stata avviata con un'AMI 2 di Amazon Linux (forse stai utilizzando Amazon Linux AMI). È possibile visualizzare la versione di Amazon Linux con il comando seguente.

   ```
   cat /etc/system-release
   ```

1. Installa i repository `php8.2` Amazon Linux Extras per ottenere la versione più recente del PHP pacchetto per. AL2

   ```
   [ec2-user ~]$ sudo amazon-linux-extras install php8.2
   ```

1. Ora che l'istanza è corrente, è possibile installare i pacchetti del server Web Apache, MariaDB e PHP. Utilizzare il comando yum per installare contemporaneamente più pacchetti software e tutte le dipendenze correlate.

   ```
   [ec2-user ~]$ sudo yum install -y httpd
   ```

   È possibile visualizzare le versioni correnti di tali pacchetti utilizzando il comando seguente:

   ```
   yum info package_name
   ```

1. Avviare il server Web Apache.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1.  Utilizzare il comando **systemctl** per configurare il server Web Apache per l'avvio a ogni avvio del sistema. 

   ```
   [ec2-user ~]$ sudo systemctl enable httpd
   ```

   Puoi verificare che **httpd** sia attivo eseguendo il seguente comando:

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

1. Se ancora non è stato fatto, aggiungere una regola di sicurezza per consentire le connessioni HTTP (porta 80) entranti all'istanza. Per impostazione predefinita, durante l'inizializzazione è stato configurato un gruppo *N* di sicurezza **launch-wizard** per l'istanza. Questo gruppo contiene una regola singola per consentire connessioni SSH. 

   1. Apri la console Amazon EC2 all'indirizzo [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/).

   1. Scegliere **Instances (Istanze)** e selezionare l'istanza.

   1. Nella scheda **Security (Sicurezza)** visualizzare le regole in entrata. Verrà visualizzata la regola seguente:

      ```
      Port range   Protocol     Source
      22           tcp          0.0.0.0/0
      ```
**avvertimento**  
L'utilizzo `0.0.0.0/0` consente a tutti gli IPv4 indirizzi di accedere all'istanza tramite SSH. L'opzione è accettabile per un breve periodo di tempo in un ambiente di test, ma non è sicura per gli ambienti di produzione. In produzione, potrai autorizzare solo un determinato indirizzo IP o un intervallo di indirizzi per accedere a un'istanza.

   1. Scegliere il collegamento per il gruppo di sicurezza. Utilizzando le procedure in [Aggiungi regole a un gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule), aggiungi una nuova regola di sicurezza in entrata con i seguenti valori:
      + **Type (Tipo)**: HTTP
      + **Protocollo**: TCP
      + **Port Range** (Intervallo porte): 80
      + **Source (Origine)**: personalizzata

1. Verificare il server Web. Nel browser Web, digitare l'indirizzo DNS pubblico (o l'indirizzo IP pubblico) dell'istanza. In assenza di contenuti in `/var/www/html`, dovrebbe venire visualizzata la pagina di test di Apache. È possibile ottenere il DNS pubblico per l'istanza utilizzando la console Amazon EC2 (controllare la colonna **Public DNS (DNS pubblico)**; se la colonna è nascosta, scegliere **Show/Hide Columns (Mostra/nascondi colonne)** (l'icona a forma di ingranaggio) e quindi **Public DNS (DNS pubblico)**).

   Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta [Aggiungere regole al gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).
**Importante**  
Se non si utilizza Amazon Linux, potrebbe inoltre essere necessario configurare il firewall sull'istanza per consentire tali connessioni. Per ulteriori informazioni sulla modalità di configurazione del firewall, consulta la documentazione per la distribuzione specifica.  
![\[Il test del server mostra la pagina di test di Apache.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/apache_test_page_al2_2.4.png)

Apache **httpd** utilizza i file che sono tenuti in una directory chiamata root del documento di Apache. La root del documento di Apache Amazon Linux è `/var/www/html`, che per impostazione predefinita è di proprietà della root.

Per permettere all'account `ec2-user` di manipolare file nella directory, è necessario modificare la proprietà e le autorizzazioni della directory. Sono disponibili molti modi per completare questa attività. In questo tutorial, aggiungi l'utente `ec2-user` al gruppo `apache` per assegnare la proprietà del gruppo `apache` della directory `/var/www` e assegnare autorizzazioni di scrittura al gruppo.<a name="setting-file-permissions-2"></a>

**Per impostare le autorizzazioni dei file**

1. Aggiungere l'utente (in questo caso `ec2-user`) al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo usermod -a -G apache ec2-user
   ```

1. Uscire e ripetere l'accesso per scegliere il nuovo gruppo, quindi verificare l'appartenenza.

   1. Uscire (utilizzare il comando **exit** o chiudere la finestra terminale):

      ```
      [ec2-user ~]$ exit
      ```

   1. Per verificare l'appartenenza al gruppo `apache`, riconnettersi all'istanza, quindi eseguire il seguente comando:

      ```
      [ec2-user ~]$ groups
      ec2-user adm wheel apache systemd-journal
      ```

1. Modificare la proprietà del gruppo di `/var/www` e dei suoi contenuti al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo chown -R ec2-user:apache /var/www
   ```

1. Per aggiungere le autorizzazioni di scrittura di gruppo e impostare l'ID di gruppo nelle sottodirectory future, modificare le autorizzazioni di directory di `/var/www` e delle relative sottodirectory.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Per aggiungere le autorizzazioni di scrittura di gruppo, modificare in modo ricorsivo le autorizzazioni del file di `/var/www` e delle relative sottodirectory:

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0664 {} \;
   ```

Ora, `ec2-user` (e qualsiasi membro futuro del gruppo `apache`) può aggiungere, eliminare e modificare i file nella root del documento di Apache, consentendoti di aggiungere contenuti, ad esempio un sito Web statico o un'applicazione PHP.

**Per proteggere il server Web (facoltativo)**  
Un server Web che esegue il protocollo HTTP non offre alcuna sicurezza di trasporto per i dati inviati e ricevuti. Quando ti connetti a un server HTTP utilizzando un browser Web, URLs ciò che visiti, il contenuto delle pagine Web che ricevi e il contenuto (comprese le password) di tutti i moduli HTML che invii sono tutti visibili agli intercettatori ovunque lungo il percorso di rete. La best practice per la protezione del tuo server Web prevede l'installazione del supporto per HTTPS (HTTP Secure), che protegge i dati con la crittografia SSL/TLS.

Per informazioni sull'abilitazione di HTTPS sul server, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).

## Fase 2: verificare il server LAMP
<a name="test-lamp-server"></a>

Se il server è installato e in esecuzione e le autorizzazioni dei file sono impostate correttamente, l'account `ec2-user` dovrebbe essere in grado di creare un file PHP nella directory `/var/www/html` disponibile da Internet.

**Per verificare il server LAMP**

1. Creare un file PHP nella root del documento di Apache.

   ```
   [ec2-user ~]$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
   ```

   Se si verifica un errore "Permission denied" (Autorizzazione negata) quando si tenta di eseguire questo comando, provare a uscire e accedere nuovamente per ottenere le autorizzazioni di gruppo appropriate configurate in [Per impostare le autorizzazioni dei file](#setting-file-permissions-2).

1. In un browser Web, digitare l'URL del file appena creato. Questo URL è l'indirizzo DNS pubblico dell'istanza, seguito da una barra e dal nome di file. Ad esempio:

   ```
   http://my.public.dns.amazonaws.com/phpinfo.php
   ```

   Viene visualizzata la pagina delle informazioni PHP:  
![\[Il test del server LAMP mostra la pagina di informazioni PHP.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/phpinfo7.2.10.png)

   Se non viene visualizzata questa pagina, verifica che il file `/var/www/html/phpinfo.php` sia stato creato correttamente nella fase precedente. È anche possibile verificare che tutti i pacchetti richiesti siano stati installati con il seguente comando.

   ```
   [ec2-user ~]$ sudo yum list installed httpd mariadb-server php-mysqlnd
   ```

   Se uno dei pacchetti richiesti non è elencato nell'output, installarlo utilizzando il comando **sudo yum install *package***. Verificare inoltre che extra `php7.2` e `lamp-mariadb10.2-php7.2` siano abilitati nell'output del comando **amazon-linux-extras**.

1. Eliminare il file `phpinfo.php`. Sebbene questa informazione possa essere utile, non deve essere divulgata su Internet per ragioni di sicurezza.

   ```
   [ec2-user ~]$ rm /var/www/html/phpinfo.php
   ```

Ora si dovrebbe avere un server Web LAMP completamente funzionante. Se vengono aggiunti contenuti alla root del documento di Apache su `/var/www/html`, dovrebbe essere possibile visualizzare tali contenuti all'indirizzo DNS pubblico per l'istanza. 

## Fase 3: proteggere il server di database
<a name="secure-mariadb-lamp-server"></a>

L'installazione predefinita del server MariaDB ha diverse caratteristiche che sono ottime per test e sviluppo, ma dovrebbero essere disabilitate o rimosse per i server di produzione. Il comando **mysql\$1secure\$1installation** guida attraverso il processo di impostazione di una password root e la rimozione delle caratteristiche non protette dall'installazione. Anche se non hai intenzione di utilizzare il server MariaDB, consigliamo di eseguire questa procedura.<a name="securing-maria-db"></a>

**Per proteggere il server MariaDB**

1. Avviare il server MariaDB.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Esegui **mysql\$1secure\$1installation**.

   ```
   [ec2-user ~]$ sudo mysql_secure_installation
   ```

   1. Quando richiesto, digitare una password per l'account root.

      1. Digitare la password root corrente. Per impostazione predefinita, l'account root non ha una password configurata. Premere Invio.

      1. Digitare **Y** per impostare una password e digitare una password sicura due volte. Per ulteriori informazioni sulla creazione di una password sicura, vedere [https://identitysafe.norton.com/password-generator/](https://identitysafe.norton.com/password-generator/). Assicurarsi di conservare questa password in un posto sicuro.

         L'impostazione di una password root per MariaDB è solo la misura di base per la protezione del database. Quando si crea o si installa un'applicazione basata su un database, normalmente si crea un utente del servizio di database per tale applicazione per evitare di usare l'account root per ragioni diverse dall'amministrazione del database. 

   1. Digitare **Y** per rimuovere gli account utente anonimi.

   1. Digitare **Y** per disabilitare l'accesso root in remoto.

   1. Digitare **Y** per rimuovere il database di test.

   1. Digitare **Y** per ricaricare le tabelle dei privilegi e salvare le modifiche.

1. (Facoltativo) Se non si ha intenzione di utilizzare immediatamente il server MariaDB, interromperlo. È possibile riavviarlo quando è di nuovo necessario.

   ```
   [ec2-user ~]$ sudo systemctl stop mariadb
   ```

1. (Facoltativo) Se si desidera che il server MariaDB si avvii a ogni avvio, digitare il seguente comando.

   ```
   [ec2-user ~]$ sudo systemctl enable mariadb
   ```

## Fase 4: (Facoltativo) Installazione phpMyAdmin
<a name="install-phpmyadmin-lamp-server"></a>

[phpMyAdmin](https://www.phpmyadmin.net/)è uno strumento di gestione dei database basato sul Web che puoi utilizzare per visualizzare e modificare i database MySQL sulla tua istanza EC2. Segui le fasi seguenti per installare e configurare `phpMyAdmin` sull'istanza Amazon Linux.

**Importante**  
Non è consigliabile `phpMyAdmin` utilizzarlo per accedere a un server LAMP a meno che tu non lo abbia abilitato SSL/TLS in Apache; in caso contrario, la password dell'amministratore del database e altri dati vengono trasmessi in modo non sicuro su Internet. Per i consigli sulla sicurezza forniti dagli sviluppatori, consulta [Proteggere](https://docs.phpmyadmin.net/en/latest/setup.html#securing-your-phpmyadmin-installation) l'installazione. phpMyAdmin Per informazioni generali sulla protezione di un server Web su un'istanza EC2, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).

**Per installare phpMyAdmin**

1. Installare le dipendenze richieste.

   ```
   [ec2-user ~]$ sudo yum install php-mbstring php-xml -y
   ```

1. Riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Riavviare `php-fpm`.

   ```
   [ec2-user ~]$ sudo systemctl restart php-fpm
   ```

1. Andare alla root del documento di Apache in `/var/www/html`.

   ```
   [ec2-user ~]$ cd /var/www/html
   ```

1. Seleziona un pacchetto sorgente per l'ultima phpMyAdmin versione da [https://www.phpmyadmin.net/downloads](https://www.phpmyadmin.net/downloads). Per scaricare il file direttamente nell'istanza, copiare il link e incollarlo in un comando **wget**, come in questo esempio:

   ```
   [ec2-user html]$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz
   ```

1. Creare una cartella `phpMyAdmin` in cui estrarre il pacchetto con il comando seguente.

   ```
   [ec2-user html]$ mkdir phpMyAdmin && tar -xvzf phpMyAdmin-latest-all-languages.tar.gz -C phpMyAdmin --strip-components 1
   ```

1. Eliminare il *phpMyAdmin-latest-all-languages.tar.gz* tarball.

   ```
   [ec2-user html]$ rm phpMyAdmin-latest-all-languages.tar.gz
   ```

1.  (Facoltativo) Se il server MySQL non è in esecuzione, avviarlo in questo momento.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. In un browser Web, digita l'URL dell' phpMyAdmin installazione. Questo URL è l'indirizzo DNS pubblico (o indirizzo IP pubblico) dell'istanza seguito da una barra e dal nome della directory di installazione. Esempio:

   ```
   http://my.public.dns.amazonaws.com/phpMyAdmin
   ```

   Dovresti vedere la pagina phpMyAdmin di accesso:  
![\[Il risultato della digitazione dell'URL dell' phpMyAdmin installazione è la schermata di phpMyAdmin accesso.\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/images/phpmyadmin_login.png)

1. Accedi all' phpMyAdmin installazione con il nome `root` utente e la password root MySQL che hai creato in precedenza.

   L'installazione deve essere configurata prima di essere messa in funzione. Si consiglia di iniziare con la creazione manuale del file di configurazione, come segue:

   1. Per iniziare con un file di configurazione minimo, utilizza l'editor di testo preferito per creare un nuovo file e quindi copia al suo interno il contenuto di `config.sample.inc.php`.

   1. Salva il file come `config.inc.php` nella phpMyAdmin directory che contiene. `index.php`

   1. Per qualsiasi [configurazione aggiuntiva, fare riferimento alle istruzioni successive alla creazione del file nella sezione Uso dello script](https://docs.phpmyadmin.net/en/latest/setup.html#using-the-setup-script) di phpMyAdmin installazione delle istruzioni di installazione.

    Per informazioni sull'utilizzo phpMyAdmin, consultate la [Guida per l'phpMyAdmin utente](http://docs.phpmyadmin.net/en/latest/user.html).

## Risoluzione dei problemi
<a name="lamp-troubleshooting"></a>

Questa sezione offre suggerimenti per la risoluzione di problemi comuni che si possono incontrare quando si configura un nuovo server LAMP. 

### Non riesco a connettermi al mio server utilizzando un browser Web
<a name="is_apache_on"></a>

Esegui i controlli seguenti per verificare se il tuo server Web Apache è in esecuzione e accessibile.
+ **Il server Web è in esecuzione?**

  Puoi verificare che **httpd** sia attivo eseguendo il seguente comando:

  ```
  [ec2-user ~]$ sudo systemctl is-enabled httpd
  ```

  Se il processo **httpd** non è in esecuzione, ripeti le fasi descritte in [Per preparare il server LAMP](#install_apache-2).
+ **Il firewall è configurato correttamente?**

  Verificare che il gruppo di sicurezza per l'istanza contenga una regola per consentire il traffico HTTP sulla porta 80. Per ulteriori informazioni, consulta [Aggiungere regole al gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

### Non riesco a connettermi al mio server utilizzando HTTPS
<a name="is-https-enabled"></a>

Eseguire le seguenti verifiche per verificare se il server Web Apache è configurato per supportare HTTPS.
+ **Il server Web è configurato correttamente?**

  Dopo avere installato Apache, il server è configurato per il traffico HTTP. Per supportare HTTPS, abilitare TLS sul server e installare un certificato SSL. Per informazioni, consulta [Tutorial: Configura SSL/TLS su AL2](SSL-on-amazon-linux-2.md).
+ **Il firewall è configurato correttamente?**

  Verificare che il gruppo di protezione per l'istanza contenga una regola per consentire il traffico HTTPS sulla porta 443. Per ulteriori informazioni, consulta [Aggiungere regole a un gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule).

## Argomenti correlati
<a name="lamp-more-info"></a>

Per ulteriori informazioni sul trasferimento di file sull'istanza o sull'installazione di un WordPress blog sul server Web, consulta la seguente documentazione:
+ [Trasferisci i file sulla tua istanza Linux utilizzando WinSCP](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/putty.html#Transfer_WinSCP).
+ [Trasferisci file su istanze Linux utilizzando un SCP client](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-ssh.html#linux-file-transfer-scp).
+ [Tutorial: Ospita un WordPress blog su AL2](hosting-wordpress.md)

Per ulteriori informazioni sui comandi e sul software utilizzati in questo tutorial, consulta le pagine Web seguenti:
+ Server Web Apache: [http://httpd.apache.org/](http://httpd.apache.org/)
+ Server database MariaDB: [https://mariadb.org/](https://mariadb.org/)
+ Linguaggi di programmazione PHP: [http://php.net/](http://php.net/)
+ Il `chmod` comando: [https://en.wikipedia. org/wiki/Chmod](https://en.wikipedia.org/wiki/Chmod)
+ Il `chown` comando: [https://en.wikipedia. org/wiki/Chown](https://en.wikipedia.org/wiki/Chown)

Per ulteriori informazioni sulla registrazione di un nome di dominio per il server Web o sul trasferimento di un nome di dominio esistente su questo host, consulta l'articolo relativo alla [creazione e alla migrazione di domini e sottodomini ad Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/creating-migrating.html) nella *Guida per lo sviluppatore di Amazon Route 53*.

# Tutorial: Configura SSL/TLS su AL2
<a name="SSL-on-amazon-linux-2"></a>

Secure Layer/Transport Sockets Layer Security (SSL/TLS) creates an encrypted channel between a web server and web client that protects data in transit from being eavesdropped on. This tutorial explains how to add support manually for SSL/TLSsu un'istanza EC2 con AL2 un server web Apache). Questo tutorial presuppone che si non stia utilizzando un sistema di bilanciamento del carico (load balancer). Se si utilizza Elastic Load Balancing, è possibile scegliere di configurare l'offload SSL sul load balancer, utilizzando invece un certificato di [AWS Certificate Manager](https://aws.amazon.com/certificate-manager/).

Per motivi storici, la crittografia Web viene spesso definita semplicemente con l'acronimo SSL. Se da un lato i browser Web continuano a supportare il protocollo SSL, dall'altro il protocollo TLS, suo successore, è meno vulnerabile agli attacchi. Per impostazione predefinita, AL2 disabilita il supporto lato server per tutte le versioni di SSL. Gli [organismi che si occupano degli standard di sicurezza](https://www.ssl.com/article/deprecating-early-tls/) considerano TLS 1.0 non sicuro. TLS 1.0 e TLS 1.1 sono stati dichiarati formalmente [obsoleti](https://datatracker.ietf.org/doc/rfc8996/) a marzo 2021. Le istruzioni contenute in questo tutorial si basano esclusivamente sull'abilitazione di TLS 1.2. TLS 1.3 è stato finalizzato nel 2018 ed è disponibile AL2 purché la libreria TLS sottostante (OpenSSL in questo tutorial) sia supportata e abilitata. [I clienti devono supportare TLS 1.2 o versioni successive entro il 28 giugno 2023](https://aws.amazon.com/blogs/security/tls-1-2-required-for-aws-endpoints/). Per ulteriori informazioni sugli standard di crittografia aggiornati, consulta [RFC 7568](https://tools.ietf.org/html/rfc7568) e [RFC 8446](https://tools.ietf.org/html/rfc8446).

Questo tutorial fa riferimento alla crittografia Web moderna semplicemente come TLS.

**Importante**  
Queste procedure sono destinate all'uso con AL2. Supponiamo anche che si stia operando su una nuova istanza Amazon EC2. Se stai cercando di configurare un'istanza EC2 che esegue una distribuzione diversa o un'istanza che esegue una versione precedente di AL2, alcune procedure di questo tutorial potrebbero non funzionare. Per Ubuntu, consulta la documentazione seguente della community: [Open SSL on Ubuntu](https://help.ubuntu.com/community/OpenSSL) (Apri SSL su Ubuntu). Per Red Hat Enterprise Linux, consulta il seguente argomento: [Setting up the Apache HTTP Web Server](https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/deploying_different_types_of_servers/setting-apache-http-server_deploying-different-types-of-servers) (Configurazione del server Web HTTP Apache). Per altre distribuzioni, consulta la relativa documentazione specifica.

**Nota**  
In alternativa, puoi utilizzare AWS Certificate Manager (ACM) for AWS Nitro enclaves, un'applicazione enclave che consente di utilizzare SSL/TLS certificati pubblici e privati con applicazioni Web e server in esecuzione su istanze Amazon EC2 con Nitro Enclaves. AWS Nitro Enclaves è una funzionalità di Amazon EC2 che consente la creazione di ambienti di elaborazione isolati per proteggere ed elaborare in modo sicuro dati altamente sensibili, come certificati e chiavi private. SSL/TLS   
ACM per Nitro Enclaves funziona con **nginx** in esecuzione sull'istanza Amazon EC2 Linux per creare chiavi private, distribuire certificati e chiavi private e gestire i rinnovi dei certificati.  
Per utilizzare ACM per Nitro Enclaves, è necessario utilizzare un'istanza Linux abilitata all'enclave.  
[Per ulteriori informazioni, consulta Che cos'è Nitro Enclaves? AWS](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave.html) *e [AWS Certificate Manager per Nitro Enclaves nella Guida per l'utente di Nitro Enclaves](https://docs.aws.amazon.com/enclaves/latest/user/nitro-enclave-refapp.html).AWS *

**Topics**
+ [Prerequisiti](#ssl_prereq)
+ [Fase 1: abilitare TLS nel server](#ssl_enable)
+ [Fase 2: ottenere un certificato firmato dalla CA](#ssl_certificate)
+ [Fase 3: testare e proteggere la configurazione di sicurezza](#ssl_test)
+ [Risoluzione dei problemi](#troubleshooting)

## Prerequisiti
<a name="ssl_prereq"></a>

Prima di iniziare questo tutorial, completare le procedure descritte di seguito:
+ Avvia un' AL2 istanza supportata da Amazon EBS. Per ulteriori informazioni, consulta [Launch an instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-launch-instance-wizard.html) nella *Amazon EC2 User* Guide.
+ Configurare i gruppi di sicurezza in modo da consentire all'istanza di accettare le connessioni sulle porte TCP seguenti: 
  + SSH (porta 22)
  + HTTP (porta 80)
  + HTTPS (porta 443)

  Per ulteriori informazioni, consulta [Regole del gruppo di sicurezza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules.html) nella *Guida per l’utente di Amazon EC2*.
+ Installare il server Web Apache. Per step-by-step istruzioni, consulta [Tutorial: Installa un server Web LAMP su AL2](ec2-lamp-amazon-linux-2.md). Sono necessari solo il pacchetto httpd e le relative dipendenze. Puoi pertanto ignorare le istruzioni relative a PHP e MariaDB.
+ Per identificare e autenticare i siti Web, l'infrastruttura a chiave pubblica (PKI) TLS si basa su Domain Name System (DNS). Per utilizzare l'istanza EC2 per ospitare un sito Web pubblico, devi registrare un nome di dominio per il server Web o trasferire un nome di dominio esistente nell'host Amazon EC2. Per questa operazione sono disponibili numerosi servizi di registrazione di domini e hosting DNS di terze parti. In alternativa, puoi utilizzare [Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/Welcome.html). 

## Fase 1: abilitare TLS nel server
<a name="ssl_enable"></a>

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager l'automazione anziché le seguenti attività, esegui il [documento di automazione](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-Configure-SSL-TLS-AL2/).

Questa procedura illustra il processo di configurazione di TLS AL2 con un certificato digitale autofirmato. 

**Nota**  
Un certificato autofirmato è accettabile in ambienti di test, ma non in ambienti di produzione. Se esponi un certificato autofirmato in Internet, i visitatori del sito visualizzeranno avvisi di sicurezza. 

**Per abilitare TLS in un server**

1. [Connettersi all'istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) e confermare che Apache è in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl is-enabled httpd
   ```

   Se il valore restituito non è "enabled" ("abilitato), avviare Apache e configurarlo in modo che venga avviato all'avvio del sistema:

   ```
   [ec2-user ~]$ sudo systemctl start httpd && sudo systemctl enable httpd
   ```

1. Per verificare che tutti i pacchetti software siano aggiornati, eseguire un aggiornamento rapido del software sull'istanza. Questo processo può richiedere alcuni minuti, ma è importante assicurarsi di disporre della versione più recente degli aggiornamenti della sicurezza e delle correzioni dei bug.
**Nota**  
L'opzione `-y` installa gli aggiornamenti senza chiedere conferma. Se desideri esaminare gli aggiornamenti prima di installarli, puoi omettere questa opzione.

   ```
   [ec2-user ~]$ sudo yum update -y
   ```

1. Dopo aver aggiornato l'istanza, aggiungere il supporto per TLS installando il modulo Apache `mod_ssl`.

   ```
   [ec2-user ~]$ sudo yum install -y mod_ssl
   ```

   L'istanza dispone ora dei file seguenti, che serviranno per configurare il server sicuro e creare un certificato per il test:
   +  `/etc/httpd/conf.d/ssl.conf` 

     File di configurazione per mod\$1ssl. Contiene le *direttive* che indicano ad Apache dove cercare le chiavi e i certificati di crittografia, le versioni del protocollo TLS da consentire e il tipo di crittografia da accettare. 
   + `/etc/pki/tls/certs/make-dummy-cert`

     Script che genera un certificato X.509 autofirmato e una chiave privata per l'host del server. Questo certificato risulta utile per verificare se Apache è configurato correttamente per l'utilizzo di TLS. Non deve essere usato in ambienti di produzione poiché non garantisce l'identità. In caso contrario, attiva avvisi nei browser Web.

1. Eseguire lo script per generare un certificato dummy autofirmato e una chiave per il test.

   ```
   [ec2-user ~]$ cd /etc/pki/tls/certs
   sudo ./make-dummy-cert localhost.crt
   ```

   Viene così generato il nuovo file `localhost.crt` nella directory `/etc/pki/tls/certs/`. Il nome di file specificato corrisponde al file predefinito assegnato nella direttiva **SSLCertificateFile** in `/etc/httpd/conf.d/ssl.conf` 

   Il file contiene sia un certificato autofirmato che la relativa chiave privata. Apache richiede che certificato e chiave siano entrambi in formato PEM, che è composto da caratteri ASCII con codifica Base64 racchiusi tra le righe "BEGIN" ed "END", come nell'esempio abbreviato riportato di seguito.

   ```
   -----BEGIN PRIVATE KEY-----
   MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD2KKx/8Zk94m1q
   3gQMZF9ZN66Ls19+3tHAgQ5Fpo9KJDhzLjOOCI8u1PTcGmAah5kEitCEc0wzmNeo
   BCl0wYR6G0rGaKtK9Dn7CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vr
   GvwnKoMh3DlK44D9dX7IDua2PlYx5+eroA+1Lqf32ZSaAO0bBIMIYTHigwbHMZoT
   ...
   56tE7THvH7vOEf4/iUOsIrEzaMaJ0mqkmY1A70qQGQKBgBF3H1qNRNHuyMcPODFs
   27hDzPDinrquSEvoZIggkDMlh2irTiipJ/GhkvTpoQlv0fK/VXw8vSgeaBuhwJvS
   LXU9HvYq0U6O4FgD3nAyB9hI0BE13r1HjUvbjT7moH+RhnNz6eqqdscCS09VtRAo
   4QQvAqOa8UheYeoXLdWcHaLP
   -----END PRIVATE KEY-----                    
   
   -----BEGIN CERTIFICATE-----
   MIIEazCCA1OgAwIBAgICWxQwDQYJKoZIhvcNAQELBQAwgbExCzAJBgNVBAYTAi0t
   MRIwEAYDVQQIDAlTb21lU3RhdGUxETAPBgNVBAcMCFNvbWVDaXR5MRkwFwYDVQQK
   DBBTb21lT3JnYW5pemF0aW9uMR8wHQYDVQQLDBZTb21lT3JnYW5pemF0aW9uYWxV
   bml0MRkwFwYDVQQDDBBpcC0xNzItMzEtMjAtMjM2MSQwIgYJKoZIhvcNAQkBFhVy
   ...
   z5rRUE/XzxRLBZOoWZpNWTXJkQ3uFYH6s/sBwtHpKKZMzOvDedREjNKAvk4ws6F0
   CuIjvubtUysVyQoMVPQ97ldeakHWeRMiEJFXg6kZZ0vrGvwnKoMh3DlK44D9dlU3
   WanXWehT6FiSZvB4sTEXXJN2jdw8g+sHGnZ8zCOsclknYhHrCVD2vnBlZJKSZvak
   3ZazhBxtQSukFMOnWPP2a0DMMFGYUHOd0BQE8sBJxg==
   -----END CERTIFICATE-----
   ```

   I nomi e le estensioni di file rappresentano una convenzione e non hanno alcuna ripercussione sulla funzionalità. Ad esempio è possibile denominare un certificato `cert.crt`, `cert.pem` o con qualsiasi altro nome di file, a condizione che la direttiva corrispondente nel file `ssl.conf` utilizzi lo stesso nome.
**Nota**  
Quando si sostituiscono i file TLS predefiniti con file personalizzati, assicurarsi che siano in formato PEM. 

1. Apri il file `/etc/httpd/conf.d/ssl.conf` utilizzando un editor di testo (come **vim** o **nano**) in qualità di utente root e commenta la riga seguente, in quanto il certificato dummy autofirmato contiene anche la chiave. Se non si commenta questa riga prima di completare il passaggio successivo, l'avvio del servizio Apache non riesce.

   ```
   SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
   ```

1. Riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```
**Nota**  
Assicurarsi che la porta TCP 443 sia accessibile sull'istanza EC2, come descritto in precedenza.

1. Il server Web Apache ora dovrebbe supportare HTTPS (HTTP protetto) sulla porta 443. Per eseguire il test, digitare l'indirizzo IP o il nome di dominio completo dell'istanza EC2 nella barra degli indirizzi URL di un browser con il prefisso **https://**.

   Poiché ti stai connettendo a un sito con un certificato host autofirmato non attendibile, il browser potrebbe visualizzare una serie di avvisi di sicurezza. Ignorare gli avvisi e passare al sito. 

   Se la pagina predefinita di test di Apache viene visualizzata, significa che TLS è stato correttamente configurato sul server. Tutti i dati in transito tra il browser e il server ora sono crittografati.
**Nota**  
Per evitare che i visitatori del sito vedano schermate di avviso, è necessario ottenere un certificato attendibile che non solo esegua la crittografia, ma che fornisca anche un'autenticazione pubblica del proprietario del sito. 

## Fase 2: ottenere un certificato firmato dalla CA
<a name="ssl_certificate"></a>

Puoi utilizzare la seguente procedura per ottenere un certificato firmato dalla CA:
+ Generare una richiesta di firma del certificato (CSR) da una chiave privata
+ Inviare il CSR alla Certificate Authority
+ Ottenere un certificato host firmato
+ Configurare Apache per utilizzare il certificato

Dal punto di vista della crittografia un certificato host TLS X.509 autofirmato è identico a un certificato firmato da una CA. La differenza è una questione di attendibilità. Una CA si impegna infatti a fornire una convalida minima della titolarità di un dominio prima di emettere un certificato a un richiedente. Ogni browser Web contiene un elenco di quelli CAs ritenuti idonei dal fornitore del browser a tale scopo. Un certificato X.509 è principalmente composto da una chiave server privata e da una firma fornita dalla CA e associata a livello di crittografia alla chiave pubblica. Quando un browser si connette a un server Web tramite HTTPS, il server presenta un certificato da confrontare con l'elenco dei siti attendibili CAs. Se il firmatario è incluso nell'elenco oppure è accessibile tramite una *catena di attendibilità* composta da altri firmatari fidati, il browser negozia un canale di dati a crittografia rapida con il server e carica la pagina. 

I certificati in genere costano poiché il processo di convalida delle richieste prevede alcuni costi. Consigliamo pertanto di valutare le varie offerte. Alcuni CAs offrono certificati di livello base gratuiti. Il più importante di questi CAs è il progetto [Let's Encrypt](https://letsencrypt.org/), che supporta anche l'automazione del processo di creazione e rinnovo dei certificati. Per ulteriori informazioni sull'utilizzo di un certificato Let's Encrypt, consulta la pagina [Ottenimento di Certbot](https://eff-certbot.readthedocs.io/en/stable/install.html).

Se hai intenzione di offrire servizi di livello commerciale, [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/acm-overview.html) è una buona opzione.

L'uso di un certificato host sottostante rappresenta la soluzione ideale. Dal 2019, gruppi appartenenti alla [pubblica amministrazione](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf) e a [settori](https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.6.5.pdf) specifici consigliano una dimensione (modulo) di chiave minima pari a 2048 bit per le chiavi RSA a protezione dei documenti fino al 2030. La dimensione predefinita del modulo generato da OpenSSL AL2 in è di 2048 bit, adatta per l'uso in un certificato firmato da un'autorità di certificazione. Nella seguente procedura viene offerto un passaggio opzionale per coloro che desiderano una chiave personalizzata, ad esempio, una chiave con un modulo più grande o che utilizza un algoritmo di crittografia diverso.

**Importante**  
In mancanza di un dominio DNS registrato e ospitato, tali istruzioni per l'acquisizione di certificati host firmati dalla CA non funzioneranno.

**Per ottenere un certificato firmato dalla CA**

1.  [Connect](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html) alla propria istanza e accedi a/etc/pki/tls/private/. Si tratta della directory in cui viene memorizzata la chiave privata del server per TLS. Se preferisci utilizzare una chiave host esistente per generare la CSR, passa alla Fase 3.

1. (Opzionale) Generare una nuova chiave privata. Di seguito sono riportate alcune configurazioni di chiave di esempio. Qualsiasi chiave risultante funziona con il server Web, ma il livello e il tipo di sicurezza implementati possono variare.
   + **Esempio 1:** creare una chiave host RSA predefinita. Il file risultante, **custom.key**, è una chiave privata RSA a 2048 bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key
     ```
   + **Esempio 2:** creare una chiave RSA più complessa con un modulo più grande, Il file risultante, **custom.key**, è una chiave privata RSA a 4096 bit.

     ```
     [ec2-user ~]$ sudo openssl genrsa -out custom.key 4096
     ```
   + **Esempio 3:** creare una chiave RSA crittografata a 4096 bit con protezione con password. Il file risultante, **custom.key**, è una chiave privata RSA a 4096 bit crittografata in base allo standard AES-128.
**Importante**  
La crittografia di una chiave fornisce maggiore sicurezza, ma dal momento che una chiave crittografata richiede una password, i servizi che dipendono da essa non possono essere avviati automaticamente. Ogni volta che usi questa chiave, devi fornire la password ( nell'esempio precedente, "abcde12345") tramite una connessione SSH.

     ```
     [ec2-user ~]$ sudo openssl genrsa -aes128 -passout pass:abcde12345 -out custom.key 4096
     ```
   + **Esempio 4:** creare una chiave utilizzando uno standard non RSA. La crittografia RSA può essere relativamente lenta per via della dimensione delle chiavi pubbliche, che sono basate sul prodotto di due grandi numeri primi. Tuttavia, è possibile creare chiavi per TLS che utilizzano una crittografia non RSA. Le chiavi basate su calcoli matematici di curve ellittiche sono di dimensioni inferiori e, dal punto di vista del calcolo, più rapide pur garantendo un livello equivalente di sicurezza.

     ```
     [ec2-user ~]$ sudo openssl ecparam -name prime256v1 -out custom.key -genkey
     ```

     Il risultato è una chiave privata basata su curva ellittica a 256 bit che utilizza prime256v1, una "curva denominata" supportata da OpenSSL. La complessità dal punto di vista crittografico è leggermente superiore rispetto una chiave RSA a 2048 bit, [secondo i dati NIST](http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-57pt1r4.pdf).
**Nota**  
Non tutti CAs forniscono lo stesso livello di supporto per elliptic-curve-based le chiavi come per le chiavi RSA.

   Assicurati che la nuova chiave privata abbia proprietà e autorizzazioni estremamente restrittive (owner=root, group=root, solo per il proprietario). read/write Il comando è come mostrato nell'esempio seguente.

   ```
   [ec2-user ~]$ sudo chown root:root custom.key
   [ec2-user ~]$ sudo chmod 600 custom.key
   [ec2-user ~]$ ls -al custom.key
   ```

   I comandi precedenti restituiscono il seguente risultato:

   ```
   -rw------- root root custom.key
   ```

    Dopo aver creato e configurato una chiave affidabile, puoi creare una CSR. 

1. Creare una CSR utilizzando la chiave preferita. Nell'esempio seguente viene utilizzato **custom.key**.

   ```
   [ec2-user ~]$ sudo openssl req -new -key custom.key -out csr.pem
   ```

   OpenSSL visualizza una finestra di dialogo e richiede l'immissione delle informazioni riportate nella seguente tabella. Tutti i campi, tranne **Common Name (Nome comune)**, sono facoltativi per un certificato host di base convalidato a livello di dominio.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/linux/al2/ug/SSL-on-amazon-linux-2.html)

   Infine, OpenSSL richiede l'immissione di una password di verifica opzionale. Questa password è valida solo per la CSR e per le transazioni tra te e la CA. Pertanto, attieniti alle raccomandazioni della CA in merito alla definizione di questo tipo di password e all'altro campo facoltativo, ovvero il nome azienda facoltativo. La password di verifica associata alla CSR non ha alcuna ripercussione sulla funzionalità del server.

   Il file **csr.pem** risultante contiene la chiave pubblica, la firma digitale della chiave pubblica e i metadati immessi.

1. Inviare la CSR a una CA. In genere, questa operazione prevede l'apertura del file CSR in un editor di testo e la copia del contenuto in un modulo Web. In questo momento, è possibile che ti venga chiesto di fornire uno o più nomi alternativi del soggetto (SANs) da inserire nel certificato. Se **www.example.com** è il nome comune, **example.com** potrebbe essere un nome alternativo di oggetto (SAN) valido e viceversa. Un visitatore del sito che immettesse uno di questi due nomi avrebbe accesso a una connessione priva di errori. Se il modulo web CA lo consente, includi il nome comune nell'elenco di SANs. Alcuni lo CAs includono automaticamente.

   Dopo l'approvazione della richiesta, riceverai un nuovo certificato host firmato dalla CA. Ti potrebbe inoltre venire richiesto di scaricare un file di *certificato intermedio* contenente i certificati aggiuntivi necessari per completare la catena di attendibilità della CA. 
**Nota**  
La CA potrebbe inviare i file in più formati, destinati a scopi specifici. Ai fini di questo tutorial, ti consigliamo di usare solo un file di certificato in formato PEM, che in genere, ma non sempre, è contrassegnato dall'estensione `.pem` o `.crt`. Se non sei sicuro di quale file usare, apri il file in un editor di testo e cerca quello contenente uno o più blocchi che iniziano con la seguente riga.  

   ```
   - - - - -BEGIN CERTIFICATE - - - - - 
   ```
Il file deve inoltre terminare con la seguente riga.  

   ```
   - - - -END CERTIFICATE - - - - -
   ```
Puoi anche testare il file nella riga di comando come indicato di seguito.  

   ```
   [ec2-user certs]$ openssl x509 -in certificate.crt -text
   ```
Verifica che nel file appaiano queste righe. Non utilizzare file che terminano con `.p7b`, `.p7c` o estensioni simili.

1. Posizionare il nuovo certificato firmato dalla CA ed eventuali certificati intermedi nella directory `/etc/pki/tls/certs`.
**Nota**  
Esistono vari modi per caricare il nuovo certificato nell'istanza EC2, ma il più semplice e immediato prevede di aprire un editor di testo (ad esempio, vi, nano o notepad) sul computer locale e sull'istanza e quindi di copiare e incollare il contenuto del file in queste posizioni. Devi disporre delle autorizzazioni root [sudo] durante l'esecuzione di queste operazioni nell'istanza EC2. In questo modo, puoi verificare in tempo reale se si verificano problemi a livello di autorizzazioni o percorsi. Presta particolare attenzione a non aggiungere altre righe durante la copia del contenuto o a non apportare modifiche di alcun tipo. 

   Dall'interno della `/etc/pki/tls/certs` directory, verifica che le impostazioni di proprietà del file, gruppo e autorizzazione corrispondano ai AL2 valori predefiniti altamente restrittivi (owner=root, group=root, solo per il proprietario). read/write L'esempio seguente mostra i comandi da utilizzare. 

   ```
   [ec2-user certs]$ sudo chown root:root custom.crt
   [ec2-user certs]$ sudo chmod 600 custom.crt
   [ec2-user certs]$ ls -al custom.crt
   ```

   Questi comandi dovrebbero restituire il seguente risultato. 

   ```
   -rw------- root root custom.crt
   ```

   Le autorizzazioni del file del certificato intermedio sono meno rigide (owner=root, group=root, il proprietario può scrivere, il gruppo può leggere, tutti gli utenti possono leggere). L'esempio seguente mostra i comandi da utilizzare. 

   ```
   [ec2-user certs]$ sudo chown root:root intermediate.crt
   [ec2-user certs]$ sudo chmod 644 intermediate.crt
   [ec2-user certs]$ ls -al intermediate.crt
   ```

   Questi comandi dovrebbero restituire il seguente risultato.

   ```
   -rw-r--r-- root root intermediate.crt
   ```

1. Posizionare la chiave privata utilizzata per creare la CRS nella directory `/etc/pki/tls/private/`. 
**Nota**  
Esistono vari modi per caricare la chiave personalizzata nell'istanza EC2, ma il più semplice e immediato prevede di aprire un editor di testo (ad esempio, vi, nano o notepad) sul computer locale e sull'istanza e quindi di copiare e incollare il contenuto del file in queste posizioni. Devi disporre delle autorizzazioni root [sudo] durante l'esecuzione di queste operazioni nell'istanza EC2. In questo modo, puoi verificare in tempo reale se si verificano problemi a livello di autorizzazioni o percorsi. Presta particolare attenzione a non aggiungere altre righe durante la copia del contenuto o a non apportare modifiche di alcun tipo.

   Dall'interno della `/etc/pki/tls/private` directory, usa i seguenti comandi per verificare che le impostazioni di proprietà, gruppo e autorizzazione dei file corrispondano ai valori AL2 predefiniti altamente restrittivi (owner=root, group=root, solo per il proprietario). read/write 

   ```
   [ec2-user private]$ sudo chown root:root custom.key
   [ec2-user private]$ sudo chmod 600 custom.key
   [ec2-user private]$ ls -al custom.key
   ```

   Questi comandi dovrebbero restituire il seguente risultato.

   ```
   -rw------- root root custom.key
   ```

1. Modificare `/etc/httpd/conf.d/ssl.conf` per riflettere i nuovi file del certificato e della chiave.

   1. Indicare il percorso e il nome del file del certificato host firmato dalla CA nella direttiva `SSLCertificateFile` di Apache:

      ```
      SSLCertificateFile /etc/pki/tls/certs/custom.crt
      ```

   1. In caso di ricezione di un file del certificato intermedio (`intermediate.crt` in questo esempio), specificare il relativo percorso e nome di file utilizzando la direttiva `SSLCACertificateFile` di Apache:

      ```
      SSLCACertificateFile /etc/pki/tls/certs/intermediate.crt
      ```
**Nota**  
Alcuni CAs combinano il certificato host e i certificati intermedi in un unico file, rendendo la direttiva non necessaria. `SSLCACertificateFile` Consultare le istruzioni fornite dalla CA.

   1. Specificare il percorso e il nome del file della chiave privata (`custom.key` in questo esempio) nella direttiva `SSLCertificateKeyFile` di Apache:

      ```
      SSLCertificateKeyFile /etc/pki/tls/private/custom.key
      ```

1. Salvare `/etc/httpd/conf.d/ssl.conf` e riavviare Apache.

   ```
   [ec2-user ~]$ sudo systemctl restart httpd
   ```

1. Testare il server digitando il nome del dominio nella barra dell'URL di un browser con il prefisso `https://`. Il browser deve caricare la pagina di test su HTTPS senza errori.

## Fase 3: testare e proteggere la configurazione di sicurezza
<a name="ssl_test"></a>

Dopo aver configurato TLS e averlo esposto al pubblico, devi testarne il livello effettivo di sicurezza. Questa operazione è semplice grazie a servizi online quali [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), che eseguono un'analisi completa e gratuita della configurazione della sicurezza. In base ai risultati, puoi decidere di rafforzare la configurazione di sicurezza di default mediante il controllo dei protocolli accettati, del tipo di cifratura preferito e degli elementi da escludere. Per ulteriori informazioni, consulta la sezione relativa alla [formulazione delle classificazioni di Qualys](https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide).

**Importante**  
Il test in un ambiente reale è di cruciale importanza per la sicurezza del server. Piccoli errori di configurazione potrebbero generare gravi violazioni della sicurezza e perdita di dati. Poiché le procedure consigliate per la sicurezza sono in costante cambiamento in risposta a programmi di ricerca e minacce emergenti, verifiche periodiche della sicurezza rappresentano una pratica di amministrazione ottimale dei server. 

Nel sito [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), immetti il nome di dominio completo del server nel formato **www.example.com**. Dopo circa due minuti riceverai una valutazione del sito (da A a F) e un'analisi dettagliata dei risultati. La tabella seguente riassume il rapporto per un dominio con impostazioni identiche alla configurazione predefinita di Apache e con un certificato Certbot predefinito. AL2 


|  |  | 
| --- |--- |
| Valutazione complessiva | B | 
| Certificato | 100% | 
| Supporto dei protocolli | 95% | 
| Scambio di chiavi | 70% | 
| Affidabilità crittografia | 90% | 

Benché dalla panoramica emerga una certa solidità della configurazione, il rapporto dettagliato mette in luce diversi potenziali problemi, qui elencati in ordine di gravità:

✗ **La RC4 crittografia è supportata per l'uso da parte di alcuni browser meno recenti**. Un codice è il nucleo matematico di un algoritmo di crittografia. RC4[, un codice veloce utilizzato per crittografare i flussi di dati TLS, è noto per presentare diversi gravi punti deboli.](http://www.imperva.com/docs/hii_attacking_ssl_when_using_rc4.pdf) A meno di avere ottime ragioni per supportare browser legacy, è necessario disabilitare questa opzione.

✗ **Sono supportate versioni di TLS meno recenti.** La configurazione supporta TLS 1.0 (già obsoleto) e TLS 1.1 (in procinto di diventare obsoleto). A partire dal 2018, è raccomandato soltanto TLS 1.2.

✗ **La proprietà Forward Secrecy non è completamente supportata.** La proprietà [Forward Secrecy](https://en.wikipedia.org/wiki/Forward_secrecy) è una caratteristica degli algoritmi che eseguono la crittografia utilizzando chiavi di sessione temporanee (effimere) derivate dalla chiave privata. Ciò in pratica significa che gli utenti malintenzionati non possono decriptare i dati HTTPS anche se sono in possesso della chiave privata a lungo termine di un server Web.

**Per correggere e rendere valida anche per il futuro la configurazione TLS**

1. Aprire il file di configurazione `/etc/httpd/conf.d/ssl.conf` in un editor di testo e commentare la seguente riga inserendo il carattere "\$1" all'inizio:

   ```
   #SSLProtocol all -SSLv3
   ```

1. Aggiungere la seguente direttiva:

   ```
   #SSLProtocol all -SSLv3
   SSLProtocol -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
   ```

   Questa direttiva disabilita in modo esplicito SSL versioni 2 e 3, nonché TLS versioni 1.0 e 1.1. Il server ora non accetta più connessioni crittografate con client che utilizzano crittografie diverse da TLS 1.2. Le descrizioni dettagliate della direttiva illustrano più chiaramente al lettore la tipologia di configurazione impostata per il server.
**Nota**  
La disabilitazione di TLS versioni 1.0 e 1.1 consente di bloccare l'accesso al sito da parte di una piccola percentuale di browser Web non aggiornati.

**Per modificare l'elenco delle crittografie consentite**

1. Nel file di configurazione `/etc/httpd/conf.d/ssl.conf`, individuare la sezione con la direttiva **SSLCipherSuite** e commentare la riga esistente inserendo il carattere "\$1" all'inizio.

   ```
   #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
   ```

1. Specificare suite di crittografia esplicite e un ordine di crittografia che dia priorità alla funzione Forward Secrecy e che eviti crittografie non sicure. La direttiva `SSLCipherSuite` qui utilizzata si basa su un output del [generatore di configurazioni SSL di Mozilla](https://mozilla.github.io/server-side-tls/ssl-config-generator/), che personalizza una configurazione TLS in funzione del software specifico in esecuzione sul server Per prima cosa determinare le versioni di Apache e OpenSSL in base all'output dei seguenti comandi.

   ```
   [ec2-user ~]$ yum list installed | grep httpd
   
   [ec2-user ~]$ yum list installed | grep openssl
   ```

   Ad esempio, se l'informazione restituita è Apache 2.4.34 e OpenSSL 1.0.2, inserirla nel generatore. Scegliere poi il modello di compatibilità “moderna”, che crea una direttiva `SSLCipherSuite` e applica in modo rigido la sicurezza ma che funziona per la maggior parte dei browser. Se il software non supporta la configurazione moderna, è possibile aggiornarlo o scegliere la configurazione “intermedia”.

   ```
   SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:
   ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:
   ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256
   ```

   Le crittografie selezionate includono nel proprio nome l'acronimo *ECDHE* (*, abbreviazione di Elliptic Curve Diffie-Hellman Ephemeral)*. Il termine *effimero* fa riferimento alla proprietà Forward Secrecy. Come sottoprodotto, questi codici non supportano. RC4

   È consigliabile utilizzare un elenco esplicito di crittografie anziché utilizzare le impostazioni predefinite o le direttive concise il cui contenuto non è visibile.

   Copiare la direttiva generata in `/etc/httpd/conf.d/ssl.conf`.
**Nota**  
Nonostante in questa sede siano riportate su più righe per facilitarne la leggibilità, una volta copiata su `/etc/httpd/conf.d/ssl.conf` la direttiva deve trovarsi su un'unica riga con solo due punti (senza spazi) tra i nomi di crittografia.

1. Rimuovere infine i commenti mediante la rimozione del carattere "\$1" dall'inizio della riga:

   ```
   #SSLHonorCipherOrder on
   ```

   Questa direttiva obbliga il server a preferire crittografie con classificazione più elevata, comprese (in questo caso) quelle che supportano la proprietà Forward Secrecy. Con questa direttiva abilitata, il server cerca di stabilire una connessione stabile e affidabile prima di ripiegare sulle crittografie consentite con un livello inferiore di sicurezza.

Dopo aver completato entrambe le procedure, salvare le modifiche a `/etc/httpd/conf.d/ssl.conf` e riavviare Apache.

Se testate nuovamente il dominio su [Qualys SSL Labs](https://www.ssllabs.com/ssltest/analyze.html), dovreste vedere che la RC4 vulnerabilità e gli altri avvisi sono scomparsi e il riepilogo sarà simile al seguente.


|  |  | 
| --- |--- |
| Valutazione complessiva | A | 
| Certificato | 100% | 
| Supporto dei protocolli | 100% | 
| Scambio di chiavi | 90% | 
| Affidabilità crittografia | 90% | 

Ogni aggiornamento a OpenSSL introduce nuove crittografie e rimuove il supporto per quelle vecchie. Conserva la tua AL2 istanza EC2 up-to-date, tieni d'occhio gli annunci di sicurezza di [OpenSSL](https://www.openssl.org/) e fai attenzione alle segnalazioni di nuovi exploit di sicurezza pubblicate dalla stampa tecnica.

## Risoluzione dei problemi
<a name="troubleshooting"></a>
+ **Il server Web Apache non si avvia a meno che non venga fornita una password**

  Si tratta del comportamento previsto se per il server hai installato una chiave privata crittografata e protetta con password.

  Puoi rimuovere i requisiti di crittografia e password dalla chiave. Supponiamo, ad esempio, di avere una chiave RSA crittografata privata denominata `custom.key` nella directory di default e associata alla password **abcde12345**. Per generare una versione non crittografata della chiave, devi eseguire i seguenti comandi nell'istanza EC2:

  ```
  [ec2-user ~]$ cd /etc/pki/tls/private/
  [ec2-user private]$ sudo cp custom.key custom.key.bak
  [ec2-user private]$ sudo openssl rsa -in custom.key -passin pass:abcde12345 -out custom.key.nocrypt 
  [ec2-user private]$ sudo mv custom.key.nocrypt custom.key
  [ec2-user private]$ sudo chown root:root custom.key
  [ec2-user private]$ sudo chmod 600 custom.key
  [ec2-user private]$ sudo systemctl restart httpd
  ```

  A questo punto, Apache viene avviato senza visualizzare alcuna richiesta di password.
+  **Vengono visualizzati errori quando eseguo il comando sudo yum install -y mod\$1ssl.**

  Quando installi i pacchetti richiesti per SSL, è possibile che vengano visualizzati errori simili ai seguenti.

  ```
  Error: httpd24-tools conflicts with httpd-tools-2.2.34-1.16.amzn1.x86_64
  Error: httpd24 conflicts with httpd-2.2.34-1.16.amzn1.x86_64
  ```

  Ciò significa in genere che l'istanza EC2 non è in esecuzione. AL2 Questo tutorial supporta solo istanze appena create a partire da un'AMI di AL2 ufficiale.

# Tutorial: Ospita un WordPress blog su AL2
<a name="hosting-wordpress"></a>

Le seguenti procedure ti aiuteranno a installare, configurare e proteggere un WordPress blog sulla tua istanza AL2. Questo tutorial è una buona introduzione all'uso di Amazon EC2 in quanto hai il pieno controllo su un server Web che ospita il tuo WordPress blog, cosa non tipica di un servizio di hosting tradizionale.

È tua responsabilità aggiornare i pacchetti software e gestire le patch di sicurezza del server. Per un' WordPress installazione più automatizzata che non richieda l'interazione diretta con la configurazione del server Web, il CloudFormation servizio fornisce un WordPress modello che può anche aiutarti a iniziare rapidamente. Per ulteriori informazioni, consulta [Nozioni di base](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/GettingStarted.Walkthrough.html) nella *Guida per l'utente di AWS CloudFormation *. *Se hai bisogno di una soluzione ad alta disponibilità con un database disaccoppiato, consulta [Implementazione di un WordPress sito Web ad alta disponibilità](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/php-hawordpress-tutorial.html) nella Guida per gli sviluppatori.AWS Elastic Beanstalk *

**Importante**  
Queste procedure sono destinate all'uso con. AL2 Per ulteriori informazioni su altre distribuzioni, consulta la documentazione specifica. Numerose fasi in questo tutorial non funzionano sulle istanze Ubuntu. Per informazioni WordPress sull'installazione su un'istanza di Ubuntu, [WordPress](https://help.ubuntu.com/community/WordPress)consulta la documentazione di Ubuntu. Puoi anche [CodeDeploy](https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-wordpress-launch-instance.html)utilizzarlo per eseguire questa operazione su sistemi Amazon Linux, macOS o Unix.

**Topics**
+ [Prerequisiti](#hosting-wordpress-prereqs)
+ [Installa WordPress](#install-wordpress)
+ [Fasi successive](#wordpress-next-steps)
+ [Aiuto\$1 Il nome DNS pubblico è cambiato e il blog non è accessibile](#wordpress-troubleshooting)

## Prerequisiti
<a name="hosting-wordpress-prereqs"></a>

Questo tutorial presuppone che tu abbia avviato un' AL2 istanza con un server web funzionale con PHP e supporto per database (MySQL o MariadB) seguendo tutti i passaggi indicati. [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md) Questo tutorial include inoltre la procedura per configurare un gruppo di sicurezza che consenta il traffico `HTTP` e `HTTPS`, nonché varie fasi da eseguire per verificare che le autorizzazioni di file siano state configurate correttamente per il server Web. Per informazioni sull'aggiunta di regole al gruppo di sicurezza, consulta [Aggiungere](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/working-with-security-groups.html#adding-security-group-rule) regole a un gruppo di sicurezza.

Ti consigliamo vivamente di associare un indirizzo IP elastico (EIP) all'istanza che stai utilizzando per ospitare un WordPress blog. Ciò impedisce all'indirizzo DNS pubblico dell'istanza di modificare e interrompere l'installazione. Se sei proprietario di un nome di dominio e vuoi utilizzarlo per il tuo blog, puoi aggiornare il record DNS del nome di dominio in modo che punti all'indirizzo EIP (per ulteriori informazioni su questa procedura, contatta il registrar di nomi di dominio). Puoi usufruire di un indirizzo EIP associato a un'istanza in esecuzione gratuitamente. Per ulteriori informazioni, consulta [Indirizzi IP elastici](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/elastic-ip-addresses-eip.html) nella *Guida per l’utente di Amazon EC2*.

Se non disponi ancora di un nome di dominio per il tuo blog, puoi registrare un nome di dominio con Route 53 e associare l'indirizzo EIP dell'istanza al nome di dominio. Per ulteriori informazioni, consulta la pagina relativa alla [registrazione dei nomi di dominio utilizzando Amazon Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/registrar.html) nella *Guida per lo sviluppatore di Amazon Route 53*.

## Installa WordPress
<a name="install-wordpress"></a>

**Opzione: completare questo tutorial mediante Automation**  
Per completare questo tutorial utilizzando AWS Systems Manager l'automazione anziché le seguenti attività, esegui il [documento di automazione](https://console.aws.amazon.com/systems-manager/documents/AWSDocs-HostingAWordPressBlog/).

Connect all'istanza e scarica il pacchetto WordPress di installazione.

**Per scaricare e decomprimere il pacchetto di WordPress installazione**

1. Scarica il pacchetto di WordPress installazione più recente con il **wget** comando. Il comando seguente dovrebbe scaricare sempre la versione più recente.

   ```
   [ec2-user ~]$ wget https://wordpress.org/latest.tar.gz
   ```

1. Decomprimere ed estrarre il pacchetto di installazione. La cartella di installazione viene decompressa in una cartella denominata `wordpress`.

   ```
   [ec2-user ~]$ tar -xzf latest.tar.gz
   ```<a name="create_user_and_database"></a>

**Per creare un utente del database e un database per l' WordPress installazione**

 WordPress L'installazione deve archiviare informazioni, come post di blog e commenti degli utenti, in un database. Questa procedura consente di creare un database del blog e un utente autorizzato a leggere e salvare le informazioni in tale database. 

1. Avviare il server di database.
   + 

     ```
     [ec2-user ~]$ sudo systemctl start mariadb
     ```

1. Accedere al server di database come utente `root`. Immetti la password database `root` quando viene richiesto. Questa password potrebbe essere diversa dalla password del sistema `root` oppure potrebbe anche essere vuota se non hai impostato alcuna protezione per il server di database.

   Se non hai ancora definito la protezione del server di database, è importante che tu lo faccia ora. Per ulteriori informazioni, vedere [Per proteggere il server MariaDB](ec2-lamp-amazon-linux-2.md#securing-maria-db) (AL2).

   ```
   [ec2-user ~]$ mysql -u root -p
   ```

1. <a name="create_database_user"></a>Creare un utente e una password per il database MySQL. L' WordPressinstallazione utilizza questi valori per comunicare con il database MySQL. 

   Assicurarsi di creare una password complessa per l'utente. Non utilizzare l'apostrofo ( ' ) nella password perché interromperebbe l'esecuzione del comando che lo precede. Non riutilizzare una password esistente e accertarsi di memorizzare questa password in un luogo sicuro.

   Immettere il seguente comando, ricordandosi di sostituire gli argomenti con un nome utente univoco e una password.

   ```
   CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
   ```

1. <a name="create_database"></a>Creare il database. Assegnare al database un nome descrittivo e significativo, ad esempio `wordpress-db`.
**Nota**  
I segni di punteggiatura che racchiudono il nome del database nel comando riportato di seguito sono definiti backtick (apice retroverso). Il tasto del segno backtick (apice retroverso) (```) in genere si trova sopra il tasto `Tab` su una tastiera standard. I backtick non sono sempre richiesti, ma consentono di utilizzare caratteri altrimenti non validi, ad esempio i trattini, nei nomi di database.

   ```
   CREATE DATABASE `wordpress-db`;
   ```

1. Concedi i privilegi completi per il tuo database all' WordPress utente che hai creato in precedenza.

   ```
   GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
   ```

1. Scaricare i privilegi del database per implementare tutte le modifiche apportate.

   ```
   FLUSH PRIVILEGES;
   ```

1. Uscire dal client `mysql`.

   ```
   exit
   ```

**Per creare e modificare il file wp-config.php**

La cartella WordPress di installazione contiene un file di configurazione di esempio chiamato`wp-config-sample.php`. In questa procedura, puoi copiare questo file e modificarlo in modo conforme a una configurazione specifica.

1. Copiare il file `wp-config-sample.php` in un file denominato `wp-config.php`. In questo modo, crei un nuovo file di configurazione mantenendo intatto il file campione originale come backup.

   ```
   [ec2-user ~]$ cp wordpress/wp-config-sample.php wordpress/wp-config.php
   ```

1. Modificare il file `wp-config.php` con l'editor di testo preferito (ad esempio **nano** o **vim**) e immettere i valori dell'installazione in uso. Se non si dispone di un editor di testo preferito, `nano` è adatto agli utenti non esperti.

   ```
   [ec2-user ~]$ nano wordpress/wp-config.php
   ```

   1. Cercare la riga che definisce `DB_NAME` e modificare `database_name_here` utilizzando il nome di database creato in [Step 4](#create_database) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_NAME', 'wordpress-db');
      ```

   1. Cercare la riga che definisce `DB_USER` e modificare `username_here` utilizzando l'utente database creato in [Step 3](#create_database_user) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_USER', 'wordpress-user');
      ```

   1. Cercare la riga che definisce `DB_PASSWORD` e modificare `password_here` utilizzando la password complessa creata in [Step 3](#create_database_user) di [Per creare un utente del database e un database per l' WordPress installazione](#create_user_and_database).

      ```
      define('DB_PASSWORD', 'your_strong_password');
      ```

   1. Cercare la sezione denominata `Authentication Unique Keys and Salts`. Questi `KEY` e questi `SALT` valori forniscono un livello di crittografia ai cookie del browser che WordPress gli utenti archiviano sui loro computer locali. In sostanza, l'aggiunta di valori lunghi e casuali rende il sito più sicuro. Visita [https://api.wordpress. org/secret-key/1.1/salt](https://api.wordpress.org/secret-key/1.1/salt/)/per generare in modo casuale un set di valori chiave che puoi copiare e incollare nel tuo `wp-config.php` file. Per incollare il testo in un'applicazione terminale PuTTY, posizionare il cursore nel punto in cui si desidera incollare il teste e fare clic con il pulsante destro del mouse all'interno dell'applicazione terminale PuTTY.

      [Per ulteriori informazioni sulle chiavi di sicurezza, visita https://wordpress. org/support/article/editing-wp-config-php/\$1security -keys](https://wordpress.org/support/article/editing-wp-config-php/#security-keys).
**Nota**  
I valori riportati di seguito sono a solo scopo di esempio. Non utilizzarli per l'installazione in uso.

      ```
      define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
      define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
      define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
      define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
      define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
      define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
      define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
      define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
      ```

   1. Salva il file ed esci dall’editor di testo.

**Per installare i WordPress file nella cartella principale del documento Apache**
+ Dopo aver decompresso la cartella di installazione, creato un database e un utente MySQL e personalizzato il file di WordPress configurazione, è possibile copiare i file di installazione nella cartella principale dei documenti del server Web in modo da poter eseguire lo script di installazione che completa l'installazione. La posizione di questi file dipende dal fatto che il WordPress blog sia disponibile nella directory principale effettiva del server Web (ad esempio,`my.public.dns.amazonaws.com`) o in una sottodirectory o cartella sotto la radice (ad esempio,`my.public.dns.amazonaws.com/blog`).
  + Se volete WordPress eseguirlo nella directory principale del documento, copiate il contenuto della directory di installazione di wordpress (ma non la directory stessa) come segue: 

    ```
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/
    ```
  + Se volete WordPress eseguirlo in una directory alternativa sotto la radice del documento, create prima quella directory e poi copiate i file al suo interno. In questo esempio, WordPress verrà eseguito dalla directory`blog`:

    ```
    [ec2-user ~]$ mkdir /var/www/html/blog
    [ec2-user ~]$ cp -r wordpress/* /var/www/html/blog/
    ```

**Importante**  
Per motivi di sicurezza, se non si passa immediatamente alla procedura successiva, arrestare ora il server Web Apache (`httpd`). Dopo aver spostato l'installazione nella directory principale del documento Apache, lo script di WordPress installazione non è protetto e un utente malintenzionato potrebbe accedere al tuo blog se il server web Apache fosse in esecuzione. Per arrestare il server Web Apache, immettere il comando **sudo systemctl stop httpd**. Se invece si passa alla procedura successiva, non è necessario arrestare il server Web Apache.

**Per consentire l'uso dei permalink WordPress**

WordPress i permalink devono utilizzare i `.htaccess` file Apache per funzionare correttamente, ma questo non è abilitato di default su Amazon Linux. Utilizza la seguente procedura per consentire tutte le modifiche nella directory radice dei documenti di Apache.

1. Aprire il file `httpd.conf` con l'editor di testo preferito (ad esempio **nano** o **vim**). Se non si dispone di un editor di testo preferito, `nano` è adatto agli utenti non esperti.

   ```
   [ec2-user ~]$ sudo vim /etc/httpd/conf/httpd.conf
   ```

1. Cercare la sezione che inizia con `<Directory "/var/www/html">`.

   ```
   <Directory "/var/www/html">
       #
       # Possible values for the Options directive are "None", "All",
       # or any combination of:
       #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
       #
       # Note that "MultiViews" must be named *explicitly* --- "Options All"
       # doesn't give it to you.
       #
       # The Options directive is both complicated and important.  Please see
       # http://httpd.apache.org/docs/2.4/mod/core.html#options
       # for more information.
       #
       Options Indexes FollowSymLinks
   
       #
       # AllowOverride controls what directives may be placed in .htaccess files.
       # It can be "All", "None", or any combination of the keywords:
       #   Options FileInfo AuthConfig Limit
       #
       AllowOverride None
   
       #
       # Controls who can get stuff from this server.
       #
       Require all granted
   </Directory>
   ```

1. Modificare la riga `AllowOverride None` nella sezione precedente in modo che sia impostata nel seguente modo: `AllowOverride All`.
**Nota**  
Sono presenti più righe `AllowOverride` in questo file. Assicurarsi di modificare la riga nella sezione `<Directory "/var/www/html">`.

   ```
   AllowOverride All
   ```

1. Salva il file ed esci dall’editor di testo.

**Per installare la libreria di disegni grafici PHP su AL2**  
La libreria GD per PHP consente di modificare le immagini. Installa questa libreria se hai bisogno di ritagliare l'immagine di intestazione per il tuo blog. La versione da installare potrebbe richiedere una versione minima specifica di questa libreria (ad esempio, la versione 7.2). phpMyAdmin 

Usa il seguente comando per installare la libreria di disegni grafici PHP su. AL2 Ad esempio, se hai installato php7.2 da amazon-linux-extras come parte dell'installazione dello stack LAMP, questo comando installa la versione 7.2 della libreria di disegni grafici PHP.

```
[ec2-user ~]$ sudo yum install php-gd
```

Per verificare la versione installata utilizza il seguente comando:

```
[ec2-user ~]$ sudo yum list installed php-gd
```

Di seguito è riportato un output di esempio:

```
php-gd.x86_64                     7.2.30-1.amzn2             @amzn2extra-php7.2
```

**Per correggere le autorizzazioni di file sul server Web Apache**

Alcune delle funzionalità disponibili WordPress richiedono l'accesso in scrittura alla radice del documento Apache (come il caricamento di contenuti multimediali tramite le schermate di amministrazione). Se non l'avete ancora fatto, applicate le seguenti appartenenze ai gruppi e autorizzazioni (come descritto più dettagliatamente nella). [Tutorial: installa un server LAMP su AL2](ec2-lamp-amazon-linux-2.md)

1. Garantire la proprietà dei file di `/var/www` e dei suoi contenuti all'utente `apache`.

   ```
   [ec2-user ~]$ sudo chown -R apache /var/www
   ```

1. Garantire la proprietà del gruppo di `/var/www` e dei suoi contenuti al gruppo `apache`.

   ```
   [ec2-user ~]$ sudo chgrp -R apache /var/www
   ```

1. Modificare le autorizzazioni a livello di directory di `/var/www` e delle relative sottodirectory per aggiungere le autorizzazioni di scrittura e impostare l'ID gruppo per le sottodirectory future.

   ```
   [ec2-user ~]$ sudo chmod 2775 /var/www
   [ec2-user ~]$ find /var/www -type d -exec sudo chmod 2775 {} \;
   ```

1. Modifica in modo ricorsivo le autorizzazioni di file di `/var/www` e delle relative sottodirectory.

   ```
   [ec2-user ~]$ find /var/www -type f -exec sudo chmod 0644 {} \;
   ```
**Nota**  
 Se intendete utilizzarlo anche WordPress come server FTP, qui avrete bisogno di impostazioni di gruppo più permissive. Per eseguire questa operazione, consulta [i passaggi e le impostazioni di sicurezza consigliati WordPress in](https://wordpress.org/support/article/changing-file-permissions/). 

1. Riavviare il server Web Apache per implementare il nuovo gruppo e le nuove autorizzazioni.
   + 

     ```
     [ec2-user ~]$ sudo systemctl restart httpd
     ```

**Esegui lo script WordPress di installazione con AL2**

Sei pronto per l'installazione WordPress. I comandi utilizzati dipendono dal sistema operativo. I comandi di questa procedura possono essere utilizzati con AL2.

1. Utilizzare il comando **systemctl** per assicurarsi che i servizio `httpd` e di database vengano avviati a ogni avvio del sistema.

   ```
   [ec2-user ~]$ sudo systemctl enable httpd && sudo systemctl enable mariadb
   ```

1. Verificare che il server di database sia in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl status mariadb
   ```

   Se il servizio di database non è in esecuzione, avviarlo.

   ```
   [ec2-user ~]$ sudo systemctl start mariadb
   ```

1. Verificare che il server Web Apache (`httpd`) sia in esecuzione.

   ```
   [ec2-user ~]$ sudo systemctl status httpd
   ```

   Se il servizio `httpd` non è in esecuzione, avviarlo.

   ```
   [ec2-user ~]$ sudo systemctl start httpd
   ```

1. In un browser Web, digita l'URL del tuo WordPress blog (l'indirizzo DNS pubblico dell'istanza o l'indirizzo seguito dalla `blog` cartella). Dovresti vedere lo script di WordPress installazione. Fornisci le informazioni richieste dall' WordPress installazione. Per completare l’installazione, seleziona **Installa WordPress**. Per ulteriori informazioni, consulta [Passaggio 5: Esecuzione dello script di installazione](https://wordpress.org/support/article/how-to-install-wordpress/#step-5-run-the-install-script) sul WordPress sito Web.

## Fasi successive
<a name="wordpress-next-steps"></a>

Dopo aver testato il tuo WordPress blog, valuta la possibilità di aggiornarne la configurazione.

**Utilizza un nome di dominio personalizzato**  
Se all'indirizzo EIP dell'istanza EC2 è associato un nome di dominio, puoi configurare il blog in modo che utilizzi tale nome anziché l'indirizzo DNS EC2 pubblico. Per ulteriori informazioni, consulta [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/) sul WordPress sito Web.

**Configurazione del blog**  
Puoi configurare il blog in modo che utilizzi [temi](https://wordpress.org/themes/) e [plugin](https://wordpress.org/plugins/) diversi in modo da offrire un'esperienza più personalizzata ai lettori. Tuttavia, il processo di installazione può talvolta generare problemi che portano alla perdita dell'intero blog. Pertanto, consigliamo vivamente di eseguire una copia di backup dell'Amazon Machine Image (AMI) dell'istanza prima di tentare di installare temi o plugin in modo da essere in grado di ripristinare il blog in caso di problemi durante l'installazione. Per ulteriori informazioni, consulta [Creare la propria AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html#creating-an-ami).

**Aumento della capacità**  
Se il tuo WordPress blog diventa popolare e hai bisogno di maggiore potenza di calcolo o spazio di archiviazione, prendi in considerazione i seguenti passaggi:
+ Espandi lo spazio di storage sull'istanza. Per ulteriori informazioni, consulta [Volumi elastici Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-modify-volume.html) nella *Guida per l'utente di Amazon EBS*.
+ Trasferisci il database MySQL in [Amazon RDS](https://aws.amazon.com/rds) in modo da sfruttare tutte le funzionalità di scalabilità del servizio.

**Miglioramento delle prestazioni di rete del traffico Internet**  
Se ti aspetti che il tuo blog gestisca il traffico da parte di utenti situati in tutto il mondo, considera l'uso di [AWS Global Accelerator](https://aws.amazon.com/global-accelerator). Global Accelerator ti aiuta a ridurre la latenza migliorando le prestazioni del traffico Internet tra i dispositivi client degli utenti e l'applicazione su cui è in esecuzione WordPress . AWS Global Accelerator utilizza la [rete AWS globale](https://aws.amazon.com/about-aws/global-infrastructure/global_network/) per indirizzare il traffico verso un endpoint applicativo funzionante nella AWS regione più vicina al client.

**Scopri di più su WordPress**  
Per informazioni in merito WordPress, consultate la documentazione di aiuto del WordPress Codex all'[indirizzo http://codex.wordpress.org/](http://codex.wordpress.org/).

Per ulteriori informazioni sulla risoluzione dei problemi di installazione, consulta [Problemi di installazione comuni](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems).

Per informazioni su come rendere il tuo WordPress blog più sicuro, consulta [Hardening. WordPress](https://wordpress.org/support/article/hardening-wordpress/)

Per informazioni sulla gestione del WordPress blog up-to-date, consulta [Aggiornamento WordPress](https://wordpress.org/support/article/updating-wordpress/).

## Aiuto\$1 Il nome DNS pubblico è cambiato e il blog non è accessibile
<a name="wordpress-troubleshooting"></a>

L' WordPress installazione viene configurata automaticamente utilizzando l'indirizzo DNS pubblico per l'istanza EC2. Se arresti e riavvii l'istanza, l'indirizzo DNS pubblico cambia, a meno che non sia associato a un indirizzo IP elastico, e il blog non funzionerà più perché fa riferimento a risorse disponibili in un indirizzo che non esiste più o che è assegnato a un'altra istanza EC2. Una descrizione più dettagliata del problema e diverse possibili soluzioni sono riportate in [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/).

Se ciò si è verificato durante l' WordPress installazione, potrebbe essere possibile ripristinare il blog seguendo la procedura riportata di seguito, che utilizza l'interfaccia a riga di **wp-cli** comando per WordPress.

**Per modificare l'URL del WordPress sito con **wp-cli****

1. Connettersi all'istanza EC2 con SSH. 

1. Annotare il vecchio URL del sito e il nuovo URL del sito relativi all'istanza. Il vecchio URL del sito è probabilmente il nome DNS pubblico dell'istanza EC2 al momento dell'installazione. WordPress È possibile che il nuovo URL del sito sia il nome DNS pubblico corrente per l'istanza EC2. Se non sei certo del vecchio URL del sito, puoi utilizzare **curl** per cercarlo utilizzando il seguente comando.

   ```
   [ec2-user ~]$ curl localhost | grep wp-content
   ```

   I riferimenti al vecchio nome DNS pubblico dovrebbero essere presenti nell'output e sono simili a quanto segue (il vecchio URL del sito è visualizzato in rosso):

   ```
   <script type='text/javascript' src='http://ec2-52-8-139-223.us-west-1.compute.amazonaws.com/wp-content/themes/twentyfifteen/js/functions.js?ver=20150330'></script>
   ```

1. Scaricare **wp-cli** con il seguente comando.

   ```
   [ec2-user ~]$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
   ```

1. Cerca e sostituisci il vecchio URL del sito nell' WordPress installazione con il seguente comando. Sostituisci il vecchio e il nuovo URL del sito con l'istanza EC2 e il percorso dell' WordPress installazione (di solito `/var/www/html` o). `/var/www/html/blog`

   ```
   [ec2-user ~]$ php wp-cli.phar search-replace 'old_site_url' 'new_site_url' --path=/path/to/wordpress/installation --skip-columns=guid
   ```

1. In un browser web, inserisci il nuovo URL del sito del tuo WordPress blog per verificare che il sito funzioni di nuovo correttamente. In caso contrario, consulta [Modifica dell'URL del sito](https://wordpress.org/support/article/changing-the-site-url/) e [Problemi di installazione comuni](https://wordpress.org/support/article/how-to-install-wordpress/#common-installation-problems) per ulteriori informazioni.