Post Meta
-
Indietro
-
luglio 10, 2008 -
Appunti -
9 Comments
-
Letto 2.163 volte
-
Comments Feed -
Stampa questo Post
10th
LUG
Apache, virtual host multipli e ssl
Posted by raphe | Filed under Appunti
Questo articolo è stato pubblicato 2 anni 1 mese 24 giorni giorni fa quindi alcuni contenuti o informazioni presenti in esso potrebbero non essere più validi. Questo sito non è responsabile per eventuali errori causati da questo problema.Scrivo questo post nella speranza che possa essere utile a qualcuno, visto che io ci ho perso due giorni per trovare tutte le info necessarie e fare varie prove fino a trovare la configurazione funzionante. Inoltre potrebbe anche servire a me in futuro come promemoria.
Lo scenario è il seguente: un server web (apache), due domini diversi sullo stesso ip configurati come virtual host e, infine, la necessità di averne uno su ssl e l’altro no. Inoltre tutte le chiamate http sul dominio con ssl devono essere redirette ad https e tutte quelle https sul dominio non ssl devono essere redirette ad http.
Se non è chiaro quello che ho detto sopra lo schematizzo meglio:
- un server web;
- due domini che chiameremo protetto.it e vulnerabile.it;
- protetto.it dovrà lavorare su ssl e quindi l’accesso sarà del tipo https://protetto.it;
- vulnerabile.it non lavorerà su ssl e quindi l’accesso sarà del tipo http://vulnerabile.it;
- tutte le chiamate del tipo http://protetto.it saranno redirette a https://protetto.it;
- tutte le chiamate del tipo https://vulnerabile.it saranno redirette a http://vulnerabile.it.
Questo è quanto. Vediamo come configurarlo.
L’esempio suppone che utilizziate apache con i file di configurazione separata httpd.conf (configurazioni generali), httpd-vhosts.conf (configurazioni virtual hosts) e httpd-ssl.conf (configurazioni ssl) ma il tutorial vale anche nel caso in cui utilizziate un solo file di configurazione.
Nel file httpd-vhosts.conf inseriamo quanto segue:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.protetto.it:80
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost><VirtualHost *:80>
DocumentRoot /PATH/SITO/VULNERABILE.IT
ServerName www.vulnerabile.it:80
RewriteEngine On
RewriteCond %{HTTPS} !=off
RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>
Nel file httpd-ssl.conf inseriamo quanto segue:
NameVirtualHost *:443
<VirtualHost *:443>
DocumentRoot /PATH/SITO/PROTETTO.IT
ServerName www.protetto.it:443
</VirtualHost><VirtualHost *:443>
ServerName www.vulnerabile.it:443
SSLEngine off
RewriteEngine On
RewriteCond %{REQUEST_PORT} !^443$
RewriteRule ^/(.*) http://%{SERVER_NAME}/$1 [R=301,L]
</VirtualHost>
Vediamo un po’ a cosa servono le direttive inserite.
Con il blocco nel file httpd-vhosts.conf vogliamo “intercettare” le richieste sulla porta 80 (http):
- il primo rigo è necessario per dire che vogliamo configurare i virtual host del tipo name-based (con l’uso di ServerName);
- il primo virtual host serve per far si che tutte le chiamate http su protetto.it dovranno essere redirette su https;
- il secondo virtual host serve per definire il dominio vulnerabile.it e far si che tutte le chiamate su https vengano redirette su http.
Il blocco nel file httpd-ssl.conf “intercetta” le richieste sulla porta 443 (ssl):
- per il primo rigo vale lo stesso discorso di sopra;
- il primo virtual host definisce semplicemtne il dominio protetto.it;
- il secondo virtual host serve per far in modo che le chiamate https a vulnerabile.it vengano redirette su http.
N.B.: chiaramente sono state illustrate solo le direttive necessarie ad ottenere la configurazione descritta all’inizio. Tutte le altre opzioni (settaggi openssl, certificati, chiavi, ecc.) vengono date per note e già inserite.
Tags: apache > openssl > SSL > virtual host


