IIS Express по умолчанию использует порт 44300 для HTTPS при включении SSL - PullRequest
36 голосов
/ 11 сентября 2010

При первоначальной настройке IIS Express для включения SSL по умолчанию используется порт 44300. К сожалению, когда я пытаюсь получить доступ к своему сайту в https://localhost/, он не работает, если я не использую номер порта 44300 - * 1002.*.

Ссылки генерируются с использованием следующего:

<%= 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>

Заранее большое спасибо.

Обновление:

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

Ответы [ 5 ]

28 голосов
/ 15 сентября 2010

На этот вопрос ответил Дивьей на форумах 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
3 голосов
/ 28 августа 2012

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

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

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

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

Итак, я пришел к этому решению, которое является довольно упрощенным со следующими условиями:

  1. Я хочу иметь возможность использовать атрибут RequireHttps в классе Controllerили уровень действия

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

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

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

  5. Я могу повторно использовать самозаверяющий сертификат SSL IIS Express, и мне все равно, вижу ли янедопустимая подсказка SSL

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

Вы можете найти мое решение / код здесь ==> ASP.NET MVC RequireHttps только в рабочей среде

2 голосов
/ 03 августа 2012

Порт 44300 является последовательным: 00 означает, что это первое приложение, которое вы настроили как SSL;01 будет вторым и т. Д.

Поскольку я также требую, чтобы мой веб-сайт работал только в HTTPS, добавив глобальный атрибут [RequireHttps], у меня возникли некоторые проблемы при отладке.При запуске он автоматически перенаправлялся на https://localhost/

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

* 1011.*

Используйте этот класс только при отладке.При развертывании в IIS7 следует использовать переписывание URL-адресов для перенаправления на HTTPS.

0 голосов
/ 26 августа 2016

Создайте класс

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
    {
              ...
    }
0 голосов
/ 18 марта 2015

Дан ответ правильный, но если у вас все еще есть проблемы с настройкой 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 включен»). Из этого туториала я узнал, как создать и исправить сертификат.

...