GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare SSL/TLS con Apache httpd su Red Hat

Obiettivo

L'obiettivo è configurare il server web Apache con supporto SSL/TLS su Red Hat Linux, utilizzando i pacchetti forniti con la distribuzione.

Sistema operativo e versioni software

  • Sistema operativo: Red Hat Enterprise Linux 7.5
  • Software: Apache httpd, mod_ssl

Requisiti

Accesso privilegiato al server web.

Difficoltà

FACILE

Convenzioni

  • # – richiede che i comandi linux dati vengano eseguiti con i privilegi di root direttamente come utente root o usando sudo comando
  • $ – dati comandi linux da eseguire come un normale utente non privilegiato

Introduzione

L'installazione di un server Web è piuttosto semplice sulle distribuzioni moderne, poiché i casi d'uso di un server Web sono così comuni che la maggior parte, se non tutte, le distribuzioni forniscono pacchetti nei propri repository. Apache httpd è un server web affidabile utilizzato da gran parte di Internet e sono disponibili molti moduli per estenderne le funzionalità.

Le notizie tecnologiche in questi giorni sono piene di violazioni della sicurezza, furto/fuga di dati e un crescente bisogno di utilizzare la crittografia
ove possibile. Sebbene l'utilizzo di HTTPS abbia un certo sovraccarico di elaborazione sia lato server che lato client, non utilizzarlo significa che tutti i dati inviati in entrambe le direzioni sono in chiaro, leggibile da chiunque sia in grado di leggere il traffico mentre passa attraverso la rete.

Si supponga di disporre di un servizio Web in cui i client possono accedere utilizzando il proprio nome utente e password, un metodo di autenticazione comune, per raggiungere i propri dati, inclusi gli amministratori del sito. Se fornisci questo servizio su http, tutte queste informazioni possono essere registrate, in modo che qualcuno possa ottenere tutte le credenziali di accesso, accedere come amministratore del sito e bloccare i veri amministratori o pubblicare contenuti dannosi per i visitatori.

La possibilità di utilizzare la crittografia durante la navigazione è incorporata in tutti i principali browser moderni da molto tempo e allo stesso modo la crittografia è disponibile per i server web da molti anni ormai.

Installa il server web Apache con supporto SSL/TLS

Per installare i pacchetti richiesti, esegui semplicemente come root:

# yum install httpd mod_ssl -y

Se il server ha già installato httpd, devi solo installare mod_ssl , tutta la configurazione richiesta viene eseguita
dall'installatore. Si noti tuttavia che in questo caso è necessario riavviare httpd, in modo che possa caricare il modulo ssl. Utilizzando
i pacchetti forniti con la distribuzione, possiamo semplificarci la vita, poiché Red Hat fornirà aggiornamenti adeguatamente testati sia per il sistema operativo che per il server web, ovviamente è necessario un abbonamento per ricevere gli aggiornamenti – ma sono comunque necessari aggiornamenti per mantenere aggiornato il sistema operativo.

Abilita e avvia il server httpd

Usando systemd puoi abilitare e avviare il server web con il comando seguente:

# systemctl enable httpd && systemctl start httpd

In questo modo il servizio httpd verrà avviato automaticamente da systemd ad ogni avvio.

Verifica installazione e stato

Puoi controllare lo stato del server web usando systemd:

# systemctl status httpd -l
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2018-07-07 21:35:33 CEST; 1 weeks 4 days ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 1292 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 9
   CGroup: /system.slice/httpd.service
           ├─ 1292 /usr/sbin/httpd -DFOREGROUND
           ├─13271 /usr/sbin/httpd -DFOREGROUND
           ├─13272 /usr/sbin/httpd -DFOREGROUND
           ├─13273 /usr/sbin/httpd -DFOREGROUND
           ├─27508 /usr/sbin/httpd -DFOREGROUND
           ├─27509 /usr/sbin/httpd -DFOREGROUND
           ├─27510 /usr/sbin/httpd -DFOREGROUND
           ├─27511 /usr/sbin/httpd -DFOREGROUND
           └─27512 /usr/sbin/httpd -DFOREGROUND

