Vor ungefähr 6 Monaten habe ich eine Site eingeführt, auf der jede Anfrage über https erfolgen musste. Die einzige Möglichkeit, um sicherzustellen, dass jede Anforderung an eine Seite über https erfolgte, bestand darin, sie beim Laden der Seite zu überprüfen. Wenn die Anfrage nicht über http wäre, würde ich response.redirect (" https://example.com ")
Gibt es einen besseren Weg - idealerweise eine Einstellung in der web.config?
Antworten:
Bitte verwenden Sie HSTS (HTTP Strict Transport Security)
von http://www.hanselman.com/blog/HowToEnableHTTPStrictTransportSecurityHSTSInIIS7.aspx
Ursprüngliche Antwort (ersetzt durch die oben genannte am 4. Dezember 2015)
Grundsätzlich
das würde in der global.asax.cs (oder global.asax.vb) gehen
Ich kenne keine Möglichkeit, es in der web.config anzugeben
quelle
Sie können auch HSTS verwenden, indem Sie den Header "Strict-Transport-Security" an den Browser zurückgeben. Der Browser muss dies unterstützen (und derzeit sind es hauptsächlich Chrome und Firefox). Dies bedeutet jedoch, dass der Browser nach dem Festlegen keine Anforderungen an die Site über HTTP stellt und diese stattdessen in HTTPS-Anforderungen übersetzt, bevor sie ausgegeben werden . Versuchen Sie dies in Kombination mit einer Weiterleitung von HTTP:
Browser, die HSTS nicht kennen, ignorieren den Header einfach, werden jedoch von der switch-Anweisung abgefangen und an HTTPS gesendet.
quelle
if(!Request.IsLocal)
damit das Debuggen nicht unterbrochen wird.Mit dem IIS7-Modul können Sie umleiten.
quelle
Für Benutzer von ASP.NET MVC. Sie können Folgendes verwenden, um SSL / TLS über HTTPS auf zwei Arten auf der gesamten Site zu erzwingen:
Der harte Weg
1 - Fügen Sie den globalen Filtern das RequireHttpsAttribute hinzu:
2 - Anti-Fälschungs-Token zur Verwendung von SSL / TLS zwingen:
3 - Cookies müssen standardmäßig HTTPS erfordern, indem Sie die Datei Web.config ändern:
4 - Verwenden Sie das NWebSec.Owin NuGet-Paket und fügen Sie die folgende Codezeile hinzu, um die strikte Transportsicherheit auf der gesamten Site zu aktivieren. Vergessen Sie nicht, die unten stehende Preload-Direktive hinzuzufügen und Ihre Site an die HSTS Preload-Site zu senden . Weitere Informationen hier und hier . Beachten Sie, dass es eine Web.config-Methode gibt, die Sie auf der NWebSec- Site nachlesen können, wenn Sie OWIN nicht verwenden .
5 - Verwenden Sie das NWebSec.Owin NuGet-Paket und fügen Sie die folgende Codezeile hinzu, um das Festhalten öffentlicher Schlüssel (Public Key Pinning, HPKP) auf der gesamten Site zu aktivieren. Weitere Informationen hier und hier .
6 - Fügen Sie das https-Schema in die verwendeten URLs ein. Der HTTP-Header für Content Security Policy (CSP) und die Subresource Integrity (SRI) funktionieren nicht gut, wenn Sie das Schema in einigen Browsern imitieren. Es ist besser, explizit über HTTPS zu sprechen. z.B
Der einfache Weg
Verwenden Sie die Visual Studio-Projektvorlage von ASP.NET MVC Boilerplate , um ein Projekt mit all dem und vielem mehr zu generieren. Sie können den Code auch auf GitHub anzeigen .
quelle
<authentication mode="Forms">
, müssen Sie drinnen haben<forms requireSSL="true">
RequireHttpsAttribute
macht die Weiterleitung. Solange du das hast, sollte es in Ordnung sein.Wenn Sie dies aus irgendeinem Grund nicht in IIS einrichten können, würde ich ein HTTP-Modul erstellen, das die Umleitung für Sie übernimmt:
Kompilieren Sie es dann einfach zu einer DLL, fügen Sie es als Referenz zu Ihrem Projekt hinzu und platzieren Sie es in web.config:
quelle
app.BeginRequest += new OnBeginRequest;
in derInit
Methode erwartet und in derOnBeginRequest
würde enthalten, was die aktuelleInit
Methode enthält. Sind Sie sicher, dass dieses Modul wie erwartet funktioniert?Was Sie tun müssen, ist:
1) Fügen Sie einen Schlüssel in web.config hinzu, abhängig von der Produktion oder dem Stage Server wie unten
2) Fügen Sie in Ihrer Global.asax-Datei die folgende Methode hinzu.
quelle
Wenn die SSL-Unterstützung auf Ihrer Site nicht konfigurierbar ist (dh https ein- und ausgeschaltet werden sollte), können Sie das Attribut [RequireHttps] für jede Controller- / Controller-Aktion verwenden, die Sie sichern möchten.
quelle
X-WebMux-SSL-termination: true
Dies hängt auch von der Marke Ihres Balancers ab. Für den Web-Mux müssten Sie nach dem http-Header suchen, um festzustellen, ob der eingehende Datenverkehr ssl war. Details hier: http://www.cainetworks.com/support/redirect2ssl.htmlquelle
Für @Joe oben: "Dies gibt mir eine Umleitungsschleife. Bevor ich den Code hinzugefügt habe, hat es gut funktioniert. Irgendwelche Vorschläge? - Joe 8. November 11 um 4:13"
Dies passierte auch mir und ich glaube, dass ein Load Balancer die SSL-Anforderung vor dem Webserver beendete. Meine Website dachte also immer, die Anfrage sei "http", auch wenn der ursprüngliche Browser "https" angefordert hatte.
Ich gebe zu, dass dies ein bisschen hackig ist, aber was für mich funktioniert hat, war die Implementierung einer "JustRedirected" -Eigenschaft, die ich nutzen konnte, um herauszufinden, dass die Person bereits einmal umgeleitet wurde. Daher teste ich auf bestimmte Bedingungen, die die Umleitung rechtfertigen, und setze diese Eigenschaft (in der Sitzung gespeicherter Wert) vor der Umleitung, wenn sie erfüllt sind. Selbst wenn die http / https-Bedingungen für die Umleitung beim zweiten Mal erfüllt sind, umgehe ich die Umleitungslogik und setze den Sitzungswert "JustRedirected" auf false zurück. Sie benötigen Ihre eigene bedingte Testlogik, aber hier ist eine einfache Implementierung der Eigenschaft:
quelle
Ich werde meine zwei Cent einwerfen. Wenn Sie Zugriff auf die IIS-Serverseite haben, können Sie HTTPS mithilfe der Protokollbindungen erzwingen. Zum Beispiel haben Sie eine Website namens Blah . In IIS würden Sie zwei Sites einrichten : Blah und Blah (Redirect) . Konfigurieren Sie für Blah nur die
HTTPS
Bindung (und stellenFTP
Sie bei Bedarf sicher, dass diese auch über eine sichere Verbindung erzwungen wird). Konfigurieren Sie für Blah (Redirect) nur dieHTTP
Bindung. Stellen Sie schließlich im Abschnitt HTTP-Umleitung für Blah (Umleitung) sicher, dass eine 301-Umleitunghttps://blah.com
mit aktiviertem genauem Ziel festgelegt ist. Stellen Sie sicher, dass jede Site in IIS darauf verweisteigenen Stammordner, sonst wird die Web.config alles vermasselt.HSTS
Stellen Sie außerdem sicher, dass Sie auf Ihrer HTTPSed-Site eine Konfiguration vorgenommen haben, damit nachfolgende Anforderungen des Browsers immer an HTTPS erzwungen werden und keine Weiterleitungen auftreten.quelle
Dies ist eine umfassendere Antwort, die auf @Troy Hunts basiert. Fügen Sie diese Funktion Ihrer
WebApplication
Klasse hinzu inGlobal.asax.cs
:(Um SSL in Ihrem lokalen Build zu aktivieren, aktivieren Sie es im Eigenschaften-Dock für das Projekt.)
quelle
-> Fügen Sie einfach [RequireHttps] über dem öffentlichen HomeController: Controller hinzu.
-> Und fügen Sie GlobalFilters.Filters.Add hinzu (neues RequireHttpsAttribute ()); in der Methode 'protected void Application_Start ()' in der Datei Global.asax.cs.
Dadurch wird Ihre gesamte Anwendung auf HTTPS gezwungen.
quelle
Ich habe einige Zeit nach sinnvollen Best Practices gesucht und Folgendes gefunden, das für mich perfekt funktioniert hat. Ich hoffe das wird dich irgendwann retten.
Verwenden der Konfigurationsdatei (z. B. einer asp.net-Website) https://blogs.msdn.microsoft.com/kaushal/2013/05/22/http-to-https-redirects-on-iis-7-x-and- höher/
oder auf Ihrem eigenen Server https://www.sslshopper.com/iis7-redirect-http-to-https.html
[KURZE ANTWORT] Einfach Der folgende Code geht hinein
quelle
In IIS10 (Windows 10 und Server 2016) gibt es ab Version 1709 eine neue, einfachere Option zum Aktivieren von HSTS für eine Website.
Microsoft beschreibt die Vorteile des neuen Ansatzes hier und bieten viele verschiedene Beispiele dafür , wie die Änderung programmatisch zu implementieren oder direkt die ApplicationHost.config - Datei bearbeiten (die wie web.config ist aber arbeitet auf der Ebene IIS, anstatt einzelne Site - Ebene ). ApplicationHost.config befindet sich unter C: \ Windows \ System32 \ inetsrv \ config.
Ich habe hier zwei der Beispielmethoden beschrieben, um Link Rot zu vermeiden.
Methode 1 - Bearbeiten Sie die Datei ApplicationHost.config direkt.
<site>
Fügen Sie zwischen den Tags die folgende Zeile hinzu:Methode 2 - Befehlszeile: Führen Sie Folgendes an einer Eingabeaufforderung mit erhöhten Rechten aus (dh mit der rechten Maustaste auf CMD und als Administrator ausführen). Denken Sie daran, Contoso mit dem Namen Ihrer Site zu tauschen, wie er im IIS-Manager angezeigt wird.
Die anderen Methoden, die Microsoft in diesen Artikeln anbietet, sind möglicherweise bessere Optionen, wenn Sie sich in einer gehosteten Umgebung befinden, in der Sie nur eingeschränkten Zugriff haben.
Beachten Sie, dass IIS10 Version 1709 jetzt unter Windows 10 verfügbar ist. Für Windows Server 2016 befindet es sich jedoch auf einem anderen Release-Track und wird nicht als Patch oder Service Pack veröffentlicht. Siehe hier für Details über 1709.
quelle
Wenn Sie ASP.NET Core verwenden, können Sie das Nuget-Paket SaidOut.AspNetCore.HttpsWithStrictTransportSecurity ausprobieren.
Dann müssen Sie nur noch hinzufügen
Dadurch wird auch der HTTP-StrictTransportSecurity-Header zu allen Anforderungen hinzugefügt, die mithilfe des https-Schemas gestellt werden.
Beispielcode und Dokumentation https://github.com/saidout/saidout-aspnetcore-httpswithstricttransportsecurity#example-code
quelle