ciao. Il tuo articolo mi è stato molto utile e chiarificatore. Ti devo ringraziare enormemente!!
Ho un paio di quesiti per te … nella speranza che mi puoi rispondere: Praticamente mi servirebbe
sapere come posso fare che un dominio venga richiamato sia con http che con https.
L’altro quesito è: io ho configurato i domini che mi occorrevano e dall’esterno vengono letti correttamente. Siccome io ho ha disposizione una rete vorrei poter richiamare quei domini anche dall’interno della rete; ora per richiamarli utilizzo l’ip del server invece io vorrei richiamarli con http://www.miosito.it.
Spero di essere stato chiaro nella spiegazione e che tu possa aiutarmi.
Grazie mille!!
Ciao danilo, alla prima domanda al volo non riesco a risponderti anche perchè sto andando a letto
ma la seconda è abbastanza immediata, allora: suppongo che sei su una macchina linux e che hai una rete locale nella quale c’è il server web e il tuo pc, dal tuo pc vorresti raggiungere il server web senza uscire all’esterno, ora lo fai specificando a mano l’ip (es. 192.168.0.22) ma vorresti raggiungerlo digitando http://www.miosito.it, ok?! ho capito bene? Se così è allora basta che nel file /etc/hosts inserisci la riga
192.168.0.22 http://www.miosito.it
e la tua macchina risolverà direttamente il nome di dominio nell’indirizzo ip che hai specificato.
Spero che sia questa la soluzione, se così non fosse prova a spiegarlo meglio… notte…
Ciao. Innanzitutto ti ringrazio per la tua risposta. Sei stato veramente gentilissimo! Allora, per la prima domanda supponevo che ci volesse del tempo quindi no problem!! Per quanto riguarda la seconda hai azzeccato la risposta!! Ti ringrazio veramente tanto.. sei stato un prezioso aiuto!! Aspetto con ansia anche l’altra risposta!!
ciao danilo,
la prima domanda se ho capito bene è che tu vorresti questo:
il sito dominio.it deve funzionare sia se chiami http://dominio.it sia https://dominio.it
giusto?
adesso non ho la possibilità di fare la prova ma credo che comunque basti definire due virtual host uno per 80 e l’altro per 443 dove dentro non fai nessuna azione di redirect ma imposti solo document root e server name.
chiaramente in quella relativa ad https devi impostarti tutto il necessario: certificati, chiavi, ecc.
dovrebbe funzionare, fammi sapere…
Ciao. Si hai ragione. Mi funziona perfettamente. Ti ringrazio ancora per l’aiuto. Ciao
Ciao, il tuo articolo “Apache, virtual host multipli e ssl” è grandioso.
Vorrei chiederti questo:
Se avessi, un apache e due domini diversi sullo stesso ip configurati come virtual host e, infine, la necessità di avere ENTRAMBI su ssl…
come potrei fare ?
Mi spiego meglio:
80.0.0.120 a.dominio.local
80.0.0.120 b.dominio.local
dovrei riuscire ad accedere su
https://a.dominio.local
e
https://b.dominio.local
utilizzando 1 solo certificato…..
Ti ringrazio in anticipo, Francesco.
COMPLIMENTI X L’ARTICOLO.
mi trovo qui per la prima volta, facendo delle ricerche su google.
Premetto che uso Windows (quindi C/wamp/www) con piattaforma WP, il tutto inserito in una Lan/Intranet . spero ok finora!?
il sito è gia funzionante ed è raggiungibile es: http://www.miodominio.com, ma mappato/forward (serverDNS è altrove), attraverso IP (il DNS di http://www.miodominio.com punta all’ IP 1.1.1.1 ) ok..!?
Adesso ho bisogno di un altro sito, che ho già inserito (C/wamp/www/nuovosito), quindi in realtà adesso è raggiungibile :
http://www.miodominio.com/nuovosito o 1.1.1.1/nuovosito
Invece dovrebbe essere raggiunto a: http://www.nuovosito.it
Allora: sul mio pc, in locale (modificando 3 files: httpd.conf, httpd-vhosts.conf e il file host di windows) tutto ok!
Poi volevo fare la stessa prova sul web server nella rete Lan, configurato uguale al mio pc, ma niente.
Poi ho pensato, nel file Host anzichè mettere localhost dovevo mettere l’ IP cioè:
127.0.0.1 localhost (quindi http://www.miosito.it)
1.1.1.1 nuovo sito
Ma nemmeno non và..!
Non riesco a capire dov’è l’errore.
se “mio sito” con il forward puntato su 1.1.1.1 è ok nella Lan
Se non riesco a far questa prova in locale (sul web server Lan), non posso osare e dire a chi gestisce DNS, di puntare il ” nuovo sito” su 1.1.1.1, rischio di non far funzionare nemmeno il “mio sito” che già funziona tramite forward puntato 1.1.1.1!
Grazie scusate un pò x le ripetizioni, ma cerco di essere piu chiaro possibile.
Cmq grazie in anticipo
help me:)
Ciao, senti ti volevo chiedere una info in pratica io devo configurare wamp, in modo tale da utilizzare la connessione https, ho trovato qualche guida per la creazione delle chiavi e tutto. L’unico problema che abilitando moduli e tutto con php non riesco a capire perchè quando digito nel browser https://localhost/ssl mi da errore pagina e non và a vanti…
ciao pasquale,
mi dovresti almeno dire che errore ricevi (numero e stringa) e soprattutto se sotto la cartella ssl/ c’è qualcosa, se si, cosa?