Apache2 abilitare HTTPS

Da lumacawiki.

Generare il Certificato

Entrare nella directory /etc/apache2

cd /etc/apache2

creare directory per certificati

mkdir ssl
cd ssl
mkdir crt
mkdir key

Generare il certificato (ATT.NE cambiare il nome delle chiavi e common name)

openssl req -new -x509 -days 365 -keyout key/<xxxxxxx>.key -out crt/<xxxxxxx>.crt -nodes -subj  '/O=Nome Azienda  /OU=Nome department /CN=www.xxxxxxxxxxx.com'

Dopo editare in /etc/apache2/sistes-enabled il file con la conf di default (es. su debian):

nano /etc/apache2/sistes-enabled/000-default.conf

ed aggiungere il virtualhost per https:

<VirtualHost *:443>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       SSLEngine On
       SSLProtocol all -SSLv2
       SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
       SSLCertificateFile /etc/apache2/ssl/crt/<xxxxxxx>.crt
       SSLCertificateKeyFile /etc/apache2/ssl/key/<xxxxxxx>.key
# La parte Location qui sotto e' necessaria se si vuole che il client possa
# autenticarsi con certificato installato sul proprio device
# Nei browser desktop avviene l'autenticazione se c'e' il cert. installato
# altrimenti va a diritto e usa solo connessione https.
# Nei device mobili invece, viene mostrato un popup che richiede se si vuole
# usare un certificato installato o se ne vogliamo installare uno.
# Solitamente premendo rifiuta, si prosegue con la navigazione sicura
# .....puo' essere pero' fastidioso
#        <Location />
#              SSLRequireSSL On
#              SSLVerifyClient optional
#              SSLVerifyDepth 1
#              SSLOptions +StdEnvVars +StrictRequire
#      </Location>
</VirtualHost>

Se si vuole reindirizzare tutto il traffico anche http su https modificare nel file

precedente anche VirtualHost *:80 ed includere la direttiva Redirect

<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       Redirect "/" "https://xxx.xxx.xxx.xxx"
</VirtualHost>

Controllare che apache ascolti sulla porta 443

nano /etc/apache2/ports.conf

Abilitare SSL e il sito

a2enmod ssl
a2ensite /


Utilizzo di Certificato valido da CA

Per usare un certificato valido invece del self signed di cui sopra

questo lo si puo' comprare da diverse CA oppure si puo' usare quello offerto da:

https://www.startssl.com/

o

https://letsencrypt.org/

Supponiamo di usare startssl.com. bisogna avere un dominio registrato e poter accedere alla email del dominio postmaster@xxxxxxxxx o webmaster@xxxxxxxxxxx

Detto cio' bisogna accedere al pannello di controllo Una volta inseriti i dati personali, reistrati, inseriti i vari codici di controllo ricevuti per email etc si arriva al pannello di controllo. Bisogna aprire ValidationWizard Da qui si deve validare il dominio scegliere come certificate target: WebServer SSL/TLS certificate Seguire le istruzioni a video per creare il certificato e la key (copia incolla  ;) Ricordarsi di salvare anche i certificati 'intermediate' e 'root' fatto cio', aprire il terminale e descriptare la ssl.key per poterla usare sul server.

openssl rsa -in ssl.key -out private.key

La ssl.key si puo' anche cancellare ( e rinominare la private.key in ssl.key) creare poi le directory per i cerificati in /etc/apache2 (come visto nella sez. sopra 'Generare il Certificato') e copiarvi i files scaricati che salvo casini dovrebbero essere: ca.pem ssl.crt private.key sub.class1.server.ca.pem

Proseguire poi come discritto nella sez. sopra 'Generare il Certificato'

assicurarsi di inserire nella sez VirtualHost *:443 di

nano /etc/apache2/sistes-enabled/000-default.conf

la sez SSLxxxxxxxxxxx con i corretti path e nomi di certificati

per es:

<VirtualHost *:443>
       ServerAdmin postmaster@xxxxxxx.xxx
       ServerName xxxxxxx.xxx
       DocumentRoot /var/www/html
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       SSLEngine On
       SSLProtocol all -SSLv2
       SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
       SSLCertificateFile /etc/apache2/ssl/crt/ssl.crt
       SSLCertificateKeyFile /etc/apache2/ssl/key/ssl.key
       SSLCertificateChainFile /etc/apache2/ssl/pem/sub.class1.server.ca.pem
       SSLCACertificateFile /etc/apache2/ssl/pem/ca.pem
#       <Location />
#               SSLRequireSSL On
#               SSLVerifyClient optional
#               SSLVerifyDepth 1
#               SSLOptions +StdEnvVars +StrictRequire
#       </Location>
</VirtualHost>