Подтвердить что ты не робот

IIS Express по умолчанию использует порт 44300 для HTTPS при включении SSL

При первоначальной настройке IIS Express для включения SSL по умолчанию используется порт 44300. К сожалению, когда я пытаюсь получить доступ к своему сайту по адресу 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:\Inetpub\MySite" />
  </application>
  <bindings>
    <binding protocol="http" bindingInformation=":80:" />
    <binding protocol="https" bindingInformation=":44300:" />
  </bindings>
</site>

Спасибо заранее.

Обновить:

На этот вопрос Дивья ответила на форумах IIS.

4b9b3361

Ответ 1

Этот вопрос был ответил Divya на форумах IIS.

После включения SSL для веб-сайта в WebMatrix по умолчанию используется порт 44300 и все привязки в фоновом режиме. Я надеюсь, что вы попытались изменить этот порт на 443 в конфигурационном файле. Когда это будет сделано и сохранено, вам также необходимо изменить привязку в http.sys. Вам нужно будет удалить существующую запись для порта 44300 и добавить запись для порта 443. Для этого вы можете использовать httpcfg (WinXp/Win2003) или "netsh http" (WinVista/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

Ответ 2

Поскольку я потратил много времени на эту тему, я хотел бы поделиться своим нахождением. Я переношу сегмент из другого моего сообщения за вычетом кода. Некоторые сведения и пояснения:

==========================================

После исследования aroud я смог решить эту проблему с помощью IIS Express и переопределить метод класса OnAuthorization класса Controller (Ref # 1). Я также отправился с маршрутом, рекомендованным Hanselman (Ref № 2). Однако я не был полностью удовлетворен этими двумя решениями по двум причинам:

  • Ссылка № 1 OnAuthorization работает только на уровне действия, а не на уровне класса контроллера.
  • Ссылка # 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 только в производстве

Ответ 3

Порт 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.

Ответ 4

Ответ дан правильно, но если у вас все еще есть проблемы с настройкой 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 Enabled" ). В этом руководстве было показано, как создать сертификат и исправить его.

Ответ 5

Создать класс

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

И внутри вашей веб-конфигурации добавьте что-то вроде этого

<appSettings>    
    <add key="localhostSSLPort" value="44300"/>
  </appSettings>

И затем вы используете его как

    [RequireSSL]            
    public class AdminController : Controller
    {
              ...
    }