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.