Ich habe in Google und StackOverflow nach einer Lösung gesucht, aber alle scheinen sich auf ASP.NET usw. zu beziehen.
Normalerweise führe ich Linux auf meinen Servern aus, aber für diesen einen Client verwende ich Windows mit IIS 7.5 (und Plesk 10). Dies ist der Grund, warum ich mit IIS- und web.config- Dateien etwas nicht vertraut bin . In einer .htaccess
Datei können Sie mithilfe von Umschreibbedingungen feststellen, ob das Protokoll HTTPS ist, und entsprechend umleiten. Gibt es eine einfache Möglichkeit , dies mithilfe einer web.config-Datei oder sogar mithilfe des von mir installierten Moduls ' URL Rewrite ' zu erreichen ?
Ich habe keine Erfahrung mit ASP.NET. Wenn dies in die Lösung involviert ist, geben Sie bitte klare Schritte zur Implementierung an.
Der Grund für mich, dies mit der web.config und nicht mit PHP zu tun, ist, dass ich HTTPS für alle Assets auf der Site erzwingen möchte.
Antworten:
Sie benötigen das URL Rewrite-Modul, vorzugsweise v2 (ich habe kein v1 installiert, kann also nicht garantieren, dass es dort funktioniert, sollte es aber).
Hier ist ein Beispiel für eine solche web.config - sie erzwingt HTTPS für ALLE Ressourcen (unter Verwendung von 301 Permanent Redirect):
PS Diese spezielle Lösung hat nichts mit ASP.NET/PHP oder einer anderen Technologie zu tun, da sie nur mit dem URL-Umschreibemodul ausgeführt wird - sie wird auf einer der anfänglichen / unteren Ebenen verarbeitet -, bevor die Anforderung den Punkt erreicht, an dem Ihr Code vorliegt wird ausgeführt.
quelle
Strict-Transport-Security
Header ansehen : en.wikipedia.org/wiki/HTTP_Strict_Transport_Security<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
<match url=".*"/>
zu<match url="http://*.*" />
Für Benutzer von ASP.NET MVC. Sie können das RequireHttpsAttribute verwenden, um zu erzwingen, dass alle Antworten HTTPS sind:
Möglicherweise möchten Sie auch andere Maßnahmen ergreifen, um Ihre Website zu schützen:
Anti-Fälschungs-Token zur Verwendung von SSL / TLS erzwingen:
Cookies müssen standardmäßig HTTPS erfordern, indem Sie die Datei Web.config ändern:
Verwenden Sie das NWebSec.Owin NuGet-Paket und fügen Sie die folgende Codezeile hinzu, um die strikte Transportsicherheit (HSTS) 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 .
Verwenden Sie das NWebSec.Owin NuGet-Paket und fügen Sie die folgende Codezeile hinzu, um das Anheften von öffentlichen Schlüsseln (Public Key Pinning, HPKP) auf der gesamten Site zu aktivieren. Weitere Informationen hier und hier .
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
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
Um die Antwort von LazyOne zu ergänzen, finden Sie hier eine kommentierte Version der Antwort.
Löschen Sie alle anderen Regeln, die möglicherweise bereits auf diesem Server definiert wurden. Erstellen Sie eine neue Regel mit dem Namen "Alle Anforderungen an https umleiten". Verarbeiten Sie nach der Verarbeitung dieser Regel keine weiteren Regeln! Stimmen Sie mit allen eingehenden URLs überein. Überprüfen Sie dann, ob alle diese anderen Bedingungen erfüllt sind: HTTPS ist ausgeschaltet. Nun, das ist nur eine Bedingung (aber stellen Sie sicher, dass es wahr ist). Wenn dies der Fall ist, senden Sie eine permanente 301-Weiterleitung an den Client unter
http://www.foobar.com/whatever?else=the#url-contains
. Fügen Sie die Abfragezeichenfolge nicht am Ende hinzu, da dies die Abfragezeichenfolge duplizieren würde!Dies ist, was die Eigenschaften, Attribute und einige der Werte bedeuten.
MatchAll
) oder eine der Bedingungen wahr sein muss (MatchAny
); ähnlich wie AND vs OR.match
und dasconditions
alles wahr sind.redirect
(clientseitig) oderrewrite
(serverseitig) sein.https://
mit zwei Servervariablen.url
oder nicht; In diesem Fall setzen wir es auf false, da es{REQUEST_URI}
bereits enthalten ist.Die Servervariablen sind
{HTTPS}
das ist entwederOFF
oderON
.{HTTP_HOST}
istwww.mysite.com
und{REQUEST_URI}
schließt den Rest der URI ein, z/home?key=value
#fragment
(siehe Kommentar von LazyOne).Siehe auch: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
quelle
/home?key=value#fragment
) wird von Browsern nicht auf den Server festgelegt, da er lokal verwendet werden soll.http://www.example.com/members#oops
wird eine Anfrage gesendet, anhttp://www.example.com/members
die dann die HTTPS-Version weitergeleitet wirdhttps://www.example.com/members
- Browser erledigt den Rest)Die akzeptierte Antwort hat bei mir nicht funktioniert. Ich habe die Schritte in diesem Blog befolgt .
Ein wichtiger Punkt, der mir fehlte, war, dass ich das URL Rewrite Tool für IIS herunterladen und installieren musste. Ich habe es hier gefunden . Das Ergebnis war das Folgende.
quelle
Befolgen Sie in .Net Core die Anweisungen unter https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl
Fügen Sie in Ihrer startup.cs Folgendes hinzu:
Fügen Sie in der Datei startup.cs Folgendes hinzu, um Http zu Https umzuleiten
quelle
Die ausgezeichnete NWebsec- Bibliothek kann Ihre Anforderungen von HTTP auf HTTPS aktualisieren, indem sie das folgende
upgrade-insecure-requests
Tag verwendetWeb.config
:quelle
Ich durfte URL Rewrite nicht in meiner Umgebung installieren, daher habe ich einen anderen Pfad gefunden.
Durch Hinzufügen zu meiner web.config wurde der Fehler beim Umschreiben hinzugefügt und an IIS 7.5 gearbeitet:
Befolgen Sie dann die Anweisungen hier: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Ich habe die HTML-Datei erstellt, die die Umleitung ausführt (redirectToHttps.html):
Ich hoffe, jemand findet das nützlich, da ich nicht alle Teile an einem anderen Ort finden konnte.
quelle
Eine einfache Möglichkeit besteht darin, IIS anzuweisen, Ihre benutzerdefinierte Fehlerdatei für HTTP-Anforderungen zu senden. Die Datei kann dann eine Meta-Weiterleitung, eine JavaScript-Umleitung und Anweisungen mit Link usw. enthalten. Wichtig ist, dass Sie weiterhin "SSL erforderlich" für die Site (oder den Ordner) aktivieren können. Dies funktioniert.
quelle