Соединение SSL/соединение Reset с IISExpress

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

Это то, что я вижу в Chrome:

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

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

Соединение с localhost было прервано. Код ошибки: ERR_CONNECTION_RESET

Спасибо

Ответ 1

Если вы используете 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.

Ответ 2

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

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

Ответ 3

Обязательно удалите все предыдущие сертификаты "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".

Ответ 4

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

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

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

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

netsh http show 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 delete 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ɐſ (который помог мне в решении этой проблемы)

Ответ 5

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

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

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

  • Surf to chrome://net-internals/# hsts
  • В разделе удаления введите "localhost" и удалите запись из Chrome.

Ответ 6

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

  • Удаленный IIS Express 8.0
  • Удалены все конфигурации в папке "Мои документы" для IIS Express
  • Переустановка IIS Express 8.0
  • Удалил проект на моем локальном компьютере и загрузил чистую версию для TFS
  • Запустите проект - он перешел через SSL, и я могу отлаживать

Я получил шаги этого потока.

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

Ответ 7

В моем случае я создал самозаверяющий сертификат и имел его работу, за исключением того, что я получал ошибку в браузере, потому что сертификат был ненадежным. Итак, я переместил сертификат в папку "Проверенные корневые центры сертификации" > "Сертификаты" в snapin сертификатов. Это сработало, а затем я закрыл Visual Studio в течение дня.

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

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

Ответ 8

У меня такая же проблема в 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>

Ответ 9

У меня была эта проблема, я настроил свой сайт для глобального запроса 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/ в разделе ENABLE SSL 4. Это вызвало ошибки, которые вы были.

Ответ 10

Другая проблема, которая произошла со мной дважды:
В 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, хотя использовался другой порт.

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

Ответ 11

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

Ответ 12

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

Ответ 13

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

Ответ 14

Чтобы перейти к другим ответам о настройке 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" />

Ответ 15

"" Проверка установки сертификата Digicert" часто помогает в таких ситуациях.

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

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

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

Ответ 16

В моем случае я просто забыл, что у меня была привязка для (в моем случае) https://localhost:44300 в полном IIS. У вас не может быть обоих!

Ответ 17

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

Ответ 18

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

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

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

Ответ 19

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