In einer früheren Frage habe ich herausgefunden, dass ich die Nginx-SSL-Terminierung festlegen und Rails keine verschlüsselten Daten verarbeiten lassen sollte.
Warum gibt es dann folgendes?
config.force_ssl = true
Ich sehe dies in der Produktionskonfigurationsdatei auskommentiert. Aber wenn die Erwartung ist, dass Nginx alle SSL-Dinge erledigt, damit meine Rails-App nicht mit verschlüsselten Daten umgeht, was config.force_ssl = true
dann?
Sollte ich es in der Produktion auskommentieren lassen, wenn ich weiß, dass ich immer Nginx verwenden werde?
quelle
force_ssl
Eigenschaft pro Controller . Dieforce_ssl
Konfigurationsvariable, mit der dieRack::SSL
Middleware installiert wird , die standardmäßig HSTS aktiviert .config.force_ssl = true
dies die Standardeinstellung sein sollte. Warum hat das Rails-Team dies als Standard auskommentiert?Einstellung
config.force_ssl
beinhaltetActionDispatch::SSL
. In denActionDispatch::SSL
Dokumenten wird die Funktionalität wie folgt beschrieben (zur Verdeutlichung wurden Hervorhebungen hinzugefügt):DOCS
Diese Middleware wird dem Stack hinzugefügt, wenn
config.force_ssl = true
die darin festgelegten Optionen übergeben werdenconfig.ssl_options
. Es werden drei Jobs ausgeführt, um sichere HTTP-Anforderungen zu erzwingen:TLS-Umleitung: Leitet http: // -Anforderungen dauerhaft an https: // mit demselben URL-Host, Pfad usw. weiter. Standardmäßig aktiviert. Legen Sie fest
config.ssl_options
, dass die Ziel-URL geändert werden soll (z. B.redirect: { host: "secure.widgets.com", port: 8080 }
), oderredirect: false
deaktivieren Sie diese Funktion.Sichere Cookies: Setzt das
secure
Flag auf Cookies , um Browsern mitzuteilen, dass sie nicht zusammen mit http: // -Anfragen gesendet werden dürfen. Standardmäßig aktiviert. Stellen Sieconfig.ssl_options
mit einsecure_cookies: false
, um diese Funktion zu deaktivieren.HTTP Strict Transport Security (HSTS): Weist den Browser an, sich diese Site als reine TLS-Site zu merken und Nicht-TLS-Anforderungen automatisch umzuleiten . Standardmäßig aktiviert. Konfigurieren Sie
config.ssl_options
mithsts: false
, um zu deaktivieren. Stellen Sieconfig.ssl_options
mit einhsts: { … }
, um HSTS zu konfigurieren:expires
: Wie lange, in Sekunden, bleiben diese Einstellungen erhalten. Der Standardwert ist180.days
(empfohlen). Das Minimum, das erforderlich ist, um sich für Browser-Preload-Listen zu qualifizieren, ist18.weeks
.subdomains
: Aktivieren Sietrue
diese Option, um den Browser anzuweisen, diese Einstellungen auf alle Subdomains anzuwenden. Dies schützt Ihre Cookies vor dem Abfangen durch eine anfällige Site in einer Subdomain. Der Standardwert isttrue
.preload
: Geben Sie an, dass diese Site möglicherweise in die vorinstallierten HSTS-Listen der Browser aufgenommen wird. HSTS schützt Ihre Site bei jedem Besuch mit Ausnahme des ersten Besuchs, da Ihr HSTS-Header noch nicht angezeigt wurde. Um diese Lücke zu schließen, enthalten Browser-Anbieter eine integrierte Liste von HSTS-fähigen Websites. Gehen Sie zu https://hstspreload.appspot.com , um Ihre Website zur Aufnahme einzureichen. Um HSTS auszuschalten, reicht es nicht aus, den Header wegzulassen. Browser werden sich die ursprüngliche HSTS-Direktive bis zu ihrem Ablauf merken. Verwenden Sie stattdessen den Header, um den Browsern mitzuteilen, dass HSTS sofort ablaufen soll. Die Einstellunghsts: false
ist eine Verknüpfung fürhsts: { expires: 0 }
.Anfragen können die Weiterleitung abbestellen mit
exclude
:quelle
exclude
" - Warnung: Diese Funktion wurde erst kürzlich in Rails 5 hinzugefügt und funktioniert daher nicht für diejenigen von uns auf Rails 4.2 oderexclude
globalen Optionen waren lange vor Rails 5 verfügbar, daher ist der Syntaxt etwas anders:config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }
- serverfault.com/a/517401Diese Einstellung erzwingt HTTPS, indem HTTP-Anforderungen an ihre HTTPS-Gegenstücke umgeleitet werden. Ein Browserbesuch
http://domain.com/path
wird also umgeleitethttps://domain.com/path
.Wenn Sie die Einstellung auskommentieren, werden beide Protokolle zugelassen.
Sie müssen Ihren Webserver noch für die Verarbeitung von HTTPS-Anforderungen konfigurieren.
quelle
redirect 301 https:...
), würde dann nicht ALLES über https gehen und somitconfig.force_ssl = true
nichts wirklich tun (da nichts jemals http sein wird)? Oder gibt es hier einen tieferen Sicherheitsgrund?config.force_ssl
aktiviert lassen, nur für den Fall, dass jemand die Umleitung aus der Konfiguration des Webservers entfernt.config.force_ssl
undadd_header Strict-Transport-Security max-age=...;
zu 2Strict-Transport-Security
Kopfzeilen führenEs erzwingt, dass die gesamte Kommunikation mit dem Server verschlüsselt wird und SSL verwendet wird, dh über HTTPS.
Wenn Sie es in einen Controller aufnehmen, akzeptiert dieser Controller nur HTTPS-Anforderungen.
Hilfreiche Links:
quelle