2012-05-17 16 views

risposta

68

Non è un problema con Apache, ma con il fatto che Rails invia un'intestazione HSTS.

In Chrome, è possibile cancellare lo stato HSTS passando a about:net-internals, come descritto in ImperialViolet: HSTS UI in Chrome. Potrebbe anche essere necessario svuotare la cache, dal momento che config.force_ssl = true utilizza anche un reindirizzamento 301 (permanente).

Inoltre, in base a this answer, è possibile anche inviare all'applicazione un'intestazione STS con max-age = 0. Nel vostro controller:

response.headers["Strict-Transport-Security"] = 'max-age=0' 
+7

Dovrebbe essere documentato che una volta abilitata l'opzione 'force_ssl' in Rails, l'unico modo per disattivarlo è far cancellare tutti i visitatori dalla cache del browser.:( –

+10

Se non fosse così, saresti vulnerabile allo stripping SSL che è quello che l'HSTS è progettato per mitigare.Niente a che vedere con Rails. – Ali

+0

vale comunque la pena menzionare per gli sviluppatori :) Grazie per questa risposta @ Bruno –

13

Volevo solo far notare @ risposta di Bruno e @ suggerimenti di JoeVanDyk sono vere e possono essere applicate al di là del contesto di Rails/Apache. Sto usando PHP e Nginx. PHP non ha nulla a che fare con esso nel mio caso, ma ecco i passaggi con Nginx:

//sorry here's the nginx.conf part first, can't figure out how to mix multi-line 
//code with an ordered list 

server { 
    #... 
    #change: 
    # add_header Strict-Transport-Security "max-age=315360000; includeSubdomains";  
    #to: 
    add_header Strict-Transport-Security "max-age=0;"; 
    #... 
} 
  1. chiaro il vostro "cronologia del browser". Per chiarire il suggerimento di @ JoeVanDyk, penso che sia necessario cancellare la "cronologia di navigazione" perché la cancellazione della cache non ha funzionato per me (testato su Chrome/Firefox, si prega di aggiungere commenti se si conosce di più).

  2. file di nginx.conf (vedi codice qui sopra)

  3. server di riavvio

    [email protected]:~# /etc/init.d/nginx restart.

Dopo questo, è possibile ripristinare il comando nginx add_header Strict.. a quello che in precedenza aveva. Assicurati di ripetere nuovamente i passaggi da 1 a 3.

+1

Devo aggiungere che non è necessario riavviare, ma piuttosto ricaricare. Per esempio. '/etc/init.d/nginx reload' –

1

L'id figurato offre un po 'di riflessione su questo. L'impostazione del tempo di cache su 0 è la soluzione migliore e se la disattivate è necessario lasciarla a 0 per settimane per cancellare i browser dei clienti. Se hai solo bisogno di cancellare HSTS in chrome (per il tuo browser) puoi usare chrome://net-internals/#hsts nella barra degli indirizzi per svuotare la cache del tuo sito sul tuo browser specifico. Combinato con il "portale" sottostante diventa utile.

È possibile impostare le modalità temporanee HSTS impostando/spoofing un'intestazione personalizzata => chiave. Fondamentalmente se esiste un'intestazione di richiesta speciale, e corrisponde a una chiave, imposta HSTS con un tempo di cache di qualunque cosa tu abbia bisogno. Ciò ti consentirebbe di attivare o disattivare HSTS per tutto il traffico ma tu. Utile per provare HSTS prima di abilitare globalmente (per assicurarsi che tutte le risorse vengano caricate). Utile anche se vuoi cancellare temporaneamente la cache del client mentre qualcosa viene riparato (lasciandoti spazio per il test).

+0

Come si imposta il" tempo di cache "? Non c'è un'opzione in 'chrome: // net-internals/# hsts' – Pacerier

+0

@Pacerier Ah chrome può cancellare l'HSTS ma non può impostare il tempo di cache. Il tempo di cache proviene dall'intestazione HSTS di origine/sito. Una parte di esso può sembrare così: 'strict-transport-security: max-age = 15552000' ... in pratica ti serve dire strict-transport-security: max-age = 0' per disabilitare l'HSTS per i client e cancellare i reindirizzamenti (o consentire loro di connettersi con SSL non valido). – dhaupin

+0

Ma come potrebbe lo stesso utente modificarlo dal lato client? – Pacerier

0

Ho trovato che non riuscivo a eliminare una voce HSTS in Chrome perché stavo usando un indirizzo IP per lo sviluppo. Non riesco a ottenere chrome://net-internals/#hsts per eliminare la voce. Ho scoperto che Chrome memorizza le voci in ../AppData/local/Google/Chrome/User Data/Default/TransportSecurity, quindi ho appena eliminato il file. Ovviamente rimuove tutte le richieste HSTS, ma sospetto che verranno ricostruite nel tempo.

Problemi correlati