Come Creare e Utilizzare SSL autofirmato in Apache

0
282

La firma di certificati SSL propri di solito è fatto come una semplice alternativa al certificato di autorità per le comunicazioni interne o non-utente verso siti che hanno bisogno ancora di crittografia. Ecco come impostare uno con Apache.

Generare e Self Segno di un Certificato SSL

Useremo il openssl utility per generare il certificato e la chiave privata corrispondente. Probabilmente questo già installato, in quanto è una dipendenza di Apache, ma se è in qualche modo mancante, è possibile installarlo dal vostro gestore di pacchetti della distro. Per i sistemi basati su Debian, come Ubuntu, che sarebbe:

sudo apt-get install openssl

Dopo openssl è installato, è possibile generare il certificato con il seguente comando:

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

openssl chiederà alcune informazioni sulla vostra organizzazione. È possibile lasciare la maggior parte di questo vuoto, ma la cosa importante è necessario compilare il “Nome Comune”, che si desidera impostare per il vostro server con indirizzo IP o nome di dominio.

Il Nome del paese (codice a 2 lettere) []:
Stato o Provincia Nome (nome completo) []:
Località Nome (ad esempio, città) []:
Il Nome dell’organizzazione (ad esempio, società) []:
Nome Unità organizzativa (ad esempio, la sezione) []:
Nome comune (ad esempio, nome host completo) []: your_ip_address
Indirizzo E-Mail []:

openssl avrà un secondo per eseguire e creare una nuova chiave privata RSA, che viene utilizzato per firmare il certificato e conservarla in /etc/ssl/private/apache.chiave. Il certificato viene memorizzato in /etc/ssl/certs/apache.crt, e sarà valida per un anno.

Potremo anche decidere di creare un gruppo Diffie-Hellman. Questo è utilizzato per perfect forward secrecy, che genera effimera chiavi di sessione per garantire che le precedenti comunicazioni non possono essere decifrati se la chiave di sessione viene compromessa. Questo non è del tutto necessario per le comunicazioni interne, ma se vuoi essere più sicuro possibile non si deve ignorare questo passaggio. Nota, questo non richiede di avere Apache versione 2.4.8 o superiore, in modo da assicurarsi che si sta fino a data.

sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Questo prendere un po ‘ —circa un’ora, a seconda di quanto velocemente il vostro server. Afferrare il pranzo, e tornare al vostro terminale in un po ‘ di configurazione di Apache.

Configurare Apache per Utilizzare Il Certificato Self-Signed

Per rendere le cose facili, faremo tutti la nostra configurazione in un frammento di file. Creare una nuova nel Apache siti directory disponibili:

sudo touch /etc/apache2/conf-available/ssl-params.conf

Aprirlo in un editor di testo e incollare il seguente configurazione:

SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol Tutti -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder Su
Intestazione sempre impostato X-Frame-Options NEGARE
Intestazione sempre impostato X-Content-Type-Opzioni nosniff
SSLCompression off
SSLUseStapling su
SSLStaplingCache “shmcb:registri/pinzatura-cache(150000)”
SSLSessionTickets Off

SSLOpenSSLConfCmd DHParameters “/etc/ssl/certs/dhparam.pem”

Il primo blocco set di un paio di SSL di default dei parametri, e l’ultima riga consente di configurare Apache per utilizzare l’algoritmo Diffie-Hellman. È possibile omettere questa linea se hai saltato il passaggio.

A quel punto, aprire il default SSL Virtual Host di file, di solito si trova in /etc/apache2/sites-available/default-ssl.conf. Modificare le seguenti righe a punto per il certificato e la chiave del file:

SSLCertificateFile /etc/ssl/certs/apache.crt
SSLCertificateKeyFile /etc/ssl/private/apache.chiave

SSL dovrebbe essere ora di lavoro, ma è probabile che sarà necessario copiare alcuni configurazione il file di configurazione corrente, perché si è modificato un vuoto. Dovrete assicurarsi che il ServerName , ServerAdmin , e DocumentRoot direttive sono rivolte verso la posizione corretta.

Inoltre, è necessario impostare un redirect per inoltrare il traffico HTTP oltre a cifrato HTTPS. Aprire il default di Apache config in /etc/apache2/apache2.conf e aggiungere le seguenti righe di riscrivere il traffico HTTP:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]

Potrai anche voler assicurarsi che il firewall è aperto. HTTPS utilizza la porta 443, piuttosto che la porta 80, quindi avrai bisogno di aprire che per connettersi al server. Se si utilizza iptables o UFW, puoi aprire le porte dalla linea di comando. Se si ospita il server su un servizio come AWS, il provider può fornire un’interfaccia web a porte aperte.

Certificati auto-firmati sono più comunemente utilizzati per i server privati, quindi non è una cattiva idea per autorizzare l’accesso solo LAN privata e l’uso di un server VPN per connettersi ad esso.

Una volta che le porte sono aperte, è possibile testare le vostre impostazioni SSL tramite la navigazione del tuo sito nel tuo browser. Se tutto ha funzionato correttamente, si dovrebbe vedere questo avviso:

Questo è normale, quindi non preoccupatevi. Dovrete selezionare manualmente che si fidano di questo certificato, che è il motivo, non è possibile utilizzare auto-firmato certs per il pubblico di fronte a siti.

L’avviso non significa che il vostro sito è sicuro SSL è ancora acceso e la crittografia del traffico. Se la chiave privata è compromessa, quindi la comunicazione potrebbe essere decifrato, ma sarà perfettamente sicuro se si imposta lo scambio di chiavi Diffie-Hellman forward secrecy, la quale nega che il vettore di attacco. Il problema qui è con identità. Chrome non può verificare che tu sia chi dici di essere, o che si è proprietari del dominio, che avrete bisogno di una “reale” CA.