Configurazione di Apache con SSL
Le seguenti istruzioni presuppongono che si desideri eseguire sia un server sicuro (su port 443
) e un server regolare (su port 80
). Innanzitutto, è necessario configurare il server per l'ascolto su entrambe le porte. O modifica /etc/apache2/ports.conf
(in Debian; questo è incluso in apache2.conf
) o modifica /etc/apache2/apache2.conf
direttamente per includere le linee:
Ascolta 80 Ascolta 443
Quindi, modifica /etc/apache2/sites-enabled/yoursite
per utilizzare le impostazioni SSL. Separare le impostazioni del server regolari e sicure utilizzando VirtualHosts è l'opzione più semplice in termini di manutenibilità. Qualsiasi configurazione al di fuori delle sezioni VirtualHosts (come l'impostazione di ServerAdmin) verrà applicata a entrambi (ea qualsiasi altro) VirtualHosts.
Le versioni di Apache 2.4.8 e successive prevedono che il certificato del server venga concatenato con qualsiasi certificato intermedio in un file. Per scaricare un file concatenato da SSL.com, scegli il file Nginx
link per il download nel tuo account del portale:
In alternativa, è possibile concatenare il certificato esistente e i file intermedi con un comando simile al seguente:
$ cat /etc/ssl/private/ca-bundle-client.crt >> /etc/ssl/private/yourdomain.crt
Aggiungi la seguente sezione al tuo file di configurazione:
# ================================================= # SSL /TLS impostazioni # ================================================ = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine su SSLCertificateFile /etc/ssl/private/yourdomain.chained.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key
Alcune note su questa configurazione:
SSLEngine
deve essere abilitato in modo che il server utilizzi SSL.DocumentRoot
imposta la directory principale per questo host virtuale. Ciò significa che è possibile separare completamente i contenuti protetti da quelli normali.SSLCertificateFile
dovrebbe essere impostato nella posizione in cui si inserisce il file con il certificato del server e la catena intermedia.SSLCertificateKeyFile
dovrebbe essere impostato nella posizione in cui hai inserito il file della chiave privata.
Aggiungi la seguente sezione al tuo file di configurazione:
# ================================================= # SSL /TLS impostazioni # ================================================ = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine su SSLCertificateFile /etc/ssl/private/yourdomain.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile / etc / ssl / private client.crt
Alcune note su questa configurazione:
SSLEngine
deve essere abilitato in modo che il server utilizzi SSL.DocumentRoot
imposta la directory principale per questo host virtuale. Ciò significa che è possibile separare completamente i contenuti protetti da quelli normali.SSLCertificateFile, SSLCertificateChainFile,
eSSLCertificateKeyFile
deve essere impostato nelle posizioni in cui vengono inseriti i file del certificato, della chiave intermedia e della chiave privata, rispettivamente.
Per eseguire il server normale sulla porta 80, aggiungere la seguente sezione al file di configurazione:
NameVirtualHost *: 80 DocumentRoot "/ var / www / yoursite" # Configurazione della directory specifica dell'host, opzioni, ecc # La maggior parte di queste opzioni è probabile che venga impostata al di fuori delle sezioni VirtualHosts #.
Dopo aver salvato il file di configurazione modificato, riavviare il server web. Se hai utilizzato una passphrase durante la generazione del certificato, dovrai inserirla quando contestato.
Testing
Crea una pagina index.html di base ovunque si trovi la directory principale del tuo server web, se non hai già dei contenuti lì.
Quindi puntare il browser Web su https://www.yoursite.com
. Dovresti vedere una connessione SSL aperta e la pagina consegnata. Se stai utilizzando un certificato autofirmato, il tuo browser visualizzerà un avviso che ti avvisa che l'identità del server non può essere verificata. Puoi scegliere di visualizzare e accettare il certificato. Se si utilizza un certificato esterno, tutto dovrebbe avvenire senza intervento.
Assicurati anche di non poter accedere al contenuto protetto utilizzando http: //. Se ci provi, dovresti ricevere un messaggio di errore.
Troubleshooting
Se non funziona come previsto, controlla prima che il tuo server sia effettivamente in esecuzione, utilizzando ps -a | grep apache
. Se ciò non restituisce nulla, prova a riavviarlo e controlla i messaggi di errore sul terminale.
Verifica inoltre che le autorizzazioni per la tua chiave e i file del certificato siano impostate correttamente (vedi sopra), così come le autorizzazioni per il tuo file HTML di prova e la sua directory principale.
Quindi, controlla i log. Dovresti controllare sia i log del server principale che i log SSL che hai impostato nel tuo file di configurazione sopra. Se non ottieni nulla di utile, prova a modificare il valore LogLevel nel file di configurazione di Apache2 in "debug", riavvia Apache2 e prova di nuovo. Questo dovrebbe fornire più dati del file di registro.
Se stai eseguendo anche un normale server web sulla porta 80, prova a recuperare una pagina di prova tramite http: // anziché https: // per identificare se il problema è con il server web o con la connessione SSL. Nota che nella configurazione sopra, la directory principale del server web è diversa per http: // e https: //, quindi non sarai in grado (o non dovresti!) Di accedere allo stesso contenuto. Se la tua pagina di test nella directory http: // root funziona correttamente e la tua pagina di test nella directory https: // root non funziona, questo può aiutarti a individuare il problema.
Se il problema è la connessione SSL, uno strumento utile è s_client
, che è uno strumento diagnostico per la risoluzione dei problemi TLS/ Connessioni SSL. L'utilizzo di base è: /usr/bin/openssl s_client -connect localhost:443
. Esistono anche numerose altre opzioni, per le quali è possibile controllare la documentazione. Se ricevi messaggi di errore, questo dovrebbe aiutarti a localizzare il problema.