[Plone-IT] Apache, Plone e la password 'pippo'

Massimiliano De Ruosi max.deruosi a uniud.it
Mer 7 Nov 2012 11:08:06 UTC


Stavo appunto cercando qualche informazione su come mettere in https  
il login con i popup (e questa è la domanda alla lista: qualcuno l'ha  
già fatto?), e in generale come mettere sotto https plone 4 per gli  
autenticati, e sono capitato in questo post.

Per plone senza popup, mi pare funzionino le stesse regole dai tempi  
di plone 2.5, che sono simili alle tue:

<VirtualHost *:80>

   [...]

   RewriteRule ^($|.*)/login_form$ https://%{SERVER_NAME}$1/login_form [L]
# RewriteRule ^($|.*)/login$ https://%{SERVER_NAME}$1/login [L]
   RewriteRule ^/(.*)passwordreset(.*)  
https://%{SERVER_NAME}/$1passwordreset$2 [L]

   RewriteCond %{QUERY_STRING}         ^came_from=http\%3A//(.*)
   RewriteRule ^/(.*)require_login      
https://%{SERVER_NAME}/$1require_login\?came_from=https://%1 [L]

   RewriteCond %{HTTP_COOKIE} __ac=
   RewriteRule ^(.*) https://%{SERVER_NAME}$1 [NE,L]

   [...]

   # Proxy Rewrite sul balancer
   RewriteRule ^/(.*)  
http://localhost:9000/VirtualHostBase/http/%{SERVER_NAME}:80/Plone/VirtualHostRoot/$1  
[P,L]

</VirtualHost>

...l'unica differenza sostanziale è che io metto in https anche il  
template "passwordreset"
Per quel che riguarda il virualhost sulla 443, io ne uso 2, in due  
files distinti, uno in alternativa all'altro: ssl-open e ssl-locked  
(più un terzo incluso in entrambi: ssl-common)

### ssl-open ###
# questo file contiene un virtualhost che dovrebbe essere attivo IN  
ALTERNATIVA a ssl-locked:
# questo virtualhost è quello normalmente attivo in produzione, e  
permette l'accesso pubblicatore in https.

   NameVirtualHost *:443
   <VirtualHost *:443>

   Include ssl-common

# Resto in https nelle pagine dove si immettono le credenziali, anche  
se non sono ancora loggato
         RewriteRule  
^/(.*)(require_login|login_form|password_form|mail_password_form|mail_password|plone_change_password|passwordreset|pwreset_form)(.*)  
\
            
http://localhost:9679/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/$1$2$3  
[P]
# Se non c'è il cookie __ac non sono loggato: torno in http...
         RewriteCond %{HTTP_COOKIE} !__ac=
           RewriteRule ^(.*) http://%{SERVER_NAME}$1 [NE,L]

[...]

# ...resto in https in tutti gli altri casi
         RewriteRule ^/(.*)  
http://localhost:9679/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/$1  
[L,P]

</VirtualHost>
### fine ssl-open ###

### ssl-locked ###
# questo file contiene un virtualhost che dovrebbe essere attivo IN  
ALTERNATIVA a ssl-open:
# questo virtualhost impedisce all'utente loggato di operare, e lo  
rimanda ad una pagina di servizio.
# viene attivato durante gli aggiornamenti di sistema, per impedire  
che i pubblicatori facciano modifiche sul
# server secondario utilizzato mentre il server "di produzione" viene  
riavviato

NameVirtualHost *:443
<VirtualHost *:443>

Include ssl-common

# Vado nella pagina di servizio nelle pagine dove si immettono le  
credenziali, anche se non sono ancora loggato
         RewriteRule  
^/(.*)(require_login|login_form|password_form|mail_password_form|mail_password|plone_change_password|passwordreset|pwreset_form)(.*)  
\
           http://%{SERVER_NAME}/pagine-speciali/pubblicazione-sospesa [L]

