2013-07-21 5 views
11

Niedawno zmieniłem domenę dla aplikacji Railsowej, którą uruchomiłem na Heroku. Przekierowałem oryginał na nowy i przez ostatnie kilka miesięcy korzystałem z SSL w obu. Próbowałem usunąć SSL z oryginalnej domeny, ponieważ wszystko, co robi, to przekierowanie.Wyłączanie SSL dla aplikacji Heroku

Zrobiłem wszystko myślałem, że powinienem:

  • Wyłączony SSL w aplikacji z config.force_ssl = false w production.rb
  • zmienionego alias DNS i CNAME, aby wskazywał "myapp.herokuapp.com"
  • usunięto punktu końcowego SSL i certs

Jeśli pójdę do myapp.herokuapp.com, wszystko jest w porządku, ale jeśli pójdę do myapp.com lub www.myapp.com automatycznie próbuje zabrać mnie do bezpieczne wersja strony, https://myapp.com, a ja otrzymuję standardowe ostrzeżenie o błędzie z mojej przeglądarki.

Czy brakuje mi czegoś? Czy to jest problem z buforowaniem? Czy zmiana DNS wymaga czasu? Próbowałem już na kilku komputerach/przeglądarkach, a problem jest spójny we wszystkich.

W najgorszym przypadku mogę ponownie dodać punkt końcowy SSL, ale wygląda na to, że jest on przesadny.

Odpowiedz

12

config.force_ssl = true Włącza nagłówek Strict Transport Security (HSTS) z max-age jednego roku. Zobacz ten issue. Taki nagłówek wymusza przeglądarki, które wspierają go w kontaktowaniu się z serwerem przez HTTPS przez jeden rok. Ma to zapobiegać atakom, w których człowiek w środku obniża połączenie HTTPS z HTTP.

Przeniesienie z HTTPS dla stron produkcyjnych, które były obsługiwane z HSTS, nie jest łatwe. Witryna powinna być obsługiwana przez HTTPS i zwracać nagłówek HSTS z max-age=0, aby zresetować ustawienie roczne. Problem polega na określeniu, jak długo należy utrzymywać HTTPS. Aby mieć całkowitą pewność, że wszyscy klienci są przełączani, należy zrobić to przez rok. Możesz zdecydować się na to przez krótszy okres, ale ryzykujesz zerwanie strony dla klientów, którzy odwiedzają ją nieczęsto.

+0

Och, wow, który to wyjaśnia. Dzięki za szczegółową odpowiedź! – Lev

+0

FYI, znalazłem następujące przydatne również, aby moja przeglądarka zapomniała użyć ssl po zmianie konfiguracji: https://support.mozilla.org/en-US/questions/1027355. To oczywiście działa tylko dla twojej przeglądarki (ale w moim przypadku nie udostępniłem jeszcze nikomu adresu URL). Więc jeśli masz już odwiedzających twoją stronę, to by im nie pomogło (chyba że zrobią to samo na swoim komputerze). – Nick

6

Oprócz tego, co powiedział Jan, oto, co zrobiłem, aby zrobić lewę.

W application_controller.rb:

before_filter :expire_hsts 

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

W production.rb

config.force_ssl = false 

Wyczyść pamięć podręczną z przeglądarki internetowej i to jest to!

+0

nie działa dla mnie. "Przepraszamy, ale coś poszło nie tak." wyświetlane na mojej stronie. –