Rails Devise SSL Session Mix на производстве - PullRequest
1 голос
/ 02 января 2012

Я развернул свое приложение на Ubuntu VPS с использованием Capistrano, nginx / Passenger и SSL-сертификата с подстановочными знаками.

Приложение отлично работает при разработке и моей промежуточной среде на Heroku.

Однако на производстве возникают две проблемы, когда пользователи заходят на сайт с помощью защищенной страницы.

  1. В последних версиях Chrome и Firefox браузеры начинают принудительно выполнять HTTPS-запросы для каждого отдельного запроса каждый раз.,Независимо от того, вошел ли пользователь в систему или нет.Даже если я отключил SSL на nginx, браузер все еще пытается HTTPS и жалуется, что не может подключиться.Главная страница обслуживает некоторые небезопасные динамические встроенные элементы и использует небезопасный CDN, поэтому я хотел бы использовать эту страницу как не-SSL.Всякий раз, когда я пытался перенаправить страницу в не-SSL через перезапись nginx или фильтр before в Rails, это вызывало бесконечный цикл перенаправления.

  2. Safari не имеет первой проблемы, как указано вышеон учитывает как HTTPS, так и HTTP-запросы.Тем не менее, когда пользователь вошел в систему и зашел на страницу без SSL, он вышел из системы или мгновенно потерял сеанс.

Кто-нибудь сталкивался с такой проблемой раньше или у него есть идеякак я мог диагностировать / устранить проблему?

Спасибо

1 Ответ

1 голос
/ 02 января 2012

Использовали ли вы Rails 3.1 force_ssl для включения SSL или гем?

Когда вы включили HTTPS, вы также включили флаг HTTP Strict Transport Security , который используется для быстрого перехода на любую страницу HTTPS в этом домене перед отправкой запроса на сервер.

В Chrome введите chrome://net-internals/#hsts в браузере, а затем вы можете удалить свой домен из списка HSTS, который должен исправить это для Chrome. Не могу говорить за Firefox, так как я не так часто его использую.

Проблема с проигрышным сеансом, скорее всего, связана с тем, что Rails устанавливает cookie-файл аутентификации как безопасный, что означает, что они отправляются только для запросов HTTPS, а не HTTP. Убедитесь, что ваш cookie_options в Rails не устанавливает :secure => true. Также проверьте настройку Devise cookie_options, чтобы убедиться, что :secure => true не установлен.

...