Как заставить HTTPS с помощью интернета.конфигурационный файл
Я искал вокруг Google и StackOverflow, пытаясь найти решение этой проблемы, но все они относятся к ASP.NET и т. д.
Я обычно запускаю Linux на своих серверах, но для этого одного клиента я использую Windows с IIS 7.5 (и Plesk 10). Это и есть причина, почему я немного незнакомы с IIS и web.конфигурации файлы. В Ан .htaccess файл вы можете использовать условия перезаписи, чтобы определить, является ли протокол HTTPS и перенаправить соответственно. Есть простой способ для достижения этой цели используется веб.конфигурационный файл, или даже с помощью 'URL переписать' модуль, который я установил?
У меня есть нет опыта работы с ASP.NET поэтому, если это связано с решением, пожалуйста, включите четкие шаги по реализации.
причина, по которой я делаю это с помощью интернета.config и не PHP - это то, что я хотел бы заставить HTTPS на всех активах на сайте.
8 ответов:
вам нужен модуль перезаписи URL, предпочтительно v2 (у меня нет установленного v1, поэтому я не могу гарантировать, что он будет работать там, но он должен).
вот пример такой сети.config -- это заставит HTTPS для всех ресурсов (используя 301 постоянный редирект):
<?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>П. С. Это конкретное решение не имеет ничего общего с ASP.NET/PHP или любая другая технология, как это делается с помощью модуля перезаписи URL только -- он обрабатывается на одном из начальных / более низких уровней -- прежде чем запрос дойдет до точки, где ваш код будет выполнен.
для тех, кто использует ASP.NET MVC. Вы можете использовать RequireHttpsAttribute чтобы заставить все ответы быть HTTPS:
GlobalFilters.Filters.Add(new RequireHttpsAttribute());другие вещи, которые вы также можете сделать, чтобы помочь защитить вашего сайта:
принудительные токены защиты от подделки для использования SSL / TLS:
AntiForgeryConfig.RequireSsl = true;требовать, чтобы куки требовали HTTPS по умолчанию, изменив веб.конфигурационный файл:
<system.web> <httpCookies httpOnlyCookies="true" requireSSL="true" /> </system.web>использовать NWebSec.Долг пакет NuGet и добавьте следующую строку кода, чтобы включить строгую безопасность транспорта (HSTS) по всему сайту. Не забудьте добавить директиву предварительной загрузки ниже и отправить свой сайт в сайт предварительной загрузки HSTS. Дополнительная информация здесь и здесь. Обратите внимание, что если вы не используете OWIN, есть веб.config метод, который вы можете прочитать на на NWebSec сайт.
// app is your OWIN IAppBuilder app in Startup.cs app.UseHsts(options => options.MaxAge(days: 720).Preload());использовать NWebSec.Owin NuGet package и добавьте следующую строку кода, чтобы включить закрепление открытого ключа (HPKP) на сайте. Дополнительная информация здесь и здесь.
// 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));включают в себя схему HTTPS в URL-адрес используется. политика безопасности контента (CSP) HTTP заголовок и целостность ресурсов (Шри) не играйте хорошо, когда вы имитируете схему в некоторых браузерах. Лучше быть явным о HTTPS. например,
<script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.4/bootstrap.min.js"> </script>используйте ASP.NET MVC Boilerplate шаблон проекта Visual Studio для создания проекта со всем этим и многое другое встроено. Вы также можете просмотреть код на GitHub.
чтобы увеличить ответ LazyOne, вот аннотированная версия ответа.
<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>очистите все остальные правила, которые могут быть уже определены на этом сервере. Создайте новое правило, которое мы будем называть "перенаправлять все запросы на https". После обработки этого правила, не обрабатывайте больше никаких правил! Сопоставьте все входящие URL-адреса. Затем проверьте, выполняются ли все эти другие условия: HTTPS отключен. Ну, это только одно условие (но убедитесь, что это правда). Если это так, отправьте 301 постоянный редирект обратно к клиенту по адресу
http://www.foobar.com/whatever?else=the#url-contains. Не добавляйте строку запроса в конце этого, потому что она будет дублировать строку запроса!это свойства, атрибуты, и некоторые значения.
- ясный удаляет все правила сервера, которые мы могли бы унаследовать в противном случае.
- правила определяет правило.
- имя произвольное (хотя и уникальное) имя для правило.
- stopProcessing следует ли немедленно переслать запрос в конвейер запросов IIS или сначала обработать дополнительные правила.
- матч когда запускать это правило.
- url шаблон, по которому можно оценить URL
- условия дополнительные условия о том, когда запускать это правило; условия обрабатываются только в том случае, если есть первый матч.
- logicalGrouping должны ли все условия быть истинными (
MatchAll) или любое из условий должно быть истинным (MatchAny); аналогично и против или.- добавить добавляет условие, которое должно выполняться.
- input входные данные, которые оценивает условие; входные данные могут быть переменными сервера.
- pattern стандарт против которого к оцените входные данные.
- ignoreCase имеет ли значение капитализация или нет.
- действие что делать, если
matchиconditionsвсе верно.
- тип вообще может быть
redirect(на стороне клиента) илиrewrite(на стороне сервера).- url что производить в результате этого правила; в этом случае конкатенация
https://С двумя серверами переменная.- redirectType какой http-редирект использовать;это 301 постоянный.
- appendQueryString следует ли добавить строку запроса в конце результирующего
urlили нет; в этом случае, мы устанавливаем его в false, потому что{REQUEST_URI}уже включает его.переменные сервера
{HTTPS}что-либоOFFилиON.{HTTP_HOST}иwww.mysite.comи{REQUEST_URI}включает в себя остальную часть URI, например/home?key=value
- браузер обрабатывает
#fragment(см. комментарий от LazyOne).Смотрите также: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference
принятый ответ не работа для меня. Я следовал шагам на этом блог.
ключевым моментом, который отсутствовал для меня, было то, что мне нужно было загрузить и установить инструмент перезаписи URL для IIS. Я нашел его здесь. результат был следующий.
<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>
отличный NWebsec библиотека может обновить ваши запросы с HTTP на HTTPS, используя его
upgrade-insecure-requestsв тегWeb.config:<nwebsec> <httpHeaderSecurityModule> <securityHttpHeaders> <content-Security-Policy enabled="true"> <upgrade-insecure-requests enabled="true" /> </content-Security-Policy> </securityHttpHeaders> </httpHeaderSecurityModule> </nwebsec>
мне не разрешили установить перезапись URL в моей среде.
Итак, я нашел другой путь.
добавление этого в мой веб.config добавил ошибку перезаписи и работал на 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>затем, следуя совету здесь:https://www.sslshopper.com/iis7-redirect-http-to-https.html
Я создал html-файл, который выполняет перенаправление (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>Я надеюсь, что кто-то находит это полезным, как я не удалось найти все части в одном месте в другом месте.
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);
A простой способ это сказать IIS, чтобы отправить свой пользовательский файл ошибок для HTTP-запросов. Затем файл может содержать перенаправление meta, перенаправление JavaScript и инструкции со ссылкой и т. д... Важно отметить, что вы все еще можете проверить "требуется SSL" для сайта (или папки), и это будет работать.
</configuration> </system.webServer> <httpErrors> <clear/> <!--redirect if connected without SSL--> <error statusCode="403" subStatusCode="4" path="errors3.4_requiressl.html" responseMode="File"/> </httpErrors> </system.webServer> </configuration>
Comments