7

Rails アプリを設定するための優れたオプションがあります。

config.force_ssl = true

ただし、それをtrueにするだけではHTTPS接続が機能しないようです。さらに、Chrome でhttps://localhost:3000に接続しようとして (そして失敗しても) 、このオプションを false に設定しましたが、http を書いても Chrome は引き続き https を開こうとします。

だから、いくつかの質問:

-- Chrome に https を試行させないようにする方法は? --Rails アプリで SSL を有効にする適切な方法は何ですか?

更新: アプリは Heroku で実行されており、https は自動的にサポートされているようです。SSLもローカルでテストできますか? Railsサーバーを実行しているときのように?

4

4 に答える 4

5

最初に、私はこれを試していないと言わなければなりませんが、Chrome がまだ HTTPS を使用している主な理由は 2 つあります。

  • HTTP Strict Transport Securityヘッダーの使用: サーバーがそれらを設定すると、クライアント (Chrome などの HSTS をサポートする) は、そのホストへの後続のすべての要求に対して HTTPS に固執することを意味します。

  • 永続的なリダイレクト。取得した最初のリダイレクトが「301 Moved Permanently」 (たとえば 302 ではなく) を使用してリダイレクトを行った場合、(*)ブラウザーはそれを記憶するようになっています (「要求されたリソースには、新しい永続的な URI が割り当てられ、将来のこのリソースへの参照は、返された URI の 1 つを使用する必要があります")。

これに対する解決策として、ブラウザのキャッシュをクリアすることが考えられます。

(*)この質問は、これがこの構成の Ruby on Rails の場合であることを示しているようです)。

于 2012-05-04T11:54:56.577 に答える
2

同じ問題がありました。私がしたことは、ssl とリダイレクトを処理するミドルウェアを追加する ssl エンフォーサー gem を使用することです。構成されたプロトコルを強制する厳密なオプションがあります。

Gemfile に次を追加します。

gem 'rack-ssl-enforcer'

production.rb に次を追加します。

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

これにより、要求されたページが強制的に保護され、残りは保護されなくなります。Chrome で問題となる HSTS ヘッダーを無効にします (リダイレクト キャッシュの問題)。

すべてのクライアントのキャッシュを期限切れにすることもできます (キャッシュが既に存在する場合)。これにより、無限リダイレクトが発生しないようにすることができます。

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

また、production.rb の ssl 強制を削除します (そうしないと、このミドルウェアと競合する可能性があります):

config.force_ssl = false
于 2012-11-18T09:42:34.000 に答える
1

構成ファイルを次のように更新するとどうなるか見てみましょう。

config.force_ssl = true

これにより、Rack SSL ミドルウェアが最初のミドルウェアとして読み込まれました。コードでわかるように、Rack SSL は、次の行をヘッダーに追加してHSTS ヘッダーを設定します。

Strict-Transport-Security

Chrome などのサポートされているブラウザーに、HTTPS のみを使用して Web サイトにアクセスするように指示します。

だからあなたが戻ったら:

config.force_ssl = false

Chrome は引き続き HTTPS を使用して Web サイトにアクセスし、エラーが発生します。

この問題を解決するには、HSTS キャッシュを空にする必要があります。Chrome ブラウザーで次の URL にアクセスすると、それを行うことができます: chrome://net-internals/#hsts

于 2014-01-21T10:14:34.563 に答える