Jul 07 21:35:32 web.foobar.com systemd[1]: Starting The Apache HTTP Server...
Jul 07 21:35:33 web.foobar.com systemd[1]: Started The Apache HTTP Server.

Per verificare che mod_ssl sia installato correttamente:

# rpm -q mod_ssl
mod_ssl-2.4.6-80.el7.x86_64

E viene caricato come modulo nel server httpd:

# apachectl -M | grep ssl
 ssl_module (shared)

Utilizzo del certificato

Quando installiamo il pacchetto mod_ssl, il modulo si aggiunge al server httpd, quindi lo caricherà al prossimo avvio.
Per impostazione predefinita viene generato un certificato autofirmato, che viene utilizzato per stabilire una connessione crittografata con il browser.
Apri un browser e puntalo al server tramite https:

Messaggio di errore SSL nel browser Firefox

Ignoriamo questo per ora, aggiungiamo l'eccezione di sicurezza (non impostare "memorizza permanentemente questa eccezione") e continua. Viene visualizzata la pagina predefinita. Nel caso di Red Hat, questo si presenta come segue:

Pagina iniziale predefinita di un server web httpd installato su Red Hat Linux

Nota il punto esclamativo accanto all'URL (altri browser potrebbero mostrare avvisi diversi).

Il nostro server web è ora attivo e funzionante su https con un certificato autofirmato e pronto per pubblicare i contenuti
sotto /var/www/html , la radice di contenuto predefinita del server web su Red Hat.

La connessione tra il server web e il browser è ora crittografata, quindi è più difficile falsificare il traffico (che
può essere utilizzato, ad esempio per rubare le credenziali di accesso). Abbiamo finito? In un certo senso, abbiamo completato il nostro obiettivo.

Il fatto che il nostro browser non possa identificare il certificato del server come valido non gli impedisce di utilizzare la comunicazione crittografata con il server, se decidiamo esplicitamente di fidarci di questo certificato. Questo potrebbe essere adatto per un piccolo sistema (domestico), in cui hai solo pochi utenti e solo pochi server web:devi accettare il certificato autofirmato nei browser che dovrebbero essere client dei server web e qualsiasi altro browser nel mondo non dovrebbe mai vedere il contenuto fornito da questi server.

Tieni presente, tuttavia, che questo certificato autofirmato scadrà in tempo (come dovrebbe fare qualsiasi altro certificato) e dovrai
rinnovarlo per poterlo utilizzare. I certificati scaduti sono considerati non validi dai browser, allo stesso modo dei certificati la cui validità non può essere dimostrata da una catena di certificati valida sopra di essi.

Per sapere quando scadrà il certificato autofirmato (o qualsiasi altro), dobbiamo trovarlo sul filesystem consultando il file di configurazione del modulo ssl:

# grep SSLCertificateFile /etc/httpd/conf.d/ssl.conf | grep -v "#"
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

E poi usa openssl per ottenere la data di scadenza:

# openssl x509 -enddate -noout -in  /etc/pki/tls/certs/localhost.crt
notAfter=Jul 10 07:06:17 2019 GMT

Dopo (o meglio, prima) della scadenza del certificato, è necessario rinnovarlo o sostituirlo con un certificato di cui i client si fidano. Un
approccio più elegante rispetto ai certificati autofirmati è la richiesta e l'utilizzo di un certificato da una CA
(Autorità di certificazione) di cui i tuoi clienti già si fidano, sia dalla tua CA interna (che a sua volta può avere una
CA radice affidabile sopra di essa) o direttamente da una CA affidabile a livello globale.

Per utilizzare il certificato ottenuto anziché quello predefinito, i parametri seguenti devono puntare rispettivamente al file del certificato, alla
chiave del certificato e al certificato della CA che ha firmato il certificato SSL. I file devono essere copiati
sul server web e devono essere leggibili dall'utente del sistema operativo che esegue il server web – in caso di installazione predefinita di Red Hat, l'utente apache. Questi parametri possono essere trovati nel summenzionato ssl.conf .

