GNU/Linux >> Linux Esercitazione >  >> Linux

Come proteggere una connessione SSL con Apache su Ubuntu 18.04

La configurazione di una connessione SSL (Secure Sockets Layer), consente di aggiungere un protocollo di crittografia asimmetrico aggiuntivo al comune HTTP. Il protocollo SSL può essere utile per rafforzare sia il sistema di autenticazione di un sito web sia lo scambio di dati tra un'app e il server. In questa guida vedrai come configurare una connessione SSL e abilitare HTTPS su Apache con Ubuntu 18.04.

Per prima cosa, connettiti al tuo server tramite una connessione SSH. Se non l'hai ancora fatto, ti consigliamo di seguire la nostra guida per connetterti in modo sicuro con il protocollo SSH. Nel caso di un server locale, vai al passaggio successivo e apri il terminale del tuo server.

Ottenere un certificato SSL

Per stabilire una connessione sicura, Apache avrà bisogno di un certificato SSL che può essere ottenuto da un'Autorità di Certificazione (CA). Per comodità, in questo esempio utilizzeremo un certificato autofirmato o autofirmato, utilizzato solo in ambienti di test e sviluppo. Per ottenere un certificato autofirmato, consulta la nostra guida per creare un certificato SSL autofirmato.

Se sei interessato ad ottenere un certificato SSL gratuito emesso da un'Autorità di Certificazione, segui la nostra guida su Come proteggere Apache con Let's Encrypt e Ubuntu 18.04.

Nota importante:

Durante la creazione del certificato, inserisci l'indirizzo IP del tuo server e/o il nome di dominio quando ti viene chiesto il Nome Comune:

Common Name (e.g. server FQDN or YOUR name) []: domain.com

Dopo aver ottenuto il certificato, crea la cartella /etc/certificate:

$ sudo mkdir /etc/certificate

Quindi salva al suo interno sia il certificato che la chiave privata.

Configurazione dei parametri SSL di Apache

Procedi impostando le direttive per la connessione sicura che creerà Apache. Per farlo, crea il file ssl-params.conf nella directory Apache conf-available:

$ sudo nano /etc/apache2/conf-available/ssl-params.conf

Incolla la seguente configurazione di base nel file appena creato:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
    
    SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
    
    SSLHonorCipherOrder On
    
    
    Header always set X-Frame-Options DENY
    
    Header always set X-Content-Type-Options nosniff
    
    # Requires Apache >= 2.4
    
    SSLCompression off
    
    SSLUseStapling on
    
    SSLStaplingCache "shmcb:logs/stapling-cache(150000)"
    
    
    # Requires Apache >= 2.4.11
    
    SSLSessionTickets Off

Quindi salva e chiudi il file.

Come cambiare l'host virtuale

Quindi, modifica la configurazione SSL dell'Host Virtuale del dominio che vuoi proteggere con connessione SSL. In questo tutorial verrà utilizzata, come esempio, la configurazione SSL dell'host virtuale Apache predefinito.

Apri la configurazione SSL dell'host virtuale:

$ sudo nano /etc/apache2/sites-available/default-ssl.conf

Troverai un file strutturato come segue:

<IfModule mod_ssl.c>
    
            <VirtualHost _default_:443>
    
                    ServerAdmin [email protected]
                     
    
                    DocumentRoot /var/www/html
                     
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
    
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
                     
    
                    SSLEngine on
                     
    
                    SSLCertificateFile      /etc/ssl/certs/ssl-cert-snakeoil.pem
    
                    SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
                     
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
    
                                    SSLOptions +StdEnvVars
    
                    </FilesMatch>
    
                    <Directory /usr/lib/cgi-bin>
    
                                    SSLOptions +StdEnvVars
    
                    </Directory>
                     
    
            </VirtualHost>
    
    </IfModule>

Imposta correttamente la direttiva ServerAdmin inserendo la tua email e aggiungi la direttiva ServerName seguita dal tuo dominio o dall'indirizzo IP del tuo server.