# Se c'è il cookie __ac sono loggato: forzo il logout
         RewriteCond %{HTTP_COOKIE} __ac=
           RewriteRule ^/(.*)  
http://localhost:9679/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/logout  
[L,P]

# Se non c'è il cookie __ac non sono loggato: torno in http...
         RewriteCond %{HTTP_COOKIE} !__ac=
           RewriteRule ^(.*) http://%{SERVER_NAME}$1 [NE,L]

# ...mando alla pagina di servizio in http in tutti gli altri casi
         RewriteRule ^/(.*) http://pagine-speciali/pubblicazione-sospesa [L,P]

</VirtualHost>
### fine ssl-locked ###

### ssl-common ###
# Questre istruzioni sono comuni ai virtualhost SSL,
# e sono pensate per essere incluse DENTRO il virtualhost

[...]

# Resto in https se vengono richieste risorse statiche
         RewriteRule ^/(.*)(gif|jpg|css|js)(.*) \
            
http://localhost:9679/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/$1$2$3  
[P]

### fine ssl-common ###

Anche qui, la differenza è che resto in https anche senza cookie __ac  
in questi templates:
- require_login
- login_form
- password_form
- mail_password_form
- mail_password
- plone_change_password
- passwordreset
- pwreset_form

...e anche in questo caso, si tratta di direttive pensate per plone  
2.5: su plone4 sono ancora valide? Ci sono altri templates da  
"proteggere" senza cookie __ac? ...sempre che qualcuno sia arrivato a  
leggere fin quaggiù :-)

my 2 cent,
Max


Quoting Michele Mordenti <michele.mordenti a gmail.com>:

