Ich habe nach Google und StackOverflow gesucht, um eine Lösung für dieses Problem zu finden, 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). Aus diesem Grund bin ich etwas unbekannt mit IIS und web.config -Dateien. In einer .htaccess
-Datei können Sie die Umschreibungsbedingungen verwenden, um zu ermitteln, ob das Protokoll HTTPS ist, und entsprechend umzuleiten. Gibt es einen einfachen Weg, um dies mit einer web.config-Datei oder sogar mit dem Modul 'URL Rewrite' zu erreichen, das ich installiert habe?
Ich habe keine Erfahrung mit ASP.NET. Wenn dies also an der Lösung beteiligt ist, geben Sie bitte klare Schritte zur Implementierung an.
Der Grund, warum ich dies mit der web.config und nicht PHP mache, ist, dass ich HTTPS für alle Assets innerhalb der Site erzwingen möchte.
Sie benötigen ein URL-Rewrite-Modul, vorzugsweise v2 (ich habe keine v1 installiert, daher kann ich nicht garantieren, dass es dort funktioniert, aber es sollte funktionieren).
Hier ein Beispiel für eine solche web.config - es wird HTTPS für ALLE Ressourcen erzwungen (unter Verwendung von 301 Permanent Redirect):
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<clear />
<rule name="Redirect to https" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
P.S. .__ Diese spezielle Lösung hat nichts mit ASP.NET/PHP oder einer anderen Technologie zu tun, da nur das Modul zum Umschreiben von URLs verwendet wird - es wird auf einer der anfänglichen/niedrigeren Ebenen verarbeitet, bevor die Anforderung an das Punkt, an dem Ihr Code ausgeführt wird.
Für diejenigen, die ASP.NET MVC verwenden. Mit dem RequireHttpsAttribute können Sie alle Antworten als HTTPS erzwingen:
GlobalFilters.Filters.Add(new RequireHttpsAttribute());
Möglicherweise möchten Sie auch andere Dinge tun, um Ihre Website zu schützen:
Anti-Forgery-Token zur Verwendung von SSL/TLS erzwingen:
AntiForgeryConfig.RequireSsl = true;
Erfordern Cookies, um standardmäßig HTTPS anzufordern, indem Sie die Datei Web.config ändern:
<system.web>
<httpCookies httpOnlyCookies="true" requireSSL="true" />
</system.web>
Verwenden Sie das NuGet-Paket NWebSec.Owin, und fügen Sie die folgende Codezeile hinzu, um Strict Transport Security (HSTS) an allen Standorten zu aktivieren. Vergessen Sie nicht, die Preload-Anweisung unten hinzuzufügen und Ihre Site an die HSTS Preload-Site zu senden. Weitere Informationen hier und hier . Wenn Sie nicht OWIN verwenden, gibt es eine Web.config-Methode, die Sie auf der Site NWebSec nachlesen können.
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHsts(options => options.MaxAge(days: 720).Preload());
Verwenden Sie das NuWeb-Paket NWebSec.Owin und fügen Sie die folgende Codezeile hinzu, um das Public Key Pinning (HPKP) für den gesamten Standort zu aktivieren. Weitere Informationen hier und hier .
// app is your OWIN IAppBuilder app in Startup.cs
app.UseHpkp(options => options
.Sha256Pins(
"Base64 encoded SHA-256 hash of your first certificate e.g. cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=",
"Base64 encoded SHA-256 hash of your second backup certificate e.g. M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=")
.MaxAge(days: 30));
Fügen Sie das https-Schema in eine beliebige URL ein. Content Security Policy (CSP) HTTP-Header und Subresource Integrity (SRI) spielen Nice nicht, wenn Sie das Schema in einigen Browsern nachahmen. Es ist besser, explizit über HTTPS zu sprechen. z.B.
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js">
</script>
Verwenden Sie die Projektvorlage " ASP.NET MVC Boilerplate Visual Studio", um ein Projekt mit all dem und vielem mehr zu erstellen. Sie können den Code auch unter GitHub anzeigen.
Um die Antwort von LazyOne zu erweitern, ist hier eine kommentierte Version der Antwort.
<rewrite>
<rules>
<clear />
<rule name="Redirect all requests to https" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action
type="Redirect" url="https://{HTTP_Host}{REQUEST_URI}"
redirectType="Permanent" appendQueryString="false" />
</rule>
</rules>
</rewrite>
Löschen Sie alle anderen Regeln, die möglicherweise bereits auf diesem Server definiert wurden. Erstellen Sie eine neue Regel, die als "Alle Anfragen an https umleiten" bezeichnet wird. Verarbeiten Sie nach der Bearbeitung dieser Regel keine weiteren Regeln mehr! Passen Sie alle eingehenden URLs an. Prüfen Sie dann, ob alle anderen Bedingungen erfüllt sind: HTTPS ist deaktiviert. Nun, das ist nur eine Bedingung (aber stellen Sie sicher, dass es wahr ist). Wenn dies der Fall ist, senden Sie eine 301 Dauerumleitung an den Client unter http://www.foobar.com/whatever?else=the#url-contains
zurück. Fügen Sie die Abfragezeichenfolge nicht am Ende hinzu, da dies die Abfragezeichenfolge duplizieren würde!
Dies bedeuten die Eigenschaften, Attribute und einige der Werte.
MatchAll
) oder eine der Bedingungen muss wahr sein (MatchAny
); ähnlich wie AND vs OR. match
und ihre conditions
alle wahr sind .redirect
(clientseitig) oder rewrite
(serverseitig) sein. https://
mit zwei Servervariablen.url
hinzugefügt werden soll oder nicht. In diesem Fall setzen wir es auf false, da der {REQUEST_URI}
es bereits enthält.Die Servervariablen sind
{HTTPS}
, der entweder OFF
oder ON
ist. {HTTP_Host}
ist www.mysite.com
und {REQUEST_URI}
enthält den Rest der URI, z. /home?key=value
#fragment
(siehe Kommentar von LazyOne).Siehe auch: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-referenz
Die akzeptierte Antwort hat bei mir nicht funktioniert. Ich folgte den Schritten auf diesem Blog .
Ein wichtiger Punkt, der mir fehlte, war, dass ich das URL Rewrite Tool für IIS herunterladen und installieren musste. Ich fand es hier . Das Ergebnis war das folgende.
<rewrite>
<rules>
<remove name="Http to Https" />
<rule name="Http to Https" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<serverVariables />
<action type="Redirect" url="https://{HTTPS_Host}{REQUEST_URI}" />
</rule>
</rules>
</rewrite>
In Dot Net Core, follow the instructions at https://docs.Microsoft.com/en-us/aspnet/core/security/enforcing-ssl
***In your startup.cs add the following,***
// Requires using Microsoft.AspNetCore.Mvc;
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});`enter code here`
***To redirect Http to Https, add the following in the startup.cs***
// Requires using Microsoft.AspNetCore.Rewrite;
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
var options = new RewriteOptions()
.AddRedirectToHttps();
app.UseRewriter(options);
Es war mir nicht gestattet, URL Rewrite in meiner Umgebung zu installieren.
Also habe ich einen anderen Weg gefunden.
Das Hinzufügen zu meiner web.config fügte den Fehler umschreiben hinzu und arbeitete an IIS 7.5
<system.webServer>
<httpErrors errorMode="Custom" defaultResponseMode="File" defaultPath="C:\WebSites\yoursite\" >
<remove statusCode="403" subStatusCode="4" />
<error statusCode="403" subStatusCode="4" responseMode="File" path="redirectToHttps.html" />
</httpErrors>
Folgen Sie dann den Ratschlägen hier: https://www.sslshopper.com/iis7-redirect-http-to-https.html
Ich habe die HTML-Datei erstellt, die die Weiterleitung ausführt (redirectToHttps.html):
<html>
<head><title>Redirecting...</title></head>
<script language="JavaScript">
function redirectHttpToHttps()
{
var httpURL= window.location.hostname + window.location.pathname + window.location.search;
var httpsURL= "https://" + httpURL;
window.location = httpsURL;
}
redirectHttpToHttps();
</script>
<body>
</body>
</html>
Ich hoffe, das findet jemand nützlich, da ich nicht alle Teile an einem anderen Ort finden konnte.
Die ausgezeichnete NWebsec - Bibliothek kann Ihre Anforderungen mithilfe des upgrade-insecure-requests
-Tags innerhalb von Web.config
von HTTP auf HTTPS aktualisieren
<nwebsec>
<httpHeaderSecurityModule>
<securityHttpHeaders>
<content-Security-Policy enabled="true">
<upgrade-insecure-requests enabled="true" />
</content-Security-Policy>
</securityHttpHeaders>
</httpHeaderSecurityModule>
</nwebsec>