2012-05-04 6 views
6

Es gibt eine nette Option für die Rails-Anwendung config:Rails: SSL-Unterstützung aktiviert wird Chrome verwirrt

config.force_ssl = true

Allerdings scheint es, dass das nur auf true setzt nicht das bekommt HTTPS-Verbindungen funktionieren. Noch mehr - nach dem Versuch (und fehlgeschlagen), mit https://localhost:3000 mit Chrome zu verbinden, habe ich diese Option auf false gesetzt, und Chrome versucht immer noch, https zu öffnen, auch wenn ich http schreibe.

Also, ein paar Fragen:

--Wie Chrome zu zwingen, nicht https zu versuchen, mehr? - Was ist die richtige Methode zum Aktivieren von SSL in meiner Rails App?

Update: Die App wird auf Heroku ausgeführt, und es scheint, dass https dort automatisch unterstützt wird. Kann ich SSL auch lokal testen? Wie beim Rails Server?

+0

Welchen Webserver verwenden Sie>? Rails ist Middleware! Wie ist dieser Server konfiguriert? –

+1

Haben Sie den Server [Strict Transport Security] (http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) Kopfzeilen an einem bestimmten Punkt gesetzt (was Chrome hätte erinnert)? – Bruno

Antwort

5

Zuerst soll ich sagen, dass ich nicht versucht haben, aber es gibt im Wesentlichen zwei Gründe möglicherweise für Chrome noch über HTTPS:

  • Mit HTTP Strict Transport Security Header: wenn der Server sie setzt, den Client (Unterstützung von HSTS, wie Chrome) soll für alle nachfolgenden Anfragen an diesen Host bei HTTPS bleiben.

  • Permanente Weiterleitungen. Wenn die anfängliche Umleitung "301 Moved Permanently" (und nicht 302 zum Beispiel) verwendet, um die Umleitung vorzunehmen, muss sich der Browser den Namen merken (""). Der angeforderten Ressource wurde eine neue permanente URI und alle zukünftigen Referenzen zugewiesen zu dieser Ressource sollte eine der zurückgegebenen URIs ") verwenden.

Eine wahrscheinliche Lösung wäre, den Cache in Ihrem Browser zu löschen.

(*) This question scheint darauf hinzuweisen, dies ist der Fall für Ruby on Rails mit dieser Konfiguration).

+0

[Diese Antwort] (http://stackoverflow.com/a/10523187/372643) sollte von Interesse sein. – Bruno

+1

Clearing Cache funktionierte für mich. Ich könnte hinzufügen, dass Sie in Chrome in den Inspector (Dev Tools) gehen können und in den Einstellungen (Zahnradsymbol klicken) und aktivieren Sie "Cache deaktivieren (während DevTools geöffnet ist)". Dann besuchen Sie die Website als http: // ..., dann schließen Sie DevTools, und Sie sollten im Geschäft sein. Dadurch wird vermieden, dass ein vollständiger Cache gelöscht werden muss (wenn Sie nicht möchten) –

+0

Die Symbole haben sich jetzt in Chrome geändert, zumindest in meiner Version für Mac OS. Es ist immer noch einfach, einfach den Hamburger rechts oben drücken, Geschichte gehen (oder Y für volle Historie anzeigen), dann "Browserdaten löschen" auswählen, Cache wählen (du kannst deinen aktuellen Browserverlauf nach Belieben hinterlassen) und "Cookies" auswählen und andere Site- und Plug-in-Daten "und" zwischengespeicherte Bilder und Dateien "dann sind Sie eingestellt. – LpLrich

2

Ich hatte das gleiche Problem. Was ich getan habe, ist die Verwendung eines ssl Enforcer Gems, das eine Middleware hinzufügt, die ssl und Redirects behandelt. Es hat eine strikte Option, die die konfigurierten Protokolle erzwingt.

in Ihrem Gemfile hinzufügen:

gem 'rack-ssl-enforcer' 

in production.rb add:

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

Diese die angeforderten Seiten gesichert werden zwingen wird, und den Rest nicht gesichert werden. Es deaktiviert den HSTS-Header, der in Chrome problematisch ist (Redirect-Caching-Problem).

Sie können auch den Cache für alle cleints ablaufen (wenn es bereits vorhanden ist) sicherstellen, dass Sie nicht unendlich Redirect bekommen:

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

auch die ssl Durchsetzung in der Produktion entfernen.rb (sonst könnte es mit dieser Middleware-Konflikt):

config.force_ssl = false 
1

Mal sehen, was einmal passiert Sie Ihre Konfigurationsdatei aktualisiert mit:

config.force_ssl = true 

Diese Rack SSL Middleware verursacht hat als erste Middleware geladen werden. Wie Sie im Code sehen können, setzt Rack-SSL eine HSTS header durch diese Zeile auf die Header hinzufügen:

Strict-Transport-Security 

Erzählt werden unterstützte Browser wie Chrome HTTPS verwenden nur Ihre Website zuzugreifen.

Also, wenn Sie zurück:

config.force_ssl = false 

Chrome wird noch HTTPS verwendet Ihre Website zugreifen und verursacht einen Fehler.

Um dieses Problem zu lösen, müssen Sie den HSTS-Cache leeren. Sie können dazu die folgende URL in Ihrem Chrome-Browser: chrome: // net-internals/#sts

0

Öffnen Sie Ihre Chrome-Entwicklertools, wenn Sie bei localhost sind: Dann können Sie mit der rechten Maustaste auf die Schaltfläche zum Aktualisieren klicken ↻ und wählen Sie "Cache leeren und erneutes Laden".

Dieser Fehler tritt möglicherweise auch bei Ihnen auf, wenn Sie den Server in der Produktionsumgebung starten, in der HSTS aktiviert ist.

Chrome leitet Sie an https://localhost:3000/ um und sagt "SSL-Verbindungsfehler".

Verwandte Themen