Отключение 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
Очистите кеш вашего веб-браузера и его!