Tutorial > Come configurare una connessione SSL sicura con Apache e AlmaLinux

Come configurare una connessione SSL sicura con Apache e AlmaLinux

Pubblicato il: 21 dicembre 2022

AlmaLinux Apache Hosting Sicurezza

Introduzione

TLS o transport layer security e SSL, secure socket layer, sono due protocolli che garantiscono la sicurezza nelle comunicazioni web. Il traffico web viene infatti cifrato e protetto in un contenitore.

In questa guida, ti mostreremo come abilitare un certificato SSL da poter usare su un web server Apache con un sistema basato su AlmaLinux.

Nell'esempio che ti mostreremo, il certificato SSL sarà autofirmato: ciò vuol dire che esso permetterà la comunicazione sicura tra server e client ma, per mancanza di un riconoscimento ufficiale da parte di una autorità di certificazione, non potrai certificare l'identità del tuo server.

Pre-Requisiti

I prerequisiti sono possedere un sistema operativo Almalinux sul tuo server configurato e funzionante e possedere il pacchetto Apache per configurare i virtual hosts.

Verifica l'installazione di Apache tramite il comando:

$ sudo yum list --installed | grep httpd

Nel caso in cui non avessi ancora installato Apache, puoi installarlo tramite il comando:

$ sudo yum install httpd

La parte successiva è abilitare l'attivazione automatica all'avvio del servizio Apache sul tuo server:

$ sudo systemctl enable httpd.service

Ora sei pronto a accedere al tuo server tramite SSH per proseguire.

Installare Mod SSL

Il primo passo per impostare un certificato autofirmato sarà quello di utilizzare la componente mod_ssl, necessaria alla cifratura SSL all'interno degli scambi di dati nel server.

La componente può essere installata tramite il comando:

$ sudo yum install mod_ssl

La componenete sarà attivata al termine del processo di installazione e Apache sarà disponibile all'avvio con certificato SSL dalla prima volta in cui sarà riavviato. Per farlo, occorrerà il comando:

$ sudo systemctl restart httpd.service

Creare un certificato

Ora che Apache è abilitato per la cifratura, puoi procedere con la creazione di un certificato SSL. I certificati contengono delle informazioni sul tuo sito.

Ogni certificato dovrà essere associato a una chiave privata. Prima di generare il certificato dovremo, quindi, creare una directory, accessibile solo all'utente root e a nessun altro, contenente il file della chiave privata.

Il primo step sarà, quindi, creare la cartella con il comando:

$ sudo mkdir /etc/ssl/private

Successivamente, imposta i privilegi sulla directory per renderla solo disponibile all'utente root:

$ sudo chmod 700 /etc/ssl/private

Ora che possiedi un luogo per salvare i files, potrai creare la chiave SSL e il certificato tramite openssl, usando il comando:

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Questo comando inoltra una richiesta di creazione delle certificazioni e delle chiavi SSL. All'invio del comando, verrai invitato a inserire alcune informazioni basiche sul tuo sito web.

Prima di procedere, cerchiamo di analizzare le opzioni e i comandi di questo comando molto articolato:

  • openssl: il comando collegato allo strumento di gestione dei certificati e delle chiavi SSL
  • req -x509: questa opzione specifica che starai richiedendo un certificato di tipo X.509. X.509 è una infrastruttura per le chiavi pubbliche collegate ai certificati SSL e TLS
  • -nodes: questa opzione suggerisce di saltare l'opzione di impostazione password sul certificato. La richiesta di una password deve essere disabilitata poiché Apache, in fase di avvio del server, deve essere in grado di leggere i files senza che venga richiesto alcun intervento da parte dell'utente.
  • -days 365: questa opzione imposta il tempo di validità del certificato
  • -newkey rsa:2048 : questa opzione specifica che vorrai creare una certificato ma anche una chiave nella tua richiesta. Il valore numerico indica la lunghezza della chiave RSA che, in questo caso, sarà lunga 2048 bit. È possibile commissionare anche la creazione di una chiave di 4096 bit, che provvederà a fornire una maggiore sicurezza ma al costo di maggiori risorse di calcolo durante gli handshake.
  • -keyout: questa opzione specifica dove salvare la chiave da generare
  • -out: questa opzione specifica dove salvare, invece, il certificato

Durante l'inserimento delle informazioni, fa attenzione a inserire correttamente, alla voce Common Name, il nome di dominio o l'indirizzo IP del tuo server.

Al termine di questa procedura, i files saranno salvati in delle sottocartelle del percorso /etc/ssl.

Configurare Apache per l'uso di SSL

Arrivato a questo punto, dovrai aggiungere alla configurazione di Apache le voci necessarie per l'impiego dei certificati SSL. La struttura delle directory di Apache permette, su Almalinux, di creare nuovi files di configurazione da aggiungere nella directory /etc/httpd/conf.d. I files dovranno essere con estensione .conf e, come in ogni modifica della configurazione di Apache, sarà necessario riavviare il servizio per applicare i cambiamenti impostati.

Su un virtual host già configurato in precedenza, potrai aggiungere le opzioni legate a SSL in un nuovo file.

Crea un nuovo file nella directory specificata sopra per poter aggiungere nuove opzioni alla configurazione di Apache. Usa il comando:

$ sudo vi /etc/httpd/conf.d/iltuodominio.conf

