Questo articolo mostra come installare un certificato SSL Encrypt su CentOS 7 con Apache attraverso certbot che eseguirà per noi la richiesta e il rinnovo automatico dei certificati utilizzati nelle connessioni SSL (Secure Sockets Layer).
Secure Sockets Layer è un protocollo progettato per consentire alle applicazioni di trasmettere informazioni in modo sicuro e protetto. Le applicazioni che utilizzano i certificati SSL sono in grado di gestire l’invio e la ricezione di chiavi di protezione e di criptare/decriptare le informazioni trasmesse utilizzando le stesse chiavi.
Per stabilire una connessione sicura tramite SSL, è necessario che l’applicazione abbia una chiave di protezione, chiave che deve essere assegnata da un’Authority preposta che la rilascerà sotto forma di certificato.
Let’s Encrypt è una autorità di certificazione completamente gratuita e automatizzata sviluppata da Internet Security Research Group (ISRG) e riconosciuta da tutti i principali browser.
Attraverso l’utilizzo di certbot, i proprietari di siti Web possono ottenere facilmente certificati di sicurezza in pochi minuti, consentendo un’esperienza web più sicura per tutti.
1. Aggiornamento del sistema
Prima di procedere all’installazione dei pacchetti accertiamoci di avere il sistema aggiornato:
# yum -y update
2. Installazione di Apache
Installiamo Apache utilizzando questo comando:
# yum -y install httpd
3. Installazione di mod_ssl
Installiamo il modulo di apache mod_ssl, necessario per attivare SSL che necessiterà di configurare il certificato per criptare e decriptare le richieste web:
# yum -y install mod_ssl
4. Configure Apache
Creiamo una directory necessaria per contenere la nostra applicazione:
# mkdir /var/www/test
Creiamo un file di configurazione virtual host e andiamo a inserirci il testo sottostante:
# nano /etc/httpd/conf.d/test-site.conf <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/var/www/test" ServerName test.com ServerAlias www.test.com ErrorLog "/var/log/httpd/test.error_log" CustomLog "/var/log/httpd/test.access_log" common </VirtualHost>
Inseriamo nella nostra directory creata precedente un file index.html di esempio:
# nano /var/www/test/index.html It works!
Impostiamo Apache come proprietario della directory “/var/www/test” contenete la nostra applicazione web:
# chown -R apache:apache /var/www/test
A questo punto Apache è correttamente installato e possiamo procedere ad installare certbot.
5. Installazione certbot
Per installare certbot abbiamo bisogno della repository EPEL, utilizziamo il comando sottostante per abilitarlo:
# yum -y install epel-release
Installiamo yum-utils:
# yum -y install yum-utils
E infine certbot per Apache:
# yum -y install certbot python2-certbot-apache
A installazione completata eseguiamo questo comando per avviare la configurazione del certificato:
# certbot
Certbot analizzerà i vhost attivi e vi chiederà su quale attivare HTTPS:
[root@1837d ~]# certbot Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: test.com 2: www.test.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):
A questo punto verrà generato e installato il certificato:
Obtaining a new certificate Performing the following challenges: http-01 challenge for catalogo.manuelroccon.it Waiting for verification... Cleaning up challenges Created an SSL vhost at /etc/httpd/sites-available/test.com-le-ssl.conf Deploying Certificate to VirtualHost /etc/httpd/sites-available/test.com-le-ssl.conf Enabling site /etc/httpd/sites-available/test.com-le-ssl.conf by adding Include to root configuration
E’ possibile far configurare da certbot il redirect automatico delle richieste HTTP in HTTPS:
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
Se tutto è stato eseguito correttamente verrà mostrato questo messaggio:
Congratulations! You have successfully enabled https://test.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=test.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/test.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/test.com/privkey.pem Your cert will expire on 2020-02-15. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
6. Configurazione rinnovo automatico
Creiamo una attività pianificata che consenta a certbot di eseguire il rinnovo automatico dei certificati.
Eseguiamo il comando per modificare crontab:
# crontab -e
Aggiungiamo il comando automatico che rinnoverà i certificati, in questo esempio verrà rinnovato ogni 12 giorni:
* */12 * * * /usr/bin/certbot renew >/dev/null 2>&1
A questo punto la configurazione è completata. Accedendo alla nostra applicazione non dovrebbe apparire nessun errore e il traffico sarà correttamente cifrato.
salve il comando certbot-apache è errato il comando giusto è
certbot –apache -d nomedominio
Salve,
grazie per avermelo segnalato, c’è stato un errore di inserimento, il comando è solo certbot. In realtà è necessario solo inserire questo comando, in quanto da prompt verrà chiesto per quale dominino generare il certificato.
Aggiungendo i parametri che dice lei si bypassa il prompt di selezione.
Grazie