Come configurare HTTPS con Apache in Ubuntu

Configuriamo Apache Web Server 

con certificato autoprodotto – HTTPS con Ubuntu

Il Transport Layer Security (TLS) e il suo predecessore Secure Sockets Layer (SSL) (le cui versioni SSL v2 e v3 sono considerate insicure) sono dei protocolli crittografici di presentazione usati nel campo delle telecomunicazioni e dell’informatica che permettono una comunicazione sicura dalla sorgente al destinatario (end-to-end) su reti TCP/IP (come ad esempio Internet) fornendo autenticazione, integrità dei dati e cifratura operando al di sopra del livello di trasporto.

Diverse versioni del protocollo sono ampiamente utilizzate in applicazioni come i browser, l’e-mail, la messaggistica istantanea e il voice over IP. Un esempio di applicazione di SSL/TLS è nel protocollo HTTPS. (Wiki)

HTTPS con Ubuntu
HTTPS con Ubuntu

Il protocollo TLS consente alle applicazioni client/server di comunicare attraverso una rete in modo tale da prevenire il ‘tampering’ (manomissione) dei dati, la falsificazione e l’intercettazione.

L’HyperText Transfer Protocol over Secure Socket Layer (HTTPS), (anche noto come HTTP over TLSHTTP over SSL e HTTP Secure) è un protocollo per la comunicazione sicura attraverso una rete di computer, il quale è largamente utilizzato su Internet. HTTPS consiste nella comunicazione tramite il protocollo HTTP (HyperText Transfer Protocol) all’interno di una connessione criptata dal Transport Layer Security (TLS) o dal suo predecessore, Secure Sockets Layer (SSL). Il principio che sta alla base di HTTPS è quello di avere:

  1. un’autenticazione del sito web visitato
  2. protezione della privacy
  3. integrità dei dati scambiati tra le parti comunicanti.

Installiamo e configuriamo.

Si suppone che sia installato che il Server Web  Apache. Se volete installare LAMP (Linux – Apache – MySQL – PHP) e non sapete come fare , si puo’ seguire questa guida. Altrimenti se volete installare solo il Server Web Apache ,  potete omettere i passaggi per l’installazione di MySQL e PHP.

 

Creiamo il certificato SSL

Il comando e’ semplice

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

openssl vi chiedera’ delle informazioni ….

Se dovete creare un certificato , e non siete una CA ( in crittografia, una Certificate Authority o Certification Authority (CA), letteralmente Autorità Certificativa, è un ente di terza parte (trusted third party), pubblico o privato, abilitato a rilasciare un certificato digitale tramite procedura di certificazione che segue standard internazionali) e volete solo implementarlo per rendere sicura la vostra connessione o per fare test … potete rispondere come di seguito. Altrimenti i campi dovranno essere valorizzati con attenzione 🙂 .

Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:Paperilandia
Locality Name (eg, city) []:Paperopoli
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Aiutocomputerhelp
Organizational Unit Name (eg, section) []:Facciamolo
Common Name (e.g. server FQDN or YOUR name) []:testsss
Email Address []:paperino@paperilandia.pk

Mentre stiamo usando OpenSSL, dobbiamo anche creare il gruppo Diffie-Hellman, che viene utilizzato nella negoziazione Perfect Forward Secrecy con i client.

Configuriamo Apache

(Virtual Host – HTTPS con Ubuntu)

Ricordando di aver creato il  certificato e la chiave in etc/ssl

 sudo nano /etc/apache2/sites-available/default-ssl.conf

Ci troveremo di fronte (con 16.04)  a qualcosa di simile

Modificare cio’ che e’ in Bold ..

<IfModule mod_ssl.c>
<VirtualHost _default_:443>
ServerAdmin webmaster@localhost

DocumentRoot /var/www/MiaCartella  <——- Cartella di wwroot

# Available loglevels: trace8, …, trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with “a2disconf”.
#Include conf-available/serve-cgi-bin.conf

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   A self-signed (snakeoil) certificate can be created by installing
#   the ssl-cert package. See
#   /usr/share/doc/apache2/README.Debian.gz for more info.
#   If both key and certificate are stored in the same file, only the
#   SSLCertificateFile directive is needed.
 SSLCertificateFile    /etc/apache2/ssl/apache-ssl_cert.key.crt     <—– Certificato

#
SSLCertificateKeyFile /etc/apache2/ssl/apache-ssl_cert.key.key <—– Chiave

Attiviamo SSL Virtual Host

 

sudo a2ensite default-ssl.conf

Quindi facciamo ripartire Apache

sudo service apache2 restart

Finito!

Quindi, ora possiamo provare con https://indirizzo_ip

dovrebbe andare tutto ok , e abbiamo il nostro certificato installato e il protocollo  https attivo con Ubuntu !

Ora le nostre comunicazioni client/server sono sicure, con un certificato non riconosciuto, ma sicure ,  ora abbiamo  un server https con Ubuntu .

(net::ERR_CERT_AUTHORITY_INVALID).
(net::ERR_CERT_AUTHORITY_INVALID). HTTPS con Ubuntu