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 35

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). Однако я не был полностью удовлетворен этим два решения по двум причинам:

  1. Ref#1's OnAuthorization работает только на уровне действия, а не на уровне класса контроллера
  2. Ref#2 требует много настроек (Win7 SDK для makecert), netsh и, чтобы использовать порт 80 и порт 443, мне нужно запустить VS2010 как администратор, на что я хмурюсь.
Таким образом, я пришел к этому решению, которое является довольно упрощенным со следующими условиями:
  1. Я хочу иметь возможность использовать атрибут RequireHttps в Класс контроллера или уровень действия

  2. Я хочу, чтобы MVC использовал HTTPS, когда атрибут RequireHttps присутствует, и использовал HTTP, если он отсутствует

  3. Я не хочу запускать Visual Studio от имени администратора

  4. Я хочу иметь возможность использовать любые порты HTTP и HTTPS, назначенные IIS Express

  5. Я могу повторно использовать самозаверяющий сертификат 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
    {
              ...
    }