Infine, cambia il percorso indicato dalle direttive SSLCertificateFile e SSLCertificateKeyFile, inserendo rispettivamente il percorso del tuo certificato e la tua chiave privata.

Otterrai un risultato simile al seguente:

<IfModule mod_ssl.c>
    
            <VirtualHost _default_:443>
    
                    ServerAdmin [email protected]
    
                    ServerName mydomain.com
                     
    
                    DocumentRoot /var/www/html
                     
    
                    ErrorLog ${APACHE_LOG_DIR}/error.log
    
                    CustomLog ${APACHE_LOG_DIR}/access.log combined
                     
    
                    SSLEngine on
                     
    
                    SSLCertificateFile      /etc/certificate/certificate.crt
    
                    SSLCertificateKeyFile /etc/certificate/private.key
                     
    
                    <FilesMatch "\.(cgi|shtml|phtml|php)$">
    
                                    SSLOptions +StdEnvVars
    
                    </FilesMatch>
    
                    <Directory /usr/lib/cgi-bin>
    
                                    SSLOptions +StdEnvVars
    
                    </Directory>
                     
    
            </VirtualHost>
    
    </IfModule>

Quindi salva e chiudi il file.

Come configurare il Firewall

In caso di firewall sul tuo sistema, configuralo per abilitare il traffico HTTP e il traffico HTTPS sul tuo computer.

Quando si utilizza il firewall UFW, sono disponibili alcuni profili preinstallati per Apache. Vediamo quindi come abilitarli.

Per verificare i profili disponibili installati nel firewall UFW, eseguire questo comando:

$ sudo ufw app list

Sullo schermo verrà visualizzato un elenco simile al seguente:

Available applications:
    
      Apache
    
      Apache Full
    
      Apache Secure
    
      OpenSSH

Per consentire il traffico HTTP (Porta 80) e HTTPS (Porta 443), utilizza il profilo "Apache Full".

Controlla le informazioni del profilo come segue:

$ sudo ufw app info "Apache Full"

Verrà visualizzata la descrizione del profilo dello schermo:

Profile: Apache Full
    
    Title: Web Server (HTTP,HTTPS)
    Description: Apache v2 is the next generation of the omnipresent Apache web
    server.
    
    Ports:
    80,443/tcp

Dopo aver verificato il profilo, abilitalo:

$ sudo ufw allow in "Apache Full"

Come configurare Apache

A questo punto è possibile apportare modifiche alla configurazione di Apache.

Abilita i moduli mod_ssl e mod_headers:

$ sudo a2enmod ssl
    
    $ sudo a2enmod headers

Abilita la lettura della configurazione SSL creata in precedenza:

$ sudo a2enconf ssl-params

Abilita l'host virtuale SSL predefinito:

$ sudo a2ensite default-ssl

Verifica di non aver commesso errori di sintassi nei file di configurazione di Apache:

$ sudo apache2ctl configtest

Se sullo schermo appare il messaggio "Sintassi OK", procedi riavviando Apache:

$ sudo systemctl restart apache2

Come verificare la connessione sicura

Apri il tuo browser collegandoti al dominio o all'indirizzo IP dell'Host Virtuale che hai configurato, assicurandoti di utilizzare il protocollo https

https://mydomain.com

Linux
  1. Come proteggere vsFTPd con SSL/TLS

  2. Come abilitare il protocollo HTTPS con Apache 2 su Ubuntu 20.04

  3. Come installare Apache su Ubuntu?

  4. Come installare PHP-FPM con Apache su Ubuntu 22.04

  5. Come installare Elasticsearch su Ubuntu 22.04 con SSL

Come installare Drupal su un server Ubuntu 20.04 con Apache

Come installare Apache su Ubuntu 20.04

Come impostare l'autenticazione della password con Apache su Ubuntu 18.04

Come abilitare HTTP/2 con Apache in Ubuntu

Come installare Apache Tomcat 10 su Ubuntu 20.04 con Nginx

Come proteggere Apache con Let's Encrypt su Ubuntu 20.04