IIS Express - получение SSL для работы

Я не могу заставить IIS Express принимать защищенные соединения для проекта VS2010 MVC3, который я разрабатываю. Я могу заставить его принимать незащищенные соединения на порту 80, но не защищать их на порту 443.

Я предпринял следующие шаги, основанные на googling:

1) Напечатайте отпечаток SHA1 для моего самоподписанного сертификата IIS Express Server, выполнив следующее в командной строке VS2010:

certmgr.exe /c /s /r localMachine MY

В результате получилось 9B088F80 A4FC3141 28F62890 70BA1FC4 49FDD009. Позднее я узнал, что мне нужно удалить пробелы при использовании отпечатка.

2) Удалил любой сертификат, связанный с портом 443, выполнив следующее в запросе повышенной командной строки:

netsh http delete sslcert ipport=0.0.0.0:443

3) Сгенерировал новый GUID, запустив Create GUID с меню Tools VS2010. В моем случае я получил B0421A5B-FF61-47CE-892D-11AA3A9C7D2A.

4) Установил самозаверяющий сертификат на порт 443, выполнив следующее в запросе повышенной командной строки:

netsh http add sslcert ipport=0.0.0.0:443 certhash=9B088F80A4FC314128F6289070BA1FC449FDD009 appid={B0421A5B-FF61-47CE-892D-11AA3A9C7D2A}

5) Модифицировал ACL, выполнив следующее из приглашения с повышенной командной строкой:

netsh http add urlacl url=https://localhost:443/ user=everyone

6) Изменен файл application.config для IIS Express путем добавления привязки для порта 443 и протокола https. Раздел сайтов для файла выглядит следующим образом:

        <sites>
        <site name="Development Web Site" id="1" serverAutoStart="true">
            <application path="/">
                <virtualDirectory path="/" physicalPath="%IIS_BIN%\AppServer\empty_wwwroot" />
            </application>
            <bindings>
                <binding protocol="https" bindingInformation="*:443:localhost" />
                <binding protocol="http" bindingInformation="*:80:localhost" />
            </bindings>
        </site>
        <siteDefaults>
            <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
            <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
        </siteDefaults>
        <applicationDefaults applicationPool="IISExpressAppPool" />
        <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>

7) Перезагрузите службу http, выполнив следующую команду в командной строке с повышенной командной строкой:

net stop http
net start http

8) Изменен URL-адрес проекта на вкладке "Интернет" моей страницы свойств проекта MVC на следующее:

http://localhost/

Сохранение страницы свойства проекта вызвало реконфигурацию сервера после того, как я сделал это изменение.

Когда я запускаю приложение MVC из VS2010, он правильно привязывается к http://localhost (по умолчанию порт 80, я не включил все этапы для того, чтобы IIS Express работал с небезопасными/нормальными соединениями на порту 80, но они, по существу, выполняются с 5 по 7, но с упором на http и порт 80, а не https и порт 443).

Однако при попытке перехода на любое действие, требующее https, я получаю сообщение об ошибке "отказ от сервера".

Что я делаю неправильно?

Ответ 1

После того, как вы настроили проект на использование IISExpress, нажмите F4, когда проект выбран в проводнике решений, чтобы отобразить свойства и в настройках свойств SSL Enable установить true и в SSL URL установить URL с портом (443 в вашем случае), который требуется для SSL.

Это работает для меня, не переходя под капот, и самозаверяющий сертификат был автоматическим.

Чтобы запустить проект по этому URL по умолчанию, вы можете щелкнуть правой кнопкой мыши по проекту, выбрать свойства, затем веб и заменить URL-адрес проекта https://localhost:443

Ответ 2

Если вы выполнили шаги jbtule и SSL все еще не работает, убедитесь, что ваш порт находится в формате :443XX.

Visual Studio сделала это автоматически для первого проекта, на котором я включил SSL, но у любых последующих проектов есть случайные порты SSL. Изменение его на вышеуказанную структуру 443 под интерфейсом Project > Web получило его и работало для меня.

Ответ 3

Я наткнулся на ответ.

На шаге 6 я изменял неправильный файл application.config IIS Express. Оказывается, есть главный файл конфигурации в домашнем каталоге приложения (например, C:\Program Files (x86)\IIS Express\AppServer, в моей системе), который я модифицировал.

Второй и правильный файл для изменения - это тот, который находится в области данных пользователя (например, C:\Users\Mark.ARCABAMA\Documents\IISExpress\config, в моей системе).

Ответ 4

Я просто хотел бы добавить решение, которое помогло мне с той же проблемой.

VS показал URL-адрес SSL, который был https://[an IP, not localhost]:44367

URL был зарезервирован, который я нашел с помощью netsh http show urlacl

Затем я запустил netsh http delete urlacl https://[an IP, not localhost]:44367, перезагрузил VS, выключил SSL, установив для SSL значение false, а затем снова включил. Это исправило URL SSL.

Ответ 5

У меня недавно была очень похожая проблема с VS 2019 и IIS Epress. Я попытался изменить http на https, чтобы я мог использовать ADFS. (Сообщение: этот сайт недоступен. Localhost не разрешает подключение).

После небольшого исследования я попытался изменить свойство 'Require SSL' с true на false и обратно на true. Это вызвало обновление файла applicationhost.config(.... Vs\ProjectName\config\applicationhost.config), который создал новую привязку SSL с новым номером порта для протокола https. Итак, я изменил все ссылки с предложенным новым портом (в веб-свойстве проекта, в файле конфигурации и в конфигурации ADFS), и он работает. Вывод: необязательно, чтобы http-порт был таким же, как https, для одного и того же сайта.