Configurare Apache per supportare più siti SSL in un singolo indirizzo IP

8 novembre 2017

Quando il server Web Apache cresce e matura, vengono aggiunte nuove funzionalità e vengono corretti i vecchi bug. Forse una delle nuove funzionalità più importanti aggiunte alle versioni recenti Apache  è il tanto atteso supporto per più siti SSL in un singolo indirizzo IP.

Tradizionalmente, è stato possibile avere un sito Web abilitato SSL solo se era associato a un determinato indirizzo IP. Questo ha causato molta dolore e frustrazione perché se aveste solo due indirizzi IP, puoi avere solo due siti con abilitazione SSL.

Su due indirizzi IP è possibile avere un numero di siti HTTP regolari che si trovano in entrambi i casi o che sono associati a un singolo IP, ma per ciascuno di questi, solo un sito HTTPS. Ciò che ha reso questo ancora più frustrante è che se www.example1.com e www.example2.com erano sullo stesso IP e example1.com avesse anche un sito HTTPS, andando a https://www.example2.com/ sarebbe, infatti, ti porta all’equivalente di visitare https://www.example1.com/. Ciò ha significato che la maggior parte delle persone che volevano i siti HTTPS dovevano limitare un sito (entrambe le varianti HTTP e HTTPS) a un unico indirizzo IP per evitare questo tipo di confusione.

A partire d’Apache 2.2.12 e il supporto per l’estensione SNI (Server Name Indication) al protocollo SSL, questo è cambiato completamente. Ora è possibile configurare siti HTTPS basati su nomi, proprio come è possibile configurare i siti HTTP basati su nomi. La linea di fondo è che i cinque IP necessari per eseguire cinque siti SSL possono essere ridotti ad un IP domani (a patto che si utilizzi il nuovo Apache).

Tuttavia, ci sono alcuni prerequisiti:

Il server, ovviamente, deve utilizzare Apache 2.2.12 o superiore.
Deve anche utilizzare OpenSSL 0.9.8f o versione successiva e deve essere costruito con l’opzione TLS extensions.
E Apache deve essere costruito contro questa versione di OpenSSL in quanto abiliterà il supporto SNI se rileva la versione giusta di OpenSSL – la versione di OpenSSL che include il supporto di estensione TLS.

Infine, per quanto riguarda i browser, non tutti i browser supportano SNI, ma i browser più popolari fanno e alcuni hanno per un bel po ‘di tempo. Ciò include Firefox 2.0 o versione successiva, Opera 8.0 o versione successiva, Internet Explorer 7.0 o versione successiva (purtroppo solo su Vista), Google Chrome e Safari 3.2.1 (purtroppo solo su OS X 10.5.6 o successivo).

In termini pratici, questo significa che per un serio sito web di e-commerce o uno che ha bisogno di un ampio ricorso, questa soluzione non funziona ancora. Aspettatevi nel prossimo anno o giù di lì per più persone per aggiornare e più browser per supportare SNI.

Per scopi di test o per siti interni in cui è possibile disporre di alcune parole sull’installazione del browser client (e anche considerando che tali vecchie versioni di Firefox supportano SNI), l’utilizzo di SNI può essere abbastanza utile.

Per la configurazione, ecco un esempio di cosa inserire nel file di configurazione Apache:


Listen 443

  NameVirtualHost *:443 

  SSLStrictSNIVHostCheck off 

   

  DocumentRoot /srv/www/example1.com/ 

  ServerName www.example1.com 

  ... 

   

Quello che precede è abilitare Apache ascoltando la porta 443 e attiva l’ascolto delle richieste host virtuali su tutti gli IP. La nuova parola chiave SSLStrictSNIVHostCheck è disabilitata, il che significa che non butteremo un errore 403 se il client non supporta SNI; invece, verranno reindirizzati al sito SSL definito in primo luogo (esempio1.com nell’esempio), quindi assicurati di definire innanzitutto il sito predefinito.

Questo è praticamente tutto ciò che c’è. Il più grande ostacolo qui è il supporto del browser client, ma che verrà in tempo. I requisiti e la configurazione di Apache, invece, sono molto semplici e semplici.