====== Connessioni cifrate con apache2 e SSL ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//09/03/2018 - 17:12//** \\ \\ A partire da Apache 2.x e' incluso nella distribuzione un plugin di nome mod_ssl che permette di configurare il server web per instaurare connessioni cifrate mediante la libreria SSL. In pratica verra cifrato asimmetricamente il contenuto dei pacchetti tcp grazie a Secure Socket Layer (SSL) . \\ ===== Prepariamo le directory ===== Andremo a creare una directory sotto la document root la quale sara' la document root per quanto riguarda il sito sotto ssl. Creiamo la directory che conterra il sito ssl mkdir /var/www/ssl Settiamo l'utente di apache come proprietario chown -R www-data /var/www/ssl/ ===== Scegliere un nome host ===== A questo punto e' buona cosa avere a disposizione un nome host da utilizzare successivamente con l'host virtuale che andremo a creare. Esistono diversi servizi gratuiti che forniscono dei nomi di dominio dinamici ideali per questo scopo, ma se si vuole fare infretta per una prova in locale e' sufficiente modificare il file **/etc/hosts** aggiungendo una riga del genere: 127.0.0.1 miosito.com a questo punto miosito.com viene risolto in 127.0.0.1 ovvero in localhost. ===== Generiamo chiave privata e certificato ===== Per generare la chiave privata e il certificato possiamo usare Tinyca2 come esposto in [[sicurezza:certification_authority_casereccia#creare_una_ca_con_tinyca_2]] oppure usare ''openssl'' da console nel seguente modo. ==== Generare la chiave privata ==== openssl genrsa -des3 -out my-CA.key 2048 dove : \\ ** -des3 ** indica che la chiave privata utilizzera l'algoritmo triple des ; \\ ** 2048 ** indica la lunghezza della chiave in bit; \\ ** -out ** e' il file che conterra' la chiave privata ''(my-CA.key)''. \\ \\ Verra' chiesto inseguito di inserire una passphrase. ==== Generare il certificato autofirmato ==== openssl req -new -key my-CA.key -x509 -days 3650 -out my-CA.crt dove : \\ ** req ** indica che vogliamo generare un certificato ; \\ ** new ** indica che questa e' una nuova richiesta; \\ ** -key ** indica il file contenente la chiave privata; \\ ** -x509 ** indica il tipo di certificato; \\ ** -days ** i giorni di validita' del certificato (3650 = 10 anni); \\ ** -out ** indica quale sara' il file che conterra il certificato ''(my-CA.crt )''; \\ A questo punto non ci resta che copiare la chiave privata e il certificato, appena ottenuti, in ''/etc/apache2/sites-available'' nel nostro caso. ===== Configurazione per il sito ssl ===== Apache permette di gestire piu' di un sito grazie all'utilizzo dei cosiddetti ''Virtual host '' ovvero piu' domini virtuali sullo stesso pc. Noi useremo questa caratteristica di apache per configurare il nostro sito ssl. \\ ==== File di configurazione del sito SSL ==== Creiamo dentro la directory **/etc/apache2/sites-available** un file di nome ssl con questo contenuto: ServerName miosito.com DocumentRoot /var/www/ssl SSLEngine on #Certificato X509 SSLCertificateFile /etc/apache2/sites-available/my-CA.crt #Chiave privata SSLCertificateKeyFile /etc/apache2/sites-available/my-CA.key SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown dove: \\ **** e' il nome di dominio associato al nostro sito ssl. Accettera' le connessioni solo tramite questa url tramite protocollo https sulla porta 443; (Qui potremmo anche mettere l'ip es. '' '' )\\ ** ServerName miosito.com ** il nome del nostro host virtuale; \\ ** DocumentRoot /var/www/ssl ** indica la document root del nostro sito ssl. \\ \\ Adesso non ci resta che abilitare il sito con ** a2ensite ssl** dove ''ssl'' e' il file di configurazione del nostro host virtuale appena configurato.Oppure possiamo creare un link dentro la directory ''/etc/apache2/sites-enabled'' che punti a ''/etc/apache2/sites-available/ssl''. \\ Adesso e' arrivato il momento di riavviare apache con **apache2ctl restart ** e puntare il nostro browser su **https://miosito.com** . ==== Togliere password della chiave privata ==== Puo' essere fastidioso digitare la password della chiave privata ogni volta che si riavvia apache, dunque possiamo eliminare la password in questo modo: openssl rsa -in my-CA.key -out my-CA-nopasswd.key