Aperto l'editor testuale, inserisci le seguenti istruzioni per specificare le opzioni legate ai certificati SSL:

<VirtualHost *:443>
    ServerName tuodominio
    DocumentRoot /var/www/prova-ssl
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/apache-selfsigned.crt
    SSLCertificateKeyFile /etc/pki/tls/private/apache-selfsigned.key
</VirtualHost>

Al posto di nomedominio dovrai inserire il nome intero del tuo dominio o il suo indirizzo IP. É importante che la scelta sia conforme a ciò che è stato specificato alla voce Common Name, in fase di creazione del certificato.

Il resto delle linee specificheranno semplicemente in quale directory ricercare il certificato e la chiave inclusa.

É importante, quindi, definire una directory puntata dall'opzione DocumentRoot. Usa il comando:

$ sudo mkdir /var/www/prova-ssl

All'interno di questa directory, puoi creare un file index.html per avere una pagina di prova a cui connetterti quando proverai la connessione SSL al tuo dominio.

$ sudo vi /var/www/prova-ssl/index.html

All'interno del file puoi inserire ciò che preferisci, purché sia rispettata la sintassi del linguaggio di formattazione HTML.

Un esempio sarebbe:

<h1>Questa è una pagina di prova HTML</h1>

Terminata la creazione dei vari files, sarà necessario effettuare un controllo sintattico delle istruzioni scritte in questa fase del tutorial.

Lo "spellcheck" dei files di configurazione è eseguibile tramite il comando:

$ sudo apachectl configtest

A priori dai warning che potrebbero incappare in un eventuale output, il tuo obiettivo è semplicemente ottenere , in un primo momento, il messaggio Syntax OK come risposta a questo comando. Ciò indicherà che non ci saranno errori veri e propri nella sintassi della configurazione impostata da te.

Terminato il controllo, occorrerà riavviare il servizio Apache per applicare le nuove modifiche:

$ sudo systemctl reload httpd

Ora, potrai testare la connessione al tuo dominio usando il protocollo HTTPS. Per far ciò, nella barra dell'indirizzo, specifica https:// invece che solo il nome di dominio per indicare di volerti connettere al tuo sito tramite una connessione HTTPS.

Se tutto sarà andato a buon fine, il tuo browser dovrebbe riportarti che il certificato emesso per quel sito non sia verificabile, in quanto non emesso da una autorità conosciuta. Ciò è corretto, in quanto il controllo del certificato sarà stato tentato e sarà andato non a buon fine solo per le motivazioni spiegate all'inizio di questa guida, legate alla creazione di certificati "self-made" e self-signed.

Seppur in un primo momento sembrerebbe che il browser ti impedisca l'accesso al sito, ciò è scavalcabile semplicemente cliccando su Avanzate o sulla voce Più informazioni (a seconda del browser utilizzato) e individuare la voce per procedere comunque nella visualizzazione della pagina web.

Finiti questi step, mancherà solo il reindirizzare ogni richiesta web da HTTP a HTTPS.

Reindirizzare il traffico HTTP a HTTPS

Nella configurazione impostata tramite questa guida, avrai settato Apache per ricevere solo richieste di tipo HTTPS, ospitate sulla porta 443. È possibile ed è buona norma ricevere anche richieste sulla porta 80, legata a HTTP, cercando di reindirizzarle a una connessione di tipo HTTPS.

Per iniziare, riapri il file di configurazione creato negli step precedenti:

$ sudo vi /etc/httpd/conf.d/nomedominio.conf

Alla fine del file, crea un nuovo virtual host che risponda sulla porta 80. Al posto delle istruzioni di prima, sarà necessario impostare solo il Server Name per specificare di che dominio parliamo e, successivamente, tramite l'opzione Redirect, reindirizzare tutte le richieste ricevute all'altro virtual host, legato al protocollo SSL.

Per far ciò , la sintassi del blocco da aggiungere al file di configurazione sarà la seguente:

<VirtualHost *:80>
    ServerName nomedominio
    Redirect / https://nomedominio/
</VirtualHost>

Come nella fase precedente, verifica la sintassi e applica le modifiche tramite la coppia di comandi:

$ sudo apachectl configtest
$ sudo systemctl reload httpd

Se tutto sarà stato fatto correttamente, potrai notare che, anche nel momento in cui dovessi specificare l'indirizzo del tuo dominio con il prefisso http://, ti ritroverai a visitare la pagina con indirizzo https:// in automatico.

Conclusioni

Terminato il tutorial, sarai stato in grado di generare un certificato auto firmato e reindirizzare ogni richiesta di tipo HTTP a una richiesta HTTPS.

Ricorda che, nel caso in cui tu voglia fornire una connessione SSL sicura sul tuo sito,dovrai disporre di un certificato emesso da una autorità preposta e acquistare uno spazio per il nome del tuo dominio.

Potrai acquistarne uno da Actalis, la Certification Authority di Aruba, semplicemente navigando su https://shop.actalis.com/store/it-it/ e procedendo all'acquisto del certificato che preferisci. Tramite Actalis sarà possibile acquistare dei certificati SSL della durata di 1 anno, anche di classe OV (Organization Validation) e EV (Extended Validation), che permettono di certificare l'attendibilità dell'azienda offrendo una maggiore garanzia di affidabilità.