Как заставить HTTPS использовать файл web.config

Я искал вокруг Google и StackOverflow, пытаясь найти решение для этого, но все они, похоже, относятся к ASP.NET и т. Д.

Обычно я запускаю Linux на своих серверах, но для этого одного клиента я использую Windows с IIS 7.5 (и Plesk 10). Это является причиной того, что я немного незнакома с файлами IIS и web.config . В файле .htaccess вы можете использовать условия перезаписи, чтобы определить, является ли протокол HTTPS и перенаправлен соответствующим образом. Есть ли простой способ достичь этого с помощью файла web.config или даже с помощью модуля « URL Rewrite », который я установил?

У меня нет опыта работы с ASP.NET, поэтому, если это задействовано в решении, пожалуйста, укажите четкие шаги по его реализации.

Причина, по которой я делаю это с помощью web.config, а не PHP, это то, что я хотел бы заставить HTTPS использовать все ресурсы на сайте.

8 Solutions collect form web for “Как заставить HTTPS использовать файл web.config”

Вам нужен модуль URL Rewrite, желательно v2 (у меня нет установленного v1, поэтому я не могу гарантировать, что он будет работать там, но он должен).

Вот пример такого web.config – он заставит HTTPS для ВСЕХ ресурсов (используя 301 Permanent Redirect):

 < ?xml version="1.0" encoding="UTF-8"?>                 

PS Это конкретное решение не имеет ничего общего с ASP.NET / PHP или любой другой технологией, поскольку оно выполняется только с использованием модуля перезаписи URL-адресов – он обрабатывается на одном из начальных / нижних уровней – до того, как запрос дойдет до точки, где ваш код выполняется.

Для тех, кто использует ASP.NET MVC. Вы можете использовать RequireHttpsAttribute, чтобы все ответы были HTTPS:

 GlobalFilters.Filters.Add(new RequireHttpsAttribute()); 

Другие вещи, которые вы также можете сделать, чтобы помочь защитить ваш сайт:

  1. Сила Anti-Forgery tokens для использования SSL / TLS:

     AntiForgeryConfig.RequireSsl = true; 
  2. Требовать, чтобы Cookies требовали HTTPS по умолчанию, изменив файл Web.config:

        
  3. Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода, чтобы включить Strict Transport Security (HSTS) по всему сайту. Не забудьте добавить директиву Preload ниже и отправить свой сайт на сайт предварительной загрузки HSTS . Дополнительная информация здесь и здесь . Обратите внимание: если вы не используете OWIN, существует метод Web.config, который вы можете прочитать на сайте NWebSec .

     // app is your OWIN IAppBuilder app in Startup.cs app.UseHsts(options => options.MaxAge(days: 720).Preload()); 
  4. Используйте пакет NWebSec.Owin NuGet и добавьте следующую строку кода, чтобы включить привязку открытого ключа (HPKP) по всему сайту. Дополнительная информация здесь и здесь .

     // app is your OWIN IAppBuilder app in Startup.cs app.UseHpkp(options => options .Sha256Pins( "Base64 encoded SHA-256 hash of your first certificate eg cUPcTAZWKaASuYWhhneDttWpY3oBAkE3h2+soZS7sWs=", "Base64 encoded SHA-256 hash of your second backup certificate eg M8HztCzM3elUxkcjR2S5P4hhyBNf6lHkmjAHKhpGPWE=") .MaxAge(days: 30)); 
  5. Включите схему https в любом используемом URL. Контент HTTP- безопасности контента (CSP) и целостность Subresource Integrity (SRI) не очень приятны, когда вы имитируете схему в некоторых браузерах. Лучше говорить о HTTPS. например

      
  6. Используйте шаблон проекта ASP.NET MVC Boilerplate Visual Studio для создания проекта со всем этим и многое другое. Вы также можете просмотреть код на GitHub .

Чтобы увеличить ответ LazyOne, вот аннотированная версия ответа.

             

Очистите все другие правила, которые могут быть уже определены на этом сервере. Создайте новое правило, которое мы назовем «Перенаправить все запросы на https». После обработки этого правила не обрабатывайте больше правил! Сопоставьте все входящие URL-адреса. Затем проверьте, соблюдены ли все эти условия: HTTPS выключен. Ну, это только одно условие (но убедитесь, что это правда). Если это так, отправьте 301 Постоянное redirect обратно клиенту по адресу http://www.foobar.com/whatever?else=the#url-contains . Не добавляйте строку запроса в конце этого, потому что она будет дублировать строку запроса!

