2013-07-21 14 views
11

Recentemente ho cambiato il dominio per un'app Rails che ho in esecuzione su Heroku. Ho reindirizzato l'originale a quello nuovo e negli ultimi due mesi ho eseguito SSL su entrambi. Ho provato a rimuovere SSL dal dominio originale poiché tutto ciò che fa è il reindirizzamento.Disabilitare SSL per un'app di Heroku

ho fatto tutto quello che ho pensato che avrei dovuto:

  • spento SSL in app con config.force_ssl = false in production.rb
  • Cambiato ALIAS DNS e CNAME per puntare a "myapp.herokuapp.com"
  • rimosso l'endpoint SSL e certs

Se vado a myapp.herokuapp.com, tutto va bene, ma se vado a myapp.com, o www.myapp.com cerca automaticamente di portarmi alla sicuro versione del sito, https://myapp.com, e ottengo l'avviso di errore di sicurezza standard dal mio browser.

Mi manca qualcosa? È un problema di cache? Ci vuole del tempo prima che la modifica del DNS entri in gioco? Ho provato su alcuni computer/browser e il problema è coerente su tutti loro.

Nel peggiore dei casi, posso sicuramente aggiungere nuovamente l'endpoint SSL, ma sembra eccessivo.

risposta

12

config.force_ssl = true abilita l'intestazione Strict Transport Security (HSTS) con max-age di un anno. Vedi questo issue. Tale intestazione forza i browser che la supportano a contattare il server su HTTPS per un anno. Questo serve per prevenire attacchi in cui l'uomo in una posizione centrale esegue il downgrade della connessione HTTPS a HTTP.

Lo spostamento da HTTPS per i siti di produzione serviti con HSTS non è molto semplice. Devi mantenere il tuo sito servito su HTTPS e restituire l'intestazione HSTS con max-age=0 per ripristinare l'impostazione di un anno. Il problema è decidere per quanto tempo è necessario mantenere HTTPS. Per essere assolutamente sicuri che tutti i clienti siano passati, dovresti farlo per un anno. Potresti decidere di farlo per un periodo più breve, ma a rischio di rompere il sito per i clienti che visitano di rado.

+0

Oh, wow questo lo spiega. Grazie per la risposta dettagliata! – Lev

+0

FYI, ho trovato il seguente anche utile per far dimenticare al mio browser di usare ssl dopo aver modificato la configurazione: https://support.mozilla.org/en-US/questions/1027355. Questo ovviamente funziona solo per il tuo browser (ma nel mio caso non ho ancora condiviso l'url con nessuno). Quindi, se hai già visitato il tuo sito web, questo non li aiuterà (a meno che non facciano lo stesso sul loro computer). – Nick

6

Oltre a ciò che Jan ha detto, ecco cosa ho fatto per fare il trucco.

In application_controller.rb:

before_filter :expire_hsts 

[...] 
private 
    def expire_hsts 
    response.headers["Strict-Transport-Security"] = 'max-age=0' 
    end 

In production.rb

config.force_ssl = false 

Cancellare la cache del browser web e il gioco è fatto!

+0

non funziona per me. "Siamo spiacenti, ma qualcosa è andato storto." mostrato sulla mia pagina. –

Problemi correlati