SSLCertificateFile	/etc/httpd/custom-cert/server-ssl.crt
SSLCertificateKeyFile	/etc/httpd/custom-cert/server-ssl.key
SSLCACertificateFile	/etc/httpd/custom-cert/ca.crt

Reindirizzamento del traffico http a https

Ora che serviamo su https, possiamo imporre l'utilizzo di https mentre serviamo tutti o parte dei nostri contenuti. Nel nostro
esempio, siamo molto sicuri e utilizziamo http solo per reindirizzare i client in entrata a https.

Potrebbe sorgere una domanda, se vogliamo parlare solo https, perché ascoltiamo http? Supponiamo che un utente finale, che ha appena sentito parlare del nostro sito, abbia ricevuto un URL da un amico che non contiene il protocollo. Ad oggi, la maggior parte dei browser utilizza per impostazione predefinita il protocollo http, se non viene specificato esplicitamente. Se interrompiamo la pubblicazione su http, l'utente che digita l'URL senza https riceverà un messaggio di errore se il suo browser tenta di raggiungere il nostro server su http.

Per reindirizzare tutte le richieste http in arrivo su https, creiamo un file in /etc/httpd/conf.d con un nome descrittivo, diciamo, redirect_http.conf con il seguente contenuto (dove web.foobar.com è il nome DNS del sito):

<VirtualHost _default_:80>
        Servername web.foobar.com
        Redirect permanent / https://web.foobar.com/
</VirtualHost>

E riavvia il server web. Possiamo verificare se il reindirizzamento funziona correttamente dalla riga di comando con wget (da un host che si fida del certificato SSL del server web):

$ wget http://web.foobar.com/
--2018-07-19 16:13:01--  http://web.foobar.com/
Resolving web.foobar.com (web.foobar.com)... 10.9.8.7
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://web.foobar.com/ [following]
--2018-07-19 16:13:01--  https://web.foobar.com/
Connecting to web.foobar.com (web.foobar.com)|10.9.8.7|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 240 [text/html]
Saving to: ‘index.html’

100%[====================================================================================>] 240         --.-K/s   in 0s      

2018-07-19 16:13:01 (7.04 MB/s) - ‘index.html’ saved [240/240]

L'output mostra la risposta http 301 e possiamo vedere come il nostro client wget segue il reindirizzamento per connettersi utilizzando il protocollo https. Per impostazione predefinita, il traffico SSL viene registrato in file di registro diversi rispetto al traffico http. Possiamo trovare la precedente
richiesta loggata in /var/log/httpd/ssl_access_log :

10.9.8.8 - - [19/Jul/2018:16:13:01 +0200] "GET / HTTP/1.1" 200 240

Conclusione

Con questo abbiamo completato il nostro obiettivo, abbiamo impostato un server web che utilizza https per parlare con i clienti e reindirizza anche le richieste http in arrivo a https.


Linux
  1. Come proteggere i tuoi servizi di posta elettronica Linux con SSL/TLS

  2. Come proteggere il nome host di Plesk sulla porta 8443 con il certificato SSL

  3. Come configurare VSFTPD con connessione crittografata SSL/TLS?

  4. Come installare Let's Encrypt SSL con Apache su Debian 11

  5. Come installare Apache 2 con SSL su Linux (con mod_ssl, openssl)

Come configurare Let's Encrypt SSL con Apache su Fedora

Come installare e configurare Apache con Let's Encrypt TLS/SSL su Ubuntu 20.04

Come installare e configurare Apache (httpd) con Let's Encrypt TLS/SSL su AlmaLinux 8

Come monitorare i certificati SSL/TLS con Checkmk

Come impostare l'autenticazione della password con Apache su Ubuntu 18.04

Come configurare la configurazione dell'host virtuale Apache (con esempi)