Jak najlepiej włączyć HTTP Strict Transport Security na serwerze sieci Web IIS 7?
Czy mogę po prostu przez GUI i dodać odpowiedni nagłówek odpowiedzi HTTP, czy powinienem używać appcmd, a jeśli tak, jakie przełączniki?
Jak najlepiej włączyć HTTP Strict Transport Security na serwerze sieci Web IIS 7?
Czy mogę po prostu przez GUI i dodać odpowiedni nagłówek odpowiedzi HTTP, czy powinienem używać appcmd, a jeśli tak, jakie przełączniki?
Odpowiedzi:
IIS ma możliwość dodawania niestandardowych nagłówków do odpowiedzi . Wydaje się, że jest to najłatwiejszy sposób.
Zgodnie z dokumentacją na stronie IIS.net można dodać te nagłówki za pomocą Menedżera IIS:
źródło
Dzięki temu możemy obsłużyć zarówno przekierowanie HTTP, jak i dodać nagłówek Strict-Transport-Security do odpowiedzi HTTPS za pomocą pojedynczej witryny IIS (moduł Rewrite URL musi być zainstalowany):
źródło
<action type="Rewrite" value="max-age=31536000 ;includeSubDomains; preload" />
uzyskać przepustkę na hstspreload.orghttps://somedomain.com/https://somedomain.com/relatedpath
a wynik jest taki, że ścieżka została porzucona.Aby uzupełnić odpowiedź voretaq7 , możesz to zrobić również za pomocą pliku Web.config (Uwaga: do użytku tylko w witrynach SSL, ponieważ doda nagłówek dla odpowiedzi HTTP i HTTPS, co jest niezgodne ze specyfikacją RFC 6797, zobacz wyjaśnienie poniżej) - dodaj blok w następujący sposób:
Oczywiście możesz mieć już
system.webServer
blok w pliku Web.config, więc dodaj to do tego, jeśli tak. Wolimy obsługę rzeczy w Web.config niż w GUI, ponieważ oznacza to, że zmiany konfiguracji mogą zostać zatwierdzone w naszym repozytorium Git.Jeśli chcesz obsłużyć przekierowanie HTTP na SSL, jak wspomniał Greg Askew , możesz łatwiej to zrobić z osobną witryną w IIS. W ten sposób radzimy sobie z wymaganiem protokołu SSL w przypadku niektórych witryn klienckich. Ta witryna zawiera tylko przekierowanie HTTP i niektóre poprawki ujawniania informacji , wszystko w pliku Web.config:
Jest to nasze preferowane rozwiązanie z kilku powodów - możemy łatwo rejestrować przekierowany ruch osobno (ponieważ znajduje się w innym dzienniku IIS), nie wymaga więcej kodu w Global.asax.cs (nie mamy żadnego kodu tam, co jest nieco wygodniejsze dla witryny Umbraco) i, co ważne, oznacza to, że cała konfiguracja jest nadal przechowywana w naszym repozytorium GIT.
Edytowane w celu dodania: Aby było jasne, aby zachować zgodność z RFC 6797 , NIE WOLNO dodawać
Strict-Transport-Security
niestandardowego nagłówka do żądań wysyłanych przez niezaszyfrowany HTTP. Aby być zgodnym z RFC6797, MUSISZ mieć dwie witryny w IIS, jak opisałem po pierwszym bloku kodu. Jak podkreśla Chris , RFC 6797 obejmuje:więc wysłanie
Strict-Transport-Security
nagłówka klienta w odpowiedzi na żądanie inne niż SSL nie byłoby zgodne ze specyfikacją.źródło
Chciałbym skorzystać z przykładu z linku z Wikipedii, do którego się odwołałeś, i wykonać działanie w global.asax dla witryny. Umożliwia to przekierowanie żądania do adresu URL https, a następnie wstawienie nagłówka do odpowiedzi.
Wynika to z faktu, że nagłówek HSTS musi zostać zignorowany, jeśli nie znajduje się w odpowiedzi https.
źródło
To wydaje się być całkiem bezpiecznym sposobem na zrobienie tego. Dodaj ten kod do Global.asax - zdarzenie Application_BeginRequest jest uruchamiane najpierw w cyklu życia żądania Asp.net: http://msdn.microsoft.com/en-us/library/system.web.httpapplication.beginrequest(v=vs. 110) .aspx
Zgodnie ze specyfikacją żądania HTTP nie mogą odpowiadać nagłówkiem - więc ten kod dodaje go tylko do żądań https. Maksymalny wiek to liczba sekund i zwykle dobrym pomysłem jest umieszczenie tutaj dużej wartości (IE - 31536000 wskazuje, że witryna będzie obsługiwać SSL tylko przez następne 365 dni)
źródło
Korzystając z przykładu podanego przez Douga Wilsona, stworzyłem następujące dwie funkcje PowerShell, aby dodać reguły przepisywania adresów URL w celu przekierowania do HTTPS i dodawania nagłówków HSTS.
Zostały one przetestowane w systemach Windows 2012 i Windows 2012 R2.
Wszystko, co musisz zrobić, to podać nazwę strony internetowej. Opcjonalnie możesz nadać regułom inną nazwę, jeśli nie podoba Ci się wartość domyślna.
Jedną z rzeczy, na które należy zwrócić uwagę, jest to, że z moich testów Zmienne Serwerowe należy dodać do listy dozwolonych, zanim znajdą się w nagłówkach odpowiedzi. Funkcje zrobią to za Ciebie.
EDYCJA: Zobacz odniesienie do przepisywania adresów URL dla nagłówków HTTP tutaj: http://www.iis.net/learn/extensions/url-rewrite-module/setting-http-request-headers-and-iis-server-variables
źródło
Według twórców modułu HTTP Strict Transport Security IIS samo dodanie niestandardowego nagłówka nie jest zgodne ze szkicową specyfikacją (RFC 6797).
W rzeczywistości należy zainstalować ten moduł IIS, aby włączyć HSTS w IIS 7.
Aktualizacja 26 okt 2014 : Dzięki komentatorowi ponownie przeczytałem stronę modułu, a konkretnie tę część, która uzasadnia użycie modułu zamiast dodawania niestandardowych nagłówków.
Host HSTS NIE MOŻE zawierać pola nagłówka STS w odpowiedziach HTTP przesyłanych niezabezpieczonym transportem.
Jeśli dodasz nagłówki tylko w HTTPS, a NIE w HTTP, nie potrzebujesz tego modułu i możesz użyć odpowiedzi Douga Wilsona. Nie używaj odpowiedzi Owena Blackera, ponieważ nie ma on warunku https.
źródło
Można to zrobić, dodając następujący blok w Web.Config:
Musimy skonfigurować w IIS, który ma możliwość dostosowywania nagłówków do odpowiedzi:
źródło
Żeby dodać, widzę w komentarzach 2 osoby mówiące o 500 błędach, kiedy to robisz. Miałem to
Jeśli w usługach IIS pojawi się błąd 500, może to oznaczać, że dodałeś regułę zarówno na najwyższym poziomie, ustawiono na odziedziczony, jak i na poziomie witryny.
na przykład
Usługi IIS / Przeglądarka nie wydają żadnych informacji o tym, co zrobiłeś, niezależnie od ustawień obsługi błędów
źródło