> Plone necessita di una password minima di 5 caratteri: quale migliore
> password di "pippo"?
> Il problema che sto affrontando è che la password viaggia in chiaro:
> come faccio a proteggere la mia superpassword "pippo" da occhi
> indiscreti?
>
> Googlando ho trovato tre guide fare lo switch da HTTP a HTTPS
>  - http://plone.org/documentation/kb/apache-ssl/
>  - http://lab.oscert.net/plone/configurare-plone-dietro-apache-e-varnish
>  -  
> http://dtranhuu.dyndns.org/news/apache2-in-front-of-plone-on-ubuntu-server-9.10
> ma nessuna delle tre ha funzionato a dovere; in particolare mi ha dato
> diversi grattacapi la parte relativa alla richiesta di una risorsa
> privata.
> Lavorandoci un po' sopra ora tutto sembra filare liscio e mi permetto
> di condividere con voi la soluzione che ho trovato nell'auspicio di:
>  - preparare pappa pronta per altri
>  - se sbaglio... mi corriggerete
>
> Condizioni al contorno:
>  - istanza Plone di debug attiva sulla porta 8088
>  - Plone senza "pop-up semplici" in Pannello di Controllo ->Temi (il
> giochino non funziona con la popup di login)
>  - id istanza Plone: "Plone"
>  - apache con cartella virtuale "/plonetest" che redirige la root
> dell'istanza "Plone"
>
> Sotto la configurazione apache per HTTP
>
> <VirtualHost *:80>
>     ... TUTTO IL RESTO NON PLONESCO ...
>
>     <Location /plonetest>
>         Deny from All
>         Allow from 192.168.1.1/32
>     </Location>
>
>     # Rewrite rules
>     RewriteEngine On
>     RewriteLog /var/log/apache2/plonetest-rewrite.log
>     RewriteLogLevel 4
>
>     # Redirigo su HTTPS se chiedo una risorsa Plone ed il cookie
> "__ac" e' settato:
>     RewriteCond %{REQUEST_URI} ^/plonetest(.*)
>     RewriteCond %{HTTP_COOKIE} __ac=
>     RewriteRule ^/(.*)$ https://%{SERVER_NAME}/$1 [R,L]
>
>     # Redirigo su HTTPS alla richiesta di login dell'utente:
>     RewriteRule ^/plonetest/login(.*)$
> https://%{SERVER_NAME}/plonetest/login$1 [R,L]
>
>     # Redirigo su HTTPS alla richiesta di una risorsa privata plonesca:
>     RewriteCond %{REQUEST_URI} ^/plonetest(.*)
>     RewriteCond %{QUERY_STRING} came_from=http(.*)
>     RewriteRule ^($|/.*)require_login$
> https://%{SERVER_NAME}$1require_login?came_from=https%1 [NE,L]
>
>     # Alla normale richiesta di una pagina servita da Plone 'proxo'  
> l'istanza:
>     RewriteRule  ^/plonetest(.*)$
> http://localhost:8088/VirtualHostBase/http/%{SERVER_NAME}:80/Plone/VirtualHostRoot/_vh_plonetest$1
> [L,P]
> </VirtualHost>
>
>
> Sotto la configurazione apache per HTTPS
> <VirtualHost 192.168.1.2:443>
>     ... TUTTO IL RESTO NON PLONESCO ...
>
>     <Location /plonetest>
>         Deny from All
>         Allow from 192.168.1.1/32
>     </Location>
>
>     # Rewrite rules
>     RewriteEngine On
>     RewriteLog /var/log/apache2/ssl_plonetest-rewrite.log
>     RewriteLogLevel 4
>
>     # Proxo Plone in HTTPS alla richiesta di autenticazione
>     # (previene redirezione su HTTP per regola __ac non ancora impostato):
>     # - alla richiesta di login
>     # - utente autenticato, forse superflua
>     # - tengo l'utente ancora in HTTPS nel caso si volesse
> riautenticare nel form presente nella pagina
>     # - alla richiesta risorsa privata
>     RewriteCond %{REQUEST_URI} ^/plonetest/login.* [OR]
>     RewriteCond %{REQUEST_URI} ^/plonetest/logged_in.* [OR]
>     RewriteCond %{REQUEST_URI} ^/plonetest/logged_out.* [OR]
>     RewriteCond %{REQUEST_URI} ^/plonetest/(.*)require_login(.*)$
>     RewriteRule  ^/plonetest(.*)$
> http://localhost:8088/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/_vh_plonetest$1
> [L,P]
>
>     # se richiedo pagina "Plone" ed il cookie "__ac" non e' settato
> (utente non autenticato) allora redirigo di HTTP:
>     RewriteCond %{REQUEST_URI} ^/plonetest(.*)$
>     RewriteCond %{HTTP_COOKIE} __ac=.deleted. [OR]
>     RewriteCond %{HTTP_COOKIE} !__ac=
>     RewriteRule ^/(.*)$ http://%{SERVER_NAME}/$1 [R,L]
>
>     # Alla normale richiesta di una pagina servita da Plone con
> l'utente autenticato 'proxo' l'istanza:
>     RewriteRule  ^/plonetest(.*)$
> http://localhost:8088/VirtualHostBase/https/%{SERVER_NAME}:443/Plone/VirtualHostRoot/_vh_plonetest$1
> [L,P]
> </VirtualHost>
>
> Si può fare di meglio?
> Grazie, ciao.
>
> --
> Michele Mordenti
> _______________________________________________
> Plone-IT mailing list
> Plone-IT a lists.plone.org
> https://lists.plone.org/mailman/listinfo/plone-plone-it
> http://plone-regional-forums.221720.n2.nabble.com/Plone-Italy-f221721.html
>



Massimiliano De Ruosi
---------------------
AINF (Area servizi informatici e multimediali)
Universita' degli Studi di Udine
Via delle Scienze, 208
33100, Udine (UD)  ITALY

Tel.  +39 (0)432 55 8893
Cell. +39 320 4350861
Fax:  +39 (0)432 55 8911 (segr. AINF)
email: massimiliano.deruosi a uniud.it

----------------------------------------------------------------------
SEMEL (SErvizio di Messaging ELettronico) - AINF, Universita' di Udine




Maggiori informazioni sulla lista Plone-IT