Was ist die beste Methode, um HTTP Strict Transport Security auf einem IIS 7-Webserver zu aktivieren?
Kann ich einfach über die GUI den richtigen HTTP-Antwortheader hinzufügen oder sollte ich appcmd verwenden und wenn ja, welche Schalter?
Was ist die beste Methode, um HTTP Strict Transport Security auf einem IIS 7-Webserver zu aktivieren?
Kann ich einfach über die GUI den richtigen HTTP-Antwortheader hinzufügen oder sollte ich appcmd verwenden und wenn ja, welche Schalter?
Antworten:
IIS kann Antworten benutzerdefinierte Header hinzufügen . Dies scheint der einfachste Weg zu sein, dies zu tun.
Gemäß der Dokumentation auf IIS.net können Sie diese Header über den IIS-Manager hinzufügen:
quelle
Auf diese Weise können wir sowohl die HTTP-Umleitung als auch den Strict-Transport-Security-Header zu HTTPS-Antworten mit einer einzigen IIS-Site hinzufügen (das URL-Rewrite-Modul muss installiert sein):
quelle
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
um einen Pass auf hstspreload.org zu bekommenhttps://somedomain.com/https://somedomain.com/relatedpath
wird der Pfad gelöscht.Um die Antwort von voretaq7 zu ergänzen , können Sie auch die Datei Web.config verwenden (Hinweis: Nur für SSL-Sites, da der Header für HTTP- und HTTPS-Antworten hinzugefügt wird, was der RFC 6797-Spezifikation entspricht. Bitte beachten Sie die Erklärung unten) - fügen Sie einen Block wie folgt hinzu:
Offensichtlich haben Sie möglicherweise bereits einen
system.webServer
Block in Ihrer Web.config, fügen Sie diesen also hinzu, falls dies der Fall ist. Wir ziehen es vor, die Dinge in der Web.config zu behandeln, anstatt in der GUI, da dies bedeutet, dass die Konfigurationsänderungen in unser Git-Repository übernommen werden können.Wenn Sie die HTTP-zu-SSL-Umleitung wie von Greg Askew erwähnt durchführen möchten , ist dies möglicherweise einfacher, wenn Sie eine separate Website in IIS verwenden. So gehen wir mit der Anforderung von SSL für einige Client-Sites um. Diese Site enthält nur eine HTTP-Umleitung und einige Korrekturen zur Offenlegung von Informationen in der Datei "Web.config":
Dies ist aus mehreren Gründen unsere bevorzugte Lösung. Wir können umgeleiteten Datenverkehr problemlos separat protokollieren (da er sich in einem anderen IIS-Protokoll befindet). In Global.asax.cs ist kein weiterer Code enthalten (wir haben keinen Code) drin, was für eine Umbraco-Site etwas praktischer ist) und vor allem bedeutet dies, dass sich die gesamte Konfiguration noch in unserem GIT-Repo befindet.
Bearbeitet, um hinzuzufügen: Um RFC 6797 zu erfüllen , darf der
Strict-Transport-Security
benutzerdefinierte Header NICHT zu Anforderungen hinzugefügt werden, die über unverschlüsseltes HTTP erfolgen. Um RFC6797-kompatibel zu sein, MÜSSEN Sie zwei Standorte in IIS haben, wie ich nach dem ersten Codeblock beschrieben habe. Wie Chris betont, enthält RFC 6797:Daher würde das Senden des
Strict-Transport-Security
Kunden-Headers als Antwort auf eine Nicht-SSL-Anforderung nicht der Spezifikation entsprechen.quelle
Ich würde das Beispiel aus dem Wikipedia-Link verwenden, auf den Sie verwiesen haben, und die Aktivität in global.asax für die Site ausführen. Dies ermöglicht es, die Anforderung zu einer HTTPS - URL umgeleitet, und dann den Header in die Antwort einzufügen.
Dies liegt daran, dass der HSTS-Header ignoriert werden muss, wenn er nicht in einer https-Antwort enthalten ist.
quelle
Dies scheint eine ziemlich ausfallsichere Methode zu sein. Fügen Sie diesen Code in Global.asax hinzu - das Application_BeginRequest-Ereignis wird zuerst im Asp.net-Anforderungslebenszyklus ausgelöst: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs. 110) .aspx
Laut Spezifikation dürfen http-Anforderungen nicht mit dem Header antworten, sodass dieser Code ihn nur für https-Anforderungen hinzufügt. Das Höchstalter ist in Sekunden angegeben, und es ist normalerweise eine gute Idee, hier einen großen Wert anzugeben (IE - 31536000 gibt an, dass auf der Site SSL nur für die nächsten 365 Tage ausgeführt wird).
quelle
Anhand des von Doug Wilson bereitgestellten Beispiels habe ich die folgenden beiden PowerShell-Funktionen erstellt, um Regeln zum Umleiten von URLs zu HTTPS und zum Hinzufügen von HSTS-Headern hinzuzufügen.
Diese wurden unter Windows 2012 und Windows 2012 R2 getestet.
Sie müssen lediglich den Namen der Website angeben. Sie können den Regeln optional einen anderen Namen geben, wenn Sie die Standardeinstellungen nicht mögen.
Beachten Sie, dass die Servervariablen aus meinen Tests zur Zulassungsliste hinzugefügt werden müssen, bevor sie in den Antwortköpfen angezeigt werden. Die Funktionen erledigen das für Sie.
BEARBEITEN: Siehe Verweis auf Url Rewrite für HTTP-Header hier: http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
quelle
Laut den Herstellern des IIS-Moduls für strenge HTTP-Transportsicherheit entspricht das Hinzufügen des benutzerdefinierten Headers nicht dem Entwurf der Spezifikation (RFC 6797).
Sie müssten dieses IIS-Modul tatsächlich installieren , um HSTS auf IIS 7 zu aktivieren.
Update 26. Oktober 2014 : Dank des Kommentars unten habe ich die Modulseite noch einmal gelesen und speziell den Teil, der die Verwendung des Moduls durch das Hinzufügen von benutzerdefinierten Headern rechtfertigt.
Ein HSTS-Host DARF das STS-Header-Feld NICHT in HTTP-Antworten enthalten, die über einen nicht sicheren Transport übertragen werden.
Wenn Sie sicherstellen, dass die Header nur in HTTPS und NICHT in HTTP hinzugefügt werden, benötigen Sie dieses Modul nicht und können die Antwort von Doug Wilson verwenden. Verwenden Sie die Antwort von Owen Blacker nicht, da die https-Bedingung nicht erfüllt ist.
quelle
Dies kann durch Hinzufügen des folgenden Blocks in Web.Config erfolgen:
Wir müssen auf IIS konfigurieren, das die Möglichkeit hat, benutzerdefinierte Header für die Antwort festzulegen:
quelle
Um es hinzuzufügen, ich sehe in den Kommentaren 2 Leute, die über 500 Fehler sprechen, wenn Sie dies tun. Ich hatte das
Wenn in IIS ein Fehler von 500 angezeigt wird, liegt dies möglicherweise daran, dass Sie die Regel sowohl auf der obersten Ebene als auch auf der Websiteebene als geerbt festgelegt haben.
z.B
IIS / Der Browser scheint Ihnen keine Informationen darüber zu geben, dass Sie dies getan haben, unabhängig von Ihren Einstellungen für die Fehlerbehandlung
quelle