Это то, что означает свойства, атрибуты и некоторые значения.

  • clear удаляет все правила сервера, которые мы могли бы наследовать.
  • правило определяет правило.
    • назовите произвольное (хотя и уникальное) имя для правила.
    • stopПроцесс , направлять ли запрос непосредственно в конвейер запроса IIS или сначала обрабатывать дополнительные правила.
  • когда запускается это правило.
    • url шаблон, по которому можно оценить URL-адрес
  • условия дополнительных условий о том, когда следует использовать это правило; условия обрабатываются только в том случае, если есть первое совпадение.
    • logicalGrouping , должны ли все условия быть истинными ( MatchAll ) или любое из условий должно быть истинным ( MatchAny ); аналогично И против ИЛИ.
  • add добавляет условие, которое должно быть выполнено.
    • введите вход, который оценивает условие; входные данные могут быть переменными сервера.
    • образцом, стандартом для которого является оценка ввода.
    • ignoreCase , имеет ли значение капитализация или нет.
  • действие, которое нужно делать, если match и его conditions верны.
    • тип обычно может быть redirect (на стороне клиента) или rewrite (на стороне сервера).
    • url, что производить в результате этого правила; в этом случае объедините https:// с двумя переменными сервера.
    • redirectType, какой HTTP-redirect использовать; это 301 Постоянный.
    • appendQueryString добавить ли строку запроса в конец результирующего url или нет; в этом случае мы устанавливаем его в false, потому что {REQUEST_URI} уже включает его.

Переменные сервера

  • {HTTPS} который OFF или ON .
  • {HTTP_HOST}{HTTP_HOST} , и
  • {REQUEST_URI} включает в себя остальную часть URI, например /home?key=value
    • браузер обрабатывает #fragment (см. комментарий от LazyOne).

См. Также: https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference

Принятый ответ не сработал для меня. Я последовал за шагами в этом блоге .

Ключевым моментом, который мне не хватало, было то, что мне нужно было загрузить и установить URL Rewrite Tool для IIS. Я нашел его здесь . В результате получилось следующее.

              

Отличная библиотека NWebsec может обновлять ваши запросы от HTTP до HTTPS, используя тег update-insecure upgrade-insecure-requests в Web.config :

          

Мне не разрешили устанавливать URL Rewrite в моей среде.

Итак, я нашел другой путь.

Добавление этого в мой web.config добавило ошибку перезаписи и работало на IIS 7.5

      

Затем, следуя советам здесь: https://www.sslshopper.com/iis7-redirect-http-to-https.html

Я создал html-файл, который выполняет redirect (redirectToHttps.html):

  Redirecting...     

Я надеюсь, что кто-то найдет это полезным, поскольку я не мог найти все части в одном месте в другом месте.

 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(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); 

Простым способом является передача IIS для отправки настраиваемого файла ошибок для HTTP-запросов. Затем файл может содержать мета-redirect, redirect JavaScript и инструкции со ссылкой и т. Д. Важно отметить, что вы по-прежнему можете проверить «Требовать SSL» для сайта (или папки), и это будет работать.

          
  • Ошибка входа для пользователя «IIS APPPOOL \ ASP.NET v4.0»
  • Разрешить анонимную проверку подлинности для одной папки в web.config?
  • Что получает приоритет, maxRequestLength или maxAllowedContentLength?
  • Указанный аргумент вышел за пределы допустимых значений. Имя параметра: сайт
  • Плюсы и минусы AppSettings vs applicationSettings (.NET app.config / Web.config)
  • Использовать преобразование web.config Visual Studio для отладки
  • Тайм-аут аутентификации форм против тайм-аута sessionState
  • Значение
  • Ошибка использования раздела, зарегистрированного как allowDefinition = 'MachineToApplication', превышающего уровень приложения
  • Как я могу использовать Web.debug.config на встроенном сервере отладки визуальной студии?
  • Добавление machineKey в web.config на веб-сайтах
  • Давайте будем гением компьютера.