Отключение SSL для приложения Heroku

Недавно я изменил домен для приложения Rails, которое у меня работает на Heroku. Я перенаправил оригинал на новый, и за последние пару месяцев был запущен SSL на обоих. Я попытался удалить SSL из исходного домена, так как все, что он делает, перенаправляется.

Я сделал все, что думал, что должен:

  • Отключил SSL в приложении с помощью config.force_ssl = false в production.rb
  • Изменены DNS ALIAS и CNAME, чтобы указать на "myapp.herokuapp.com"
  • Удалена конечная точка SSL и сертификаты

Если я перейду на myapp.herokuapp.com, все будет хорошо, но если я перейду на myapp.com или www.myapp.com, он автоматически попытается забрать меня в безопасную версию сайта, https://myapp.com, и я получаю стандартное предупреждение об ошибке безопасности из моего браузера.

Я что-то упустил? Это проблема кеширования? Требуется ли просто время для изменения DNS? Я пробовал несколько машин/браузеров, и проблема была согласована во всех них.

В худшем случае, я могу определенно добавить конечную точку SSL, но кажется, что она переполнена.

Ответ 1

config.force_ssl = true позволяет Strict Transport Security заголовок (HSTS) с max-age одного года. Смотрите issue. Такой заголовок заставляет браузеры поддерживать его, чтобы связаться с сервером через HTTPS в течение одного года. Это делается для предотвращения атак, при которых человек в среднем понижает HTTPS-соединение с HTTP.

Перемещение HTTPS для производственных сайтов, которые были отправлены с помощью HSTS, не очень просто. Вы должны хранить свой сайт через HTTPS и возвращать заголовок HSTS с max-age=0 до reset в течение одного года. Проблема заключается в том, чтобы решить, как долго вам нужно поддерживать HTTPS. Чтобы быть абсолютно уверенным, что все клиенты переключаются, вы должны сделать это в течение одного года. Вы можете решить сделать это в течение более короткого периода времени, но рискуете повредить сайт для клиентов, которые посещают нечасто.

Ответ 2

В дополнение к тому, что сказал Ян, вот что я сделал, чтобы сделать трюк.

В application_controller.rb:

before_filter :expire_hsts

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

В production.rb

config.force_ssl = false

Очистите кеш вашего веб-браузера и его!