IIS Express по умолчанию использует порт 44300 для https при включении SSL
При первоначальной настройке IIS Express для включения SSL порт по умолчанию принимает значение 44300. К сожалению, когда я пытаюсь получить доступ к своему сайту в on https://localhost/
, он не работает, если я не использую номер порта 44300 - https://localhost:44300/
.
Ссылки генерируются следующим образом:
<%= Html.ActionLink("Index", "Index", "Home", new { @action = "https://" + Request.Hostname + Url.Action("Index", "Home") }) %>
Хотя и уродливое решение, ключевое слово @action
может переопределить созданный маршрут, но это означает, что приложение, по-видимому, должно быть осведомлено о любых нестандартных портах (например, 44300).
Проблема с это означает, что я буду писать что-то, чтобы решить проблему, которая возникнет только в среде разработки.
Таков мой вопрос... Как изменить порт на 443 и сделать IIS Express похожим на него?
Конфигурация для моего сайта приведена ниже:
<site name="MySite" id="2" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="C:InetpubMySite" />
</application>
<bindings>
<binding protocol="http" bindingInformation=":80:" />
<binding protocol="https" bindingInformation=":44300:" />
</bindings>
</site>
Заранее большое спасибо.
Обновление:
На этот вопросответил Дивья на форумах IIS.
5 ответов:
На этот вопросответил Дивья на форумах IIS.
Как только вы включаете SSL для веб-сайта в WebMatrix, он по умолчанию принимает порт 44300 и выполняет все привязки в фоновом режиме. Я надеюсь, что вы попытались изменить этот порт на 443 в файле конфигурации. После того, как это сделано и сохранено, вам также нужно изменить привязку в http.sys. Вам нужно будет удалить существующую запись для порта 44300 и добавить запись для порта 443. Для этого вы могли бы использовать httpcfg (относится к/параметр Win2003) или 'netsh для протоколов HTTP' (поддерживается удаление спама/Win2K8/с Win7). Вот команды для netsh:
1) Получить appid и certhash для существующей записи 44300 (I предположим, вы собираетесь использовать тот же сертификат, который WebMatrix устанавливается по умолчанию. Если вы хотите изменить сертификат, а также, получить хэш сертификата сертификата из сертификата магазин):
netsh http show sslcert
. В выходных данных найдите запись для порт 44300 и копия certhash и appID.2) Удалить запись для 44300:
netsh http delete sslcert ipport=0.0.0.0:44300
3) добавьте новую запись для порта 443 с копированием certhash и appID в шаге 1.
netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid=<appid>
После настройки записи в http.sys, вам нужно перезапустить http служба для вступления изменений в силу.
net stop http
net start http
Как отметили другие, есть несколько хороших способов получения сертификатов SSL.
netsh http show sslcert > output.txt
Или (мой предпочтительный метод):
netsh http show sslcert | clip
Порт 44300 является последовательным: 00 означает, что это первое приложение, которое вы настроили как включенное SSL; 01 будет вторым и так далее.
Поскольку я также требую, чтобы мой сайт работал только в HTTPS, добавив глобальный атрибут[RequireHttps]
, у меня возникли некоторые проблемы с отладкой. При запуске он автоматически перенаправлялся наhttps://localhost/
Чтобы исправить эту проблему при отладке веб-сайта , я просто создаю новый
RequireHttpsAttribute
, который указывает порт#if DEBUG public class RequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute { protected override void HandleNonHttpsRequest(System.Web.Mvc.AuthorizationContext filterContext) { base.HandleNonHttpsRequest(filterContext); var result = (RedirectResult)filterContext.Result; var uri = new UriBuilder(result.Url); uri.Port = 44301; filterContext.Result = new RedirectResult(uri.ToString()); } } #endif
Используйте этот класс, когда только отладка. При развертывании в IIS7 следует использовать перезапись Url для перенаправления на HTTPS.
Поскольку я потратил много времени на эту тему, я хотел бы поделиться своим открытием. Я перепечатываю сегмент из моего другого поста минус код. Некоторые предпосылки и объяснение:
==========================================
После исследования aroud я смог решить эту проблему с помощью IIS Express и переопределения метода класса контроллера
OnAuthorization
(Ref#1). Я также пошел по маршруту, рекомендованному Ганзельманом (Ссылка № 2). Однако я не был полностью удовлетворен этим два решения по двум причинам:Таким образом, я пришел к этому решению, которое является довольно упрощенным со следующими условиями:
- Ref#1's
OnAuthorization
работает только на уровне действия, а не на уровне класса контроллера- Ref#2 требует много настроек (Win7 SDK для
makecert
),netsh
и, чтобы использовать порт 80 и порт 443, мне нужно запустить VS2010 как администратор, на что я хмурюсь.
Я хочу иметь возможность использовать атрибут
RequireHttps
в Класс контроллера или уровень действияЯ хочу, чтобы MVC использовал HTTPS, когда атрибут
RequireHttps
присутствует, и использовал HTTP, если он отсутствуетЯ не хочу запускать Visual Studio от имени администратора
Я хочу иметь возможность использовать любые порты HTTP и HTTPS, назначенные IIS Express
Я могу повторно использовать самозаверяющий сертификат SSL IIS Express, и мне все равно, если я вижу недопустимый SSL Подсказка
=========================================
Вы можете найти мое решение / код здесь = = > ASP.NET MVC RequireHttps только в производстве
Ответ дан верно, но если у вас все еще есть проблемы с настройкой IIS Express для обслуживания вашего сайта с http и https на стандартных портах, вот хороший учебник, который проведет вас шаг за шагом:
Http://www.lansweeper.com/kb/54/How-to-configure-SSL-in-IIS-Express.html
В моем случае я случайно удалил сертификат IIS Express. Я думаю, что он генерируется при первом использовании SSL в Visual Studio (F4 на выбранном проекте для получения окна свойств и проверки Флажок "SSS включен"). Этот учебник научил меня, как создать сертификат и исправить его.
Создать класс
public class RequireSSLAttribute: RequireHttpsAttribute { protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) { base.HandleNonHttpsRequest(filterContext); if (filterContext.HttpContext.Request.Url.Host.ToLower().Equals("localhost")) { // redirect to HTTPS version of page string localhostSSLPort = System.Configuration.ConfigurationManager.AppSettings["localhostSSLPort"]; string url = "https://" + filterContext.HttpContext.Request.Url.Host + ":" + localhostSSLPort + filterContext.HttpContext.Request.RawUrl; filterContext.Result = new RedirectResult(url); } } }
И внутри вашего web config добавьте что-то вроде этого
<appSettings> <add key="localhostSSLPort" value="44300"/> </appSettings>
И затем вы используете его как
[RequireSSL] public class AdminController : Controller { ... }