SSL-соединение / сброс соединения с помощью IISExpress


145

Я впервые использую новую Visual Studio 2013 с IISExpress (ранее использовался сервер разработки ASP.net на VS2010). У меня возникают проблемы при отладке моего проекта.

Вот что я вижу в Chrome:

Невозможно установить безопасное соединение с сервером. Это может быть проблема с сервером или может потребоваться сертификат аутентификации клиента, которого у вас нет. Код ошибки: ERR_SSL_PROTOCOL_ERROR

Я обновил свои свойства -> веб-файл, так что теперь URL-адрес проекта использует URL-адрес https. Однако после этого я получаю новую ошибку при запуске:

Подключение к localhost было прервано. Код ошибки: ERR_CONNECTION_RESET

Благодарность


Проверьте мой ответ на аналогичный вопрос stackoverflow.com/questions/28195505/…
Bogac

2
Публикуйте здесь, потому что это легко пропустить в ответах ниже. Если принятый ответ не работает, попробуйте вместо этого: stackoverflow.com/questions/20036984/…
IWriteApps

Меняю номер порта, у меня работает.
torun 08

Ответы:


47

Если вы используете URLRewrite для принудительного подключения SSL в своем web.config, вероятно, он переписывает ваш адрес localhost для принудительного использования https. Если отладка с включенным SSL не важна для вас и вы используете URLRewrite, подумайте о добавлении <add input="{HTTP_HOST}" pattern="localhost" negate="true" />в ваш файл web.config раздела перезаписи. Это остановит перезапись для любых адресов localhost, но оставит ее на месте в производственной среде. Если вы не используете URLRewrite или вам требуется отладка с использованием SSL, может помочь http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx . Это для VS2010, но должно хватить и для VS2013.


7
Я заставил это работать, добавив эту строку в URLrewrite И изменив порт так, чтобы он находился в диапазоне ": 44300-: 44398" (см. Ответ uosef ниже)
Рубанов

ДА! Вот что мне помогло после нескольких часов, когда я почти потерял рассудок!
waka

382

Я получал ERR_CONNECTION_RESET, потому что мой номер порта настроенного приложения Visual Studio 2013 / IIS Express НЕ находился в диапазоне : 44300-: 44398 . (Я не помню, чтобы мне приходилось отклонять какие-либо предупреждения, чтобы выйти за пределы этого диапазона.) Изменить номер порта на что-то в этом диапазоне - это все, что мне нужно было сделать, чтобы он заработал.

Я заметил это после просмотра netsh http show sslcert > sslcert.txtвывода и чего-то щелкнув по материалам, которые я недавно прочитал о номерах портов.


54
Я только сожалею, что получил только один голос за этот пост. Как я исправлял такую ​​ерунду до ТАК?
quillbreaker

7
Вы также можете использовать netsh http add sslcert ...для добавления порта, который хотите использовать. Полезно в некоторых случаях.
brazilianldsjaguar

4
Крики, это отняло у меня много часов, я никогда не вернусь ... netshна помощь, это достойно записи в блоге ...
Джим

3
Я обнаружил, что этот диапазон номеров портов задокументирован в разделе « Использование настраиваемого порта SSL» документа «Обработка сбоев привязки URL-адресов» в документации IIS Express .
Schmalls

2
Все еще работал с Visual Studio 2017 / IIS Express 10
TvdH

89

Обязательно удалите все предыдущие сертификаты localhost, поскольку они могут конфликтовать с сертификатом, созданным IIS Express. У меня была такая же ошибка (ERR_SSL_PROTOCOL_ERROR), и мне потребовалось много часов, чтобы окончательно разобраться в ней после опробования многих многих «решений». Моя ошибка заключалась в том, что я создал свой собственный сертификат localhost, а их было два. Мне пришлось удалить оба, и IIS Express воссоздал их.

Вот как вы можете проверить и удалить сертификат localhost:

  • В Пуске введите -> mmc.exe
  • Файл -> Добавить / удалить оснастку ...
  • Выберите Сертификаты -> Добавить> -> Учетная запись компьютера -> Локальный компьютер.
  • Проверьте в разделе Сертификаты> Личные> Сертификаты.
  • Убедитесь, что существующий сертификат localhost имеет понятное имя «Сертификат разработки IIS Express». Если нет, удалите его. Или, если несколько, удалите все.

В Visual Studio выберите проект и на вкладке свойств включите SSL = true. Сохранить, собрать и запустить. IIS Express сгенерирует новый сертификат localhost.

Примечание. Если это не сработает, попробуйте следующее: обязательно отключите IIS Express в проекте VS и остановите все запущенные на нем приложения перед удалением сертификата localhost. Кроме того, вы можете перейти в «Панель управления> Программы» и «Восстановить IIS Express».


2
В моем случае настройки сертификата IIS были потеряны, однако сертификаты были на диске. Помогла установка SSL-сертификатов и обновление привязки HTTPS на сайте. Важно снова установить привязку https, даже если сертификат ssl уже выбран в поле со списком.
opewix

11
Требовалось восстановить IIS Express. Теперь работал отлично. Спасибо
Homam

1
Спасибо. В моем случае я случайно удалил сертификат со своего компьютера. Я обнаружил его, когда я попытался выполнить эту команду, и он сказал: «Не удалось добавить сертификат SSL, ошибка: 1312. Указанный сеанс входа в систему не существует. Возможно, он уже был прерван». netsh http delete sslcert ipport=0.0.0.0:443 netsh http add sslcert ipport=0.0.0.0:443 appid="{GUID-APP-ID}" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL"
UKM

Это было! Дубликаты сертификатов и ремонт тоже пришлось делать.
madamission

Мне пришлось закрыть и снова открыть Visual Studio, прежде чем я получил диалоговое окно для принятия нового сертификата.
Математика

40

Я резюмирую шаги, которые помогли мне решить эту проблему:

  1. Убедитесь, что диапазон портов SSL (используемый IIS Express) находится в диапазоне 44300-44398.

Во время установки IIS Express использует Http.sys для резервирования портов с 44300 по 44399 для использования SSL. Это позволяет стандартным пользователям (без повышенных прав) IISExpress настраивать и использовать SSL. Подробнее об этом см. Здесь

  1. Выполните приведенную ниже команду от имени администратора в командной строке. Это выведет привязки сертификата SSL на компьютер. В этом списке найдите сертификат, используемый IIS Express для соответствующего порта:

netsh http показать sslcert> sslcert.txt

  1. Найдите следующие элементы в sslcert.txt (в моем случае IIS Express работал на порту 44300)

IP: порт : 0.0.0.0:44300

Хеш сертификата : eb380ba6bd10fb4f597cXXXXXXXXXX

Идентификатор приложения : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Также посмотрите в консоли управления IIS express (RUN (Ctrl + R) -> inetmgr.exe) и найдите, существует ли соответствующий сертификат в сертификатах сервера.

(Щелкните ServerRoot -> в разделе IIS () -> Откройте сертификаты сервера)

  1. Если ваш локальный хост по умолчанию использует другой сертификат, отличный от того, который указан в шаге 3, продолжайте следующие шаги.

netsh http удалить sslcert ipport = 0.0.0.0: 44300

netsh http add sslcert ipport = 0.0.0.0: 44300 certhash = New_Certificate_Hash_without_space appid = {214124cd-d05b-4309-XXX-XXXXXXX}

New_Certificate_Hash будет вашим сертификатом по умолчанию, связанным с вашим локальным хостом (который мы нашли на шаге 4) или тем, который вы хотите добавить в качестве нового сертификата.

PS Спасибо за ответ uosɐſ (который помог мне в решении этой проблемы)


9
Ха, изменение порта с 53xxx на 44300 помогло мне.
cdonner

Пришлось сделать это после перехода с IIS на IISExpress
K0D4

2
Смена порта у меня тоже сработала. Кто-нибудь знает, почему порты должны быть в этом диапазоне и где это настраивается?
Джим

Смена порта для победы! И то же самое для комментария Джима о том, почему порты должны быть в диапазоне 44300-44398?
TChadwick

Во время установки IIS Express использует Http.sys для резервирования портов с 44300 по 44399 для использования SSL. Это позволяет стандартным пользователям (без повышенных прав) IISExpress настраивать и использовать SSL. Более подробно об этом см здесь -> docs.microsoft.com/en-us/iis/extensions/using-iis-express/...
Картик

27

Проблема, с которой я столкнулся, была связана со мной, когда в какой-то момент я включил HSTS для localhost и не понял, что это сломает мой http: // localhost: someport в IIS Express.

HSTS сообщает браузеру (в моем случае Chrome) ВСЕГДА запрашивать URL-адрес с использованием HTTPS. Поэтому, хотя я даже не включил SSL для своего приложения MVC 5, браузер все равно будет пытаться получить доступ к моему сайту, используя HTTPS в URL-адресе вместо HTTP.

Исправление?

  1. Перейдите в chrome: // net-internals / # hsts
  2. В разделе удаления введите «localhost» и удалите запись из Chrome.

1
Да, причиной этой проблемы может быть hsts. Мне это очень понравилось, спасибо.
Kosmo

12

Ни один из вышеперечисленных вариантов у меня не работал. Пришлось сделать следующее:

  1. Удален IIS Express 8.0
  2. Удалены все конфигурации в моем каталоге документов для IIS Express
  3. Переустановил IIS Express 8.0
  4. Удалил проект на моем локальном компьютере и загрузил чистую версию для TFS
  5. Запустил проект - затем он запустил SSL, и я могу отлаживать

Я получил шаги из этой ветки.

Надеюсь это поможет.


2
Я просто удаляю iis express и переустанавливаю его. теперь это работает
Синь

5
В моем случае было достаточно просто восстановить установку IIS (в Панели управления).
romanoza 08

И люди за это платят Microsoft деньги? Как невероятно плохо должно быть разработано программное обеспечение, единственное решение которого - полное удаление и повторная установка ?!
Jez

@Jez - Нет, это бесплатно.
Эрик Келли

6

В моем случае я создал самозаверяющий сертификат, и он работал, за исключением того, что я получал ошибку в браузере, потому что сертификат был ненадежным. Итак, я переместил сертификат в папку Trusted Root Certification Authorities> Certificates в оснастке Certificates. Это сработало, и я закрыл Visual Studio на день.

На следующий день я начал свой проект и получил ошибку, упомянутую в исходном вопросе. Проблема в том, что сертификат, который вы настроили для IISExpress, должен существовать в папке Personal> Certificates, иначе HTTPS перестанет работать. После успешного запуска IIS Express вы можете перетащить сертификат обратно в надежное расположение. Он будет работать до тех пор, пока вы не перезапустите IIS Express.

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


2
Вы можете скопировать + вставить сертификат в оснастку сертификата, как если бы это был обычный файл. Мне потребовались ГОДЫ, чтобы узнать это.
Simon_Weaver

6

У меня такая же проблема в Visual Studio 2015. Поскольку я использую привязку SSL в web.config

<rewrite>
   <rules>   
     <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
          <add input="{HTTPS}" pattern="off" />
       </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

И я могу решить проблему с ответом мистера Джреджера. Заменив

<add input="{HTTPS}" pattern="off" />

с участием

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

в мой web.config, поэтому мой код

<rewrite>
  <rules>   
    <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
         <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
 </rules>
</rewrite>

5

Проблема, с которой я столкнулся, была связана с ответом @Jason Kleban, но у меня была одна небольшая проблема с моими настройками в Visual Studio Properties для IIS Express.

Убедитесь, что после изменения порта в диапазоне от 44300 до 44399 адрес также начинается с HTTPS

введите описание изображения здесь


4

У меня возникла эта проблема, я настроил свой сайт для глобального требования https в FilterConfig.cs.

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

Я забыл изменить URL-адрес проекта на https: из этого руководства http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- sql-database / в разделе ВКЛЮЧИТЬ SSL, часть 4. Это привело к полученным вами ошибкам.


3

Еще одна проблема, с которой я столкнулся дважды:
в IIS Express applicationhost.configпорядок привязок имеет значение. Одна привязка может иметь приоритет над привязкой SSL, в результате чего она не работает.

Пример:

<site name="MySite007" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\myuser\projects\mysolutionfolder\MyProject.Service" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8081:localhost" />
        <binding protocol="http" bindingInformation=":8080:" /><!-- evil binding -->
        <binding protocol="https" bindingInformation="*:44327:localhost" />
    </bindings>
</site>

Возможно, вы добавили привязку, аналогичную второй, чтобы иметь доступ к вашему WebService извне localhost. Поскольку эта привязка прослушивает любой адрес, кажется, что она переопределяет привязку SSL, хотя использовался другой порт.

Удалите злую привязку или сдвиньте ее вниз.


Это исправило это для меня. Благодарность!
richb

3

Удаление каталогов IISExpress и vs и использование диапазона портов ssl от 44300 до 44399 (включительно) из этой статьи сработало для меня.


спасибо за это - у меня сработало, за исключением того, что мне не предлагали доверять сертификату в VS - я слишком ленив, чтобы что-то с этим делать, поэтому проигнорирую предупреждения и продолжу!
Дэйв

2

Это анекдотично, как слышал коллега, но якобы это проблема с принудительным включением https в Chrome. Я обычно запускаю в firefox, поэтому раньше не видел этой проблемы. Использование firefox или ie работало для моего коллеги.


2

Если вам нужно использовать порт за пределами диапазона 44300-44399, вот обходной путь:

  • Создать новый сайт в IIS (не Express)
  • Привяжите HTTPS к нужному порту
  • В качестве SSL-сертификата выберите IIS Express Development Certificate.
  • Как только сайт будет создан, остановите его, поскольку на самом деле он не должен работать

Это регистрирует сертификат IIS Express Development с этим портом, и это самый простой способ, который я нашел, чтобы обойти требование диапазона 44300-44399.


1

Моя проблема была вызвана Fiddler. Когда Fiddler выходит из строя, он иногда портит настройки вашего прокси. Казалось, что простой запуск Fiddler все исправит (возможно, он как-то сам себя починит).


1

В подобных ситуациях часто помогает программа проверки установки сертификата Digicert .

Я смог убедиться, что предпринимаемый SSL-сертификат был тем, который я ожидал, сравнив серийный номер.

введите описание изображения здесь

Для меня ответ @Jason Kleban был реальной проблемой, но это может быть очень полезной утилитой для проверки ваших основных утверждений о том, какой сертификат загружается.


Вау, спасибо тебе большое. Единственное решение, которое сработало для меня.
Фернандо Силва

1

В моем случае после трехдневной попытки все решить, просто запустив Visual Studio с помощью «Запуск от имени администратора».


У меня работает "Запуск от имени администратора". Спасибо.
Veerakran Sereerungruangkul,

0

Я только что восстановил свой компьютер. Этот поток дал мне подсказки, где я понял, что в настройках проекта> Интернет, проект был настроен на использование HTTP и порта HTTP. После обновления до HTTPS и правильного порта HTTPS все снова заработало.


0

Чтобы перейти к другим ответам о настройке порта SSL между 44300 и 44399, мне не удалось изменить свойство SSL Enabled в Visual Studio или установить конкретный URL-адрес SSL. Другие ответы, такие как восстановление IIS Express, не помогли. Решением было зайти в папку .vs параллельно с файлом sln, открыть подпапку config, а затем отредактировать файл applicationhost.config. Затем я вручную добавил строку https и перезапустил VS.

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />


0

В моем случае URL-адрес localhost был перенаправлен на https: // localhost, когда я отлаживал. Это происходило от одного момента к другому, ничего не меняя. Я решил это, сделав полную перезагрузку в браузере. Вот ссылка

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.