SSL e il suo successore TLS (Secure Sockets Layer / Transport Layer Security) aggiungono un livello di crittografia tra il client e il server. Senza questa tecnologia, i dati vengono inviati al server in testo semplice, consentendo a terzi di leggere tutte le informazioni inviate e ricevute dal server.
Questo tutorial ti insegnerà come creare un certificato SSL / TLS e attivarlo su Apache 2.4 su Ubuntu 16.04. Presumo che Apache sia già configurato e funzionante. Se vuoi imparare come installare uno stack LAMP, vedi questo documento Vultr .
Attenzione
I certificati SSL / TLS sono normalmente generati da un'autorità di certificazione (autorità di certificazione) attendibile. Generandolo da soli, sarai il firmatario, il che significa che il browser non sarà in grado di verificare se l'identità del certificato deve essere attendibile e avviserà l'utente. Sebbene sia possibile ignorare questo avviso, i siti pubblici devono utilizzare un certificato firmato da un'autorità di certificazione attendibile. Let's encrypt è una CA che offre certificati gratuitamente. Puoi imparare come installare il loro certificato in Apache e Ubuntu 16.04 qui .
Per le applicazioni interne, l'uso di un certificato autofirmato potrebbe essere valido, soprattutto se non si dispone di un nome di dominio.
Passaggio 1: generazione del certificato
-
Innanzitutto, creiamo un posto dove archiviare il file.
mkdir ~/certificates
cd ~/certificates
-
Genera CSR e chiave privata.
openssl req -x509 -newkey rsa:4096 -keyout apache.key -out apache.crt -days 365 -nodes
Chiederà informazioni per la richiesta di certificato. Completa con le informazioni appropriate.
Country Name (2 letter code) [AU]: US
State or Province Name (full name) [Some-State]: FL
Locality Name (eg, city) []: Miami
Organization Name (eg, company) [My Company]: My Company
Organizational Unit Name (eg, section) []:
Il nome comune dovrebbe essere il nome del tuo dominio o l'indirizzo IP del server. Inoltre, inserisci la tua email.
Common Name (e.g. server FQDN or YOUR name) []: 203.0.113.122
Email Address []:[email protected]
-
Ora sposta il certificato nella cartella di configurazione di Apache.
mkdir /etc/apache2/ssl
mv ~/certificates/* /etc/apache2/ssl/.
-
Il certificato è pronto! Successivamente, prepareremo Apache a lavorare con il certificato.
Passaggio 2: configurazione del firewall
-
Dobbiamo assicurarci che la porta TCP 443 sia aperta. Questa porta viene utilizzata nelle connessioni SSL anziché nella porta 80. In questa esercitazione, useremo UFW.
-
Assicurarsi che UFW sia abilitato.
sudo ufw enable
-
Ora consenti le impostazioni predefinite di Apache per il firewall.
sudo ufw allow 'Apache Full'
-
Digitando " sudo ufw status
", è possibile visualizzare un elenco delle regole correnti. La tua configurazione dovrebbe assomigliare a questa:
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
OpenSSH ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere (v6)
OpenSSH (v6) ALLOW Anywhere (v6)
-
Dovresti anche consentire OpenSSH qui per connessioni future.
sudo ufw allow 'OpenSSH'
Passaggio 3: configurazione dell'host virtuale Apache
-
Passare alla directory di configurazione del sito Apache predefinita.
sudo nano /etc/apache2/sites-available/default-ssl.conf
-
Questo file indica al server dove cercare il certificato SSL. Con i commenti rimossi, dovrebbe apparire come la seguente configurazione.
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost
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>
-
Modifica questa riga:
ServerAdmin [email protected]
-
Aggiungi questo proprio sotto la ServerAdmin
riga:
ServerName ADD_YOUR_IP_OR_DOMAIN_NAME_HERE
-
Ora modifica queste righe con la nostra posizione del certificato:
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
-
Il nostro file finale dovrebbe assomigliare a questo:
<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin [email protected]
ServerName 203.0.113.122
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
</VirtualHost>
</IfModule>
-
Salva e chiudi il file.
Passaggio 4: abilitazione del modulo SSL di Apache
-
Abilita il modulo SSL digitando:
sudo a2enmod ssl
-
Ora abilita il sito che abbiamo appena modificato:
sudo a2ensite default-ssl.conf
-
Riavvia Apache:
sudo service apache2 restart
-
Accediamo al nuovo sito Web sicuro! Aprilo nel tuo browser (assicurati di digitare https: // ).
https://YOUR_SERVER_IP
Il tuo browser ti avviserà che il certificato non è valido, come previsto. Ciò accade perché il certificato non è firmato. Segui i passaggi offerti dal tuo browser per procedere al tuo sito.
Passaggio 5: reindirizzare tutto il traffico HTTP su HTTPS (facoltativo)
-
Apri il file host virtuale predefinito di Apache:
nano /etc/apache2/sites-available/000-default.conf
-
Aggiungi questa riga all'interno del <VirtualHost *:80>
tag:
Redirect / https://YOUR_SERVER_IP_OR_DOMAIN/
-
Ricarica la configurazione di Apache:
sudo service apache2 reload
Tutto il traffico del sito Web ora reindirizzerà automaticamente a HTTPS.