Questo tutorial ti guiderà attraverso la tua prima configurazione di un sito Web SSL con certificazione Let's Encrypt. Let's Encrypt è una nuova autorità SSL che fornisce certificati SSL gratuiti. Utilizzeremo due tutorial esistenti ("Come configurare un sito Web SSL compatibile intermedio con il certificato Let's Encrypt" e "The Perfect Server - Ubuntu 15.10 (Wily Werewolf) con Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot e ISPConfig 3").
La configurazione qui descritta è compatibile con qualsiasi server Ubuntu LAMP, quindi puoi utilizzare anche questa come configurazione di base.
Questo tutorial ti mostrerà come configurare Let's Encrypt su server senza ISPConfig 3 poiché presto ci sarà un'implementazione diretta del servizio Let's Encrypt nella prossima versione di ISPConfig 3 (versione 3.1). Quindi, se prevedi di utilizzare ISPConfig, attendi la versione 3.1 e anche un nuovo tutorial.
Creazione del sito web
Il passaggio 1 consiste nel creare la configurazione e la directory del sito Web e abilitare SSL (Apache mod_ssl) per esso. Dipende da te se utilizzi la configurazione predefinita per un sito web su un server o se prevedi di utilizzare più vhost per ospitare più di un dominio. Per un utilizzo più affidabile e scalabile, creerò una configurazione vhost per il mio dominio "lab" isp1.cloudapp.net da Azure.
Tutti i vhost sono archiviati nella directory /etc/apache2/sites-disponibili per impostazione predefinita su Ubuntu e Debian. Esegui il comando seguente per recuperare un elenco di file di configurazione vhost esistenti.
ls -l /etc/apache2/sites-available/
Il mio output è simile a questo:
[email protected]:/home/falco# ls -l /etc/apache2/sites-available/
-rw-r--r-- 1 root root 1332 May 20 2015 000-default.conf
-rw-r--r-- 1 root root 6437 May 20 2015 default-ssl.conf
Ora possiamo usare il file di configurazione "predefinito" per clonarlo e modificarlo oppure possiamo usare la nostra configurazione. Preferisco usare la mia configurazione come faccio da molti anni, quindi creiamo un nuovo vhost creando il file:
vi /etc/apache2/sites-available/isp1.cloudapp.net.conf
In questo file incolla il seguente contenuto:
<VirtualHost *:80>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combinedScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html>
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin>
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
</VirtualHost>
<VirtualHost *:443>
ServerName isp1.cloudapp.net
ServerAlias www.isp1.cloudapp.net
DocumentRoot /home/web/isp1.cloudapp.net/public_html
ErrorLog /home/web/isp1.cloudapp.net/log/habdak.eu_error_log
CustomLog /home/web/isp1.cloudapp.net/log/habdak.eu_access_log combined
ScriptAlias /cgi-bin/ /home/web/isp1.cloudapp.net/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/web/isp1.cloudapp.net/public_html >
Options -Indexes +IncludesNOEXEC +SymLinksIfOwnerMatch +ExecCGI
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
AddType application/x-httpd-php .php
AddType application/json .json
</Directory>
<Directory /home/web/isp1.cloudapp.net/cgi-bin >
allow from all
AllowOverride All Options=ExecCGI,Includes,IncludesNOEXEC,Indexes,MultiViews,SymLinksIfOwnerMatch
Require all granted
</Directory>
RemoveHandler .php
RemoveHandler .php5
php_admin_value engine Off
IPCCommTimeout 301
FcgidMaxRequestLen 1073741824
php_value memory_limit 128M
php_value suhosin.session.encrypt Off
SSLEngine on
SSLCertificateFile /home/web/isp1.cloudapp.net /ssl.cert
SSLCertificateKeyFile /home/web/isp1.cloudapp.net /ssl.key
SSLCACertificateFile /home/web/isp1.cloudapp.net /ssl.ca
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLProtocol All -SSLv2 -SSLv3
SSLCompression off
SSLHonorCipherOrder On
</VirtualHost>
Sostituisci il nome di dominio con il tuo dominio ovunque si trovi e salva il file. Per attivare la configurazione, eseguire:
a2ensite isp1.cloudapp.net.conf
Ora crea le cartelle per il sito web:
mkdir /home/web
mkdir /home/web/isp1.cloudapp.net
mkdir /home/web/isp1.cloudapp.net/public_html
mkdir /home/web/isp1.cloudapp.net/cgi-bin
mkdir /home/web/isp1.cloudapp.net/logs
Riavvia Apache per applicare la nuova configurazione:
sudo service apache2 restart
Ora dobbiamo generare i file del certificato.
Installa Let's Encrypt e genera il tuo primo certificato SSL
Preferisco usare il login di root per l'amministrazione invece di eseguire sudo prima di ogni comando, quindi andiamo su per root utente:
sudo su
Passa alla directory principale delle tue radici:
cd ~root
Installa git per recuperare i file del repository git Let's Encrypt:
apt-get install git
Ora clona il repository git Let's Encrypt:
git clone https://github.com/letsencrypt/letsencrypt.git letsencrypt
Passa alla tua nuova cartella Letencrypt:
cd letsencrypt
E richiedi il tuo certificato SSL:
./letsencrypt-auto certonly --webroot -w /home/web/isp1.cloudapp.net/public_html -d isp1.cloudapp.net
Se richiedi un certificato per il dominio principale (dominio di 1 livello, noto anche come cloudapp.net), utilizza il parametro -d due volte. Con e senza prefisso www come questo:
./letsencrypt-auto certonly --webroot -w /home/web/cloudapp.net/public_html -d cloudapp.net -d www.cloudapp.net
In caso contrario, il certificato non sarà valido per i visitatori che aprono il tuo sito con il prefisso www.
Puoi anche aggiungere altri sottodomini a un certificato. Ad esempio, se il tuo sottodominio admin.cloudapp.net corrisponde allo stesso sito (la stessa cartella sul server), dovresti aggiungerlo anche a questo certificato. Sfortunatamente, non puoi utilizzare un carattere jolly come (*.cloudapp.net) con Let's encrypt.
Let's Encrypt aggiornerà automaticamente tutte le dipendenze e ti guiderà attraverso la sua configurazione. Tutto quello che devi fare è attendere la finestra di richiesta che ti chiede il tuo indirizzo e-mail. Questo indirizzo viene utilizzato solo per recuperare i dati persi.
Le tue nuove chiavi sono ora archiviate in /etc/letsencrypt/ per impostazione predefinita. Li collegheremo alla directory del nostro sito Web in modo da poter gestire le chiavi in un secondo momento.
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/cert1.pem /home/web/isp1.cloudapp.net/ssl.cert
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/chain1.pem /home/web/isp1.cloudapp.net/ssl.ca
ln -s /etc/letsencrypt/archive/isp1.cloudapp.net/privkey1.pem /home/web/isp1.cloudapp.net/ssl.key
Ora dovresti essere in grado di accedere al tuo sito web con SSL. Let's Encrypt ti informerà automaticamente della scadenza dei certificati in tempo inviandoti una e-mail all'indirizzo che hai fornito durante l'installazione di Let's Encrypt.