Newsgroup: it.comp.os.linux.sys
Titolo: Apache e reverse proxy http --> https

Salve a tutti,
dovrei utilizzare Apache come reverse proxy, per consentire l'accesso da
Internet ad un server https locale; la situazione è questa:
- i clients accedono da Internet ad un server Apache che stà in DMZ:
http://external.abc:9999
- questo server Apache non supporta l'https
- attraverso mod_rewrite e mod_proxy questo Apache riscrive l' URL
 
http://external.abc:9999
 ------> 
https://internal.abc
       dove internal.abc è il server https locale che stà nella rete
protetta: in questo modo, gli utenti Internet accedono al server https
locale.
- se provo ad accedervi da Internet però, ricevo l'errore: Errore HTTP 403 -
Accesso negato
- premetto che non è un problema di firewall
I miei dubbi riguardano la possibilità di fare un reverse proxy verso un
server https, utilizzando http: è possibile?


Ci avevo provato, ma a livello di gusto personale, per cui non ho insistito.
Il problema, comunque, sta nel fatto che lo scambio dei certificati (te 
ne accorgi, se sniffi la sessione) avviene PRIMA della richiesta 
dell'url, all'atto della connessione stessa, e non all'atto della GET. 
Ciò significa che il client NON accede (e non può accedere) ad un server 
https se c'è un proxy nel mezzo. Se in effetti guardi cosa succede 
usando un proxy (testato con squid) per la sessione https, vedrai che la 
sessione https si instaura tra il proxy e il server destinazione, e NON 
tra il client e quest'ultimo.
Nota che questo è lo stesso motivo che fa sì che non si possa fare 
virtualhosting di https.
L'unica cosa che sono riuscito ad ottenere è di avere un proxy che 
permette l'accesso ad un sito https. Solo che la sessione col client che 
vi accede è una normale http.
Ciò mi ha fatto immaginare anche quale rischio per la sicurezza 
rappresenti un proxy mal configurato (!): se penetri il proxy e sniffi 
il passaggio "dalla parte privata" passa tutto in chiaro...
Questo da quanto ho capito in modo empirico, ma non sono un esperto 
della cosa, ergo qualcuno mi potrebbe pesantemente smentire.
PS: io avevo provato perchè volevo fare un reverse proxying verso un 
pool di macchine https, in modo da avere + di un sito https su un 
singolo ip pubblico... :-P
-- 
Emanuele "SKULL" Balla
--------------------------------------------------------------------
"How should I know if it works?  That's what beta testers are for.  I only
coded it."
(Attributed to Linus Torvalds, somewhere in a posting)

virtualhosting di https.
E' tutto corretto, aggiungo solo che esiste una estensione prevista in
Apache 2.0 che permette di fare questo. O almeno mi pare :)
-- 
"Give me something to sing about.
I need something to sing about."
(Buffy, "Once More, With Feeling" BTVS 6.07)

locale.
E' sbagliato, e non funzionerà mai.
Devi fare il contrario, ovvero:
external.abc colloquia via http con internal.abc. Questo è corretto ed
accettabile, visto che entrambi i server sono trusted, e che la rete
interna è sicura. (se questo non è garantito, devi garantirlo per avere
un minimo di sicurezza, mi pare evidente).
I client accedono ad external.abc, che funziona come reverse proxy, e
che fornisce in https alcune o tutte le pagine richieste.


 virtualhosting di https.
Lo puoi fare se pero' usi porte TCP distinte per i virtualhost:
https://dominio1
https://dominio2:444
https://dominio3:445
ecc.
Riguardo al sistema con firewall dove il server https sta dietro al
firewall, forse si potrebbe studiare qualcosa con un semplice port
forwarding sulla porta 443 del fw (rinetd).
Ciao,
// Umberto Salsi
//
// 
http://digilander.iol.it/salsi
  --  GnuPG Key ID = BE2C F6CD 77E9 29AE


Questa l'avevo pensata anche io, ma dato che lo scambio dei certificati 
avviene PRIMA della GET /
www.pippo.it/index.html
, non sono in grado di 
discriminare a priori QUALE delle porte forwardare sulla 443 della 
macchina "front-side, public-side". Altrimenti avevo trovato anche il 
modo di fare virtualhosting name.based di https. Cioè, se riesco a 
sapere DA CHI il client vuole la richiesta , so anche a che porta 
forwardare (dinamicamente) la connessione, e quindi aprire + socket 
sulla stessa porta (del firewall) che in realtà mettono in comunicazione 
client diversi con server diversi. Dato invece che il certificato è la 
prima cosa che passa, non posso farlo. Se qualcuno ha trovato qualche 
scamuffo al riguardo, faccia sapere... io mi ci sono divertito un paio 
di giorni, ma non ne ho cavato nulla...
