Вопрос по ruby-on-rails, https, ssl – Rails: активация поддержки SSL приводит в замешательство Chrome

6

Есть хорошая опция для настройки приложения Rails:

config.force_ssl = true

Однако кажется, что просто установив это значение на true, вы не получите работающие HTTPS-соединения. Еще больше - после попытки (и неуспешного) подключения кhttps: // локальный: 3000 с Chrome я установил для этого параметра значение false, и Chrome все еще пытается открыть https, даже если я пишу http.

Итак, пара вопросов:

- Как заставить Chrome больше не пытаться использовать https? - Как правильно включить SSL в моем приложении Rails?

Обновление: приложение работает на Heroku, и кажется, что https поддерживается там автоматически. Могу ли я проверить SSL также локально? Как при запуске сервера рельсов?

Какой веб-сервер вы используете & gt ;? Rails это промежуточное ПО! Как настроен этот сервер? Mörre
Вы установили серверStrict Transport Security заголовки в какой-то момент (какой Chrome запомнил бы)? Bruno

Ваш Ответ

4   ответа
5

я должен сказать, что я не пробовал это, но в основном есть две возможные причины того, что Chrome все еще использует HTTPS:

Using HTTP Strict Transport Security headers: if the server sets them, the client (supporting HSTS, like Chrome) is meant to stick to HTTPS for all subsequent requests to that host.

Permanent redirects. If the initial redirect you got was using "301 Moved Permanently" (and not 302 for example) to make the redirection,(*) the browser is meant to remember it ("The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs").

Вероятным решением этой проблемы было бы очистить кеш в вашем браузере.

(*) Этот вопрос кажется, указывает, что это имеет место для Ruby on Rails с этим конфигом).

очистка кеша у меня сработала. Могу добавить, что вы можете зайти в Inspector (Dev Tools) в Chrome и в настройках (щелкнуть значок шестеренки) и установить флажок «Отключить кэш (при открытом DevTools)». Затем зайдите на сайт как http: // ..., затем закройте DevTools, и вы должны быть в бизнесе. Это позволяет избежать полной очистки кеша (если вы этого не хотите)
This answer должен представлять интерес.
Значки теперь изменились в Chrome, по крайней мере, в моей версии для Mac OS. Это по-прежнему легко, просто нажмите гамбургер в верхнем правом углу, перейдите к истории (или введите команду Y для отображения полной истории), а затем нажмите «Очистить данные о просмотре». выберите кеш (вы можете оставить свою историю посещений в такте, если хотите), выберите & quot; файлы cookie и другие данные сайта и плагина & quot; и «кэшированные изображения и файлы»; затем вы настроены.
1

что произошло, когда вы обновили свой конфигурационный файл:

config.force_ssl = true

Это вызвалоRack SSL Middleware быть загруженным в качестве первого промежуточного программного обеспечения. Как вы можете видеть в коде, Rack SSL устанавливаетЗаголовок HSTS добавив эту строку в заголовки:

Strict-Transport-Security

Он сообщает поддерживаемым браузерам, таким как Chrome, использовать HTTPS только для доступа к вашему веб-сайту.

Итак, когда вы вернетесь назад:

config.force_ssl = false

Chrome по-прежнему использует HTTPS для доступа к вашему веб-сайту и вызывает ошибку.

Чтобы решить эту проблему, вам нужно очистить кеш HSTS. Вы можете сделать это, перейдя по следующей ссылке в браузере Chrome: хром: // нетто-Внутрикорпусные / # HSTS

0

когда вы находитесь на локальном хосте: тогда вы можете щелкнуть правой кнопкой мыши кнопку обновления & # x21BB; и выберите «Очистить кэш и выполнить полную перезагрузку».

Эта ошибка также может произойти с вами, если вы запустите свой сервер в производственной среде, где включен HSTS.

Chrome перенаправляет вас наhttps: // локальный: 3000 / и говорит "Ошибка соединения SSL".

2

так это использовал гем sslforcer, который добавляет промежуточное ПО, которое обрабатывает ssl и перенаправляет. У этого есть строгая опция, которая обеспечивает настроенные протоколы.

в вашем Gemfile добавьте:

gem 'rack-ssl-enforcer'

в production.rb добавить:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, strict: true

Это заставит запрашиваемые страницы быть защищенными, а остальные - незащищенными. Он отключает заголовок HSTS, который проблематичен в chrome (проблема с перенаправлением кеширования).

Вы также можете истечь срок действия кэша для всех клиентов (если он уже существует), чтобы быть уверенным, что вы не получите бесконечное перенаправление:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, :hsts => { :expires => 1, :subdomains => false }

также удалите принудительное выполнение ssl в production.rb (иначе это может конфликтовать с этим промежуточным ПО):

config.force_ssl = false

Похожие вопросы