SSL è sinonimo di una tecnologia di sicurezza standard globale che consente la comunicazione crittografata tra un browser (Chrome, Edge, Safari) e un server web; letteralmente sta a significare Secure Sockets Layer.
Il certificato SSL è una sorta di garanzia che viene rilasciata da un ente definito Certification Authority. In pratica l’autorità che emette il certificato garantisce che l’organizzazione con cui stai “parlando” attraverso il browser è realmente chi dichiara di essere.
Di seguito gli steps per configurare un certificato SSL in Apache su distribuzione CentOS Linux release 7.6.1810 (Core)
INSTALLAZIONE DI APACHE
Installare Apache con il comando:
0 |
sudo yum install httpd |
Abilitare Apache con il comando:
0 |
sudo systemctl enable httpd.service |
INSTALLAZIONE SSL
Installare il modulo SSL con il comando:
0 |
sudo yum install mod_ssl |
Creare la cartella per i certificati con il comando:
0 |
sudo mkdir /etc/ssl/private |
Settare le ACL corrette digitando:
0 |
sudo chmod 700 /etc/ssl/private |
Con il seguente comando creiamo un certificato SSL:
0 |
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt |
Di seguito la spiegazione di tutti i parametri utilizzati nel comando:
Openssl: Questo è lo strumento di riga di comando di base per la creazione e la gestione di certificati OpenSSL, chiavi e altri file.
Req: Questo sottocomando specifica che vogliamo utilizzare la gestione delle richieste di firma di certificato X.509 (CSR). Il “X.509” è uno standard di infrastruttura chiave pubblica che SSL e TLS aderiscono per la gestione delle chiavi e dei certificati. Vogliamo creare un nuovo certificato X.509, quindi stiamo usando questo sottocomando.
-x509: questo modifica ulteriormente il subcomando precedente indicando l’utilità che vogliamo creare un certificato auto-firmato anziché generare una richiesta di firma del certificato, come accade normalmente.
-nodes: questo dice a OpenSSL di saltare l’opzione per proteggere il nostro certificato con una passphrase. Abbiamo bisogno di Nginx per poter leggere il file, senza intervento dell’utente, quando il server si avvia. Una passphrase impedirebbe che questo accada perché dovremmo entrare dopo ogni riavvio.
-days 3650: Questa opzione imposta la durata del tempo che il certificato sarà considerato valido. nel mio caso ho impostato la valisità per 10 anni
-newkey rsa: 2048: specifica che vogliamo generare un nuovo certificato e una nuova chiave contemporaneamente. Non abbiamo creato la chiave necessaria per firmare il certificato in un passaggio precedente, quindi abbiamo bisogno di crearlo insieme al certificato. La parte di rsa: 2048 lo dice per fare un tasto RSA che è 2048 bit lungo.
-keyout: questa riga dice a OpenSSL dove posizionare il file di chiave privata generato che stiamo creando.
-out: Questo indica a OpenSSL dove inserire il certificato che stiamo creando.
Di seguito vi riporto le domande a cui rispondere:
0 1 2 3 4 5 6 |
Country Name (2 letter code) [AU]:IT State or Province Name (full name) [Some-State]:Torino Locality Name (eg, city) []:Torino Organization Name (eg, company) [Internet Widgits Pty Ltd]:ACME S.r.l. Organizational Unit Name (eg, section) []:ACME S.r.l. Common Name (e.g. server FQDN or YOUR name) []:NOME_DEL_SERVER (va bene mettere anche lì'IP Address) Email Address []:admin@dominio.com |
Entrambi i file creati verranno collocati nelle sottodirectory appropriate della directory /etc/ssl.
Mentre utilizziamo OpenSSL, dobbiamo anche creare il gruppo Diffie-Hellman, utilizzato per negoziare Perfect Forward Secrecy con i client.
Creiamo il gruppo con questo comando:
0 |
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 |
Questa operazione può richiedere diversi minuti ed al termine avremo un gruppo DH in /etc/ssl/certs/dhparam.pem che possiamo usare nella nostra configurazione.
Poiché la versione di Apache fornita con CentOS 7 non include la direttiva SSLOpenSSLConfCmd, dovremo aggiungere manualmente il file generato alla fine del nostro certificato autofirmato. Per fare ciò, digitare:
cat /etc/ssl/certs/dhparam.pem | sudo tee -a /etc/ssl/certs/apache-selfsigned.crt
Il file apache-selfsigned.crt ora dovrebbe avere sia il certificato sia il gruppo Diffie-Hellman generato.
CONFIGURAZIONE DI APACHE CON SSL
Apriamo il file di configurazione di Apache con diritti di root con il comando:
0 |
sudo vi /etc/httpd/conf.d/ssl.conf |
Innanzitutto, rimuovere il commento dalla riga DocumentRoot e modificare il path tra virgolette e la posizione della radice del documento del proprio sito.
Per impostazione predefinita, questo sarà in /var/www/html e non è necessario modificare questa riga se non hai modificato la root del documento per il tuo sito.
Quindi, decommentare la riga ServerName e sostituire NOME-SERVER con il nome del dominio o l’indirizzo IP del server (qualunque sia il nome comune nel certificato):
0 1 2 3 4 |
<VirtualHost _default_:443> # General setup for the virtual host, inherited from global configuration DocumentRoot "/var/www/html" ServerName NOME-SERVER:443 |
Successivamente, trovare le linee SSLProtocol e SSLCipherSuite e eliminarle o commentarle.
0 1 2 3 4 5 6 7 8 |
# SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: #SSLProtocol all -SSLv2 -SSLv3 # SSL Cipher Suite: # List the ciphers that the client is permitted to negotiate. # See the mod_ssl documentation for a complete list. #SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA |
Quindi trovare le righe SSLCertificateFile e SSLCertificateKeyFile e modificale nella directory che abbiamo creato in precedenza:
0 1 2 3 4 5 6 7 8 9 10 11 12 |
# Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key |
Ora posizionarsi al fondo del file di configurazione dopo il tag </VirtualHost> e incollare le seguenti righe di codice:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Begin copied text # from https://cipherli.st/ # and https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 SSLHonorCipherOrder On # Disable preloading HSTS for now. You can use the commented out header line that includes # the "preload" directive if you understand the implications. #Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains" 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 |
Salvare e chiudere il file
Per reindirizzare tutto il traffico da crittografare SSL, creare e aprire un file che termina in .conf nella directory /etc/httpd/conf.d con il comando:
0 |
sudo vi /etc/httpd/conf.d/non-ssl.conf |
quindi incollare le seguenti righe di codice:
0 1 2 3 |
<VirtualHost *:80> ServerName www.NOME-SERVER.com Redirect "/" "https://www.NOME-SERVER.com/" </VirtualHost> |
Salvare e chiudere il file di configurazione
Per verificare che la configurazione sia OK lanciare il comando:
0 |
sudo apachectl configtest |
Se appare il messaggio Syntax OK vuol dire che è tutto corretto.
Riavviare Apache per rendere effettive le configurazioni:
0 |
sudo systemctl restart httpd.service |
Se richiamiamo il link
http://NOME-SERVER dovrebbe andare in automatico in https://NOME-SERVER
Sono Raffaele Chiatto, un appassionato di informatica a 360 gradi.
Tutto è iniziato nel 1996, quando ho scoperto il mondo dell'informatica grazie a Windows 95, e da quel momento non ho più smesso di esplorare e imparare.
Ogni giorno mi dedico con curiosità e passione a scoprire le nuove frontiere di questo settore in continua evoluzione.
0 Comments