Підключення / з'єднання SSL Скидання за допомогою IISExpress


140

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

Це те, що я бачу в Chrome:

Неможливо встановити безпечне з'єднання з сервером. Це може бути проблема з сервером, або може знадобитися сертифікат автентифікації клієнта, якого у вас немає. Код помилки: ERR_SSL_PROTOCOL_ERROR

Я оновив свій веб-файл Properies ->, щоб URL-адреса проекту тепер використовувала URL-адресу https. Однак після цього я отримую нову помилку при запуску:

З'єднання з localhost було перервано. Код помилки: ERR_CONNECTION_RESET

Дякую


Перевірте моя відповідь на аналогічне питання stackoverflow.com/questions/28195505 / ...
Bogac

1
Публікація тут, тому що її можна легко пропустити у відповідях нижче. Якщо прийнятий відповідь не працює для вас , спробуйте замість цього: stackoverflow.com/questions/20036984 / ...
IWriteApps

Зміна номера порту працює для мене.
torun

Відповіді:


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
Я змусив це працювати, додавши цей рядок до URL-запису І змінивши порт на діапазон ": 44300-: 44398" (див. Відповідь нижче uosef)
Рубанов,

ТАК! Через кілька годин майже втративши розум, ось що мені допомогло!
waka

363

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

Я помітив це, переглянувши netsh http show sslcert > sslcert.txtвихідний результат і щось клацнувши з текстом, який я нещодавно прочитав про номери портів.


53
Я шкодую лише про те, що на цю посаду маю лише одну нагороду. Як я виправив таку дурницю перед ТА?
quillbreaker

6
Ви також netsh http add sslcert ...можете додати порт, який ви хочете використовувати. Корисний у деяких випадках.
brazilianldsjaguar

3
Crikey це з'їв багато годин, я ніколи не повернусь ... netshна допомогу, це гідне повідомлення в блозі ...
Джим


2
Ще працював з Visual Studio 2017 / IIS Express 10
TvdH

87

Не забудьте видалити будь-які попередні сертифікати "localhost", оскільки вони можуть суперечити сертифікату, створеному IIS Express. У мене була така сама помилка (ERR_SSL_PROTOCOL_ERROR), і мені знадобилося багато годин, щоб остаточно розібратися, випробувавши безліч "рішень". Моя помилка полягала в тому, що я створив власний сертифікат "localhost", і було їх два. Мені довелося видалити і те, і IIS Express відтворити його.

Ось як можна перевірити та видалити сертифікат 'localhost':

  • На початку запустіть -> mmc.exe
  • Файл -> Додати / видалити оснащення ...
  • Виберіть Сертифікати -> Додати> -> Обліковий запис комп'ютера -> Локальний комп'ютер
  • Перевірте пункт Сертифікати> Особисті> Сертифікати
  • Переконайтеся, що наявний сертифікат localhost має дружню назву "IIS Express Development Certificate". Якщо ні, видаліть її. Або, якщо їх декілька, видаліть усі.

У Visual Studio виберіть проект та на вкладці властивостей увімкніть SSL = true. Зберігайте, будуйте та запускайте. IIS Express створить новий сертифікат "localhost".

Примітка. Якщо це не працює, спробуйте виконати наступне: переконайтеся, що вимкніть IIS Express у проекті VS та зупиніть все запущене додаток на ньому перед видаленням сертифіката "localhost". Крім того, ви можете перейти до "панелі управління> програми" та "Ремонт IIS Express".


2
У моєму випадку налаштування сертифікатів IIS були втрачені, проте сертифікати були на диску. Налаштування сертифікатів SSL та оновлення прив’язки HTTPS на веб-сайті допомогло. Важливо встановити прив'язку https ще раз, навіть якщо сертифікат ssl вже обраний у комбобоні.
opewix

10
Це було потрібно для ремонту IIS Express. Зараз працював на відмінно. Спасибі
Хомам

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

Це було все! Дублікати certs і повинні були зробити ремонт iis виражати частину також.
madamission

36

Я підбиваю підсумки кроків, які допомогли мені вирішити це питання:

  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-експрес працював у порту 44300)

IP: порт : 0,0.0,0:104300

Hash сертифікату : eb380ba6bd10fb4f597cXXXXXXXXXXX

Ідентифікатор програми : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Також загляньте в консоль управління експрес-керування IIS (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 буде вашим сертифікатом за замовчуванням, пов’язаним з вашим localhost (що ми знайшли на кроці 4) або тим, який ви хочете додати як новий сертифікат.

PS Дякую за вашу відповідь uosɐſ (що допомогло мені вирішити це питання)


8
Ха, зміна порту з 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/…
Karthik

26

Проблема, яку я зіткнувся, мала певний час, що дозволило HSTS для localhost і не усвідомлюючи, що це порушить мій http: // localhost: someport в IIS Express.

HSTS повідомляє браузеру (Chrome у моєму випадку) ЗАВЖДИ запитувати URL-адресу за допомогою HTTPS. Тому, навіть якщо я навіть не ввімкнув SSL для свого додатка MVC 5, браузер все одно намагатиметься отримати доступ до мого сайту за допомогою HTTPS у URL-адресі замість HTTP.

Виправлення?

  1. Surf to chrome: // net-Internals / # hsts
  2. У розділі видалення введіть "localhost" та видаліть запис із Chrome.

1
Так, hsts може стати причиною цього питання. Спасибі це зробило для мене спасибі.
Космо

12

Жоден із перерахованих вище варіантів не працював для мене. Мені довелося зробити наступне:

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

Я отримав кроки з цієї нитки.

Сподіваюся, це допомагає.


2
Я просто видаляю iis express і переустановлюю його. зараз це працює
Xin

5
У моєму випадку досить було просто відновити встановлення IIS (на панелі керування).
romanoza

А люди платять за це гроші Microsoft? Наскільки неймовірно погано має бути розроблене програмне забезпечення, що єдине виправлення - це повна видалення та перевстановлення ?!
Jez

@Jez - Ні, це безкоштовно.
Ерік Келлі

6

У моєму випадку я створив самопідписаний сертифікат, і він працював, за винятком того, що я отримував помилку в браузері, оскільки сертифікат не був довірений. Отже, я перемістив cert у папку Trusted Root Certification Authorities> Certificates на оснастці сертифікатів. Це спрацювало, і тоді я закрив Visual Studio на день.

Наступного дня я розпочав свій проект і отримав помилку, згадану в первісному запитанні. Проблема полягає в тому, що сертифікат, з яким ви налаштували IISExpress, повинен існувати в папці Особисті> Сертифікати, або 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>

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-база даних / під ENABLE SSL частина 4. Це спричинило помилки, які ви отримували.


4

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

Переконайтеся, що після зміни порту, який знаходиться в діапазоні: 44300 до 44399, адреса також починається з HTTPS

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


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>

Можливо, ви додали прив'язку, подібну до другої, щоб мати доступ до веб-сервісу ззовні localhost. Оскільки ця прив'язка прослуховується на будь-якій адресі, схоже, вона перекриває прив'язку SSL, хоча використовувався інший порт.

Видаліть злу зв’язок або перемістіть її вниз.


Це зафіксувало це для мене. Дякую!
richb

3

Видалення каталогів IISExpress та vs та використання діапазону портів ssl від 44300 до 44399 (включно) із цієї статті працювало для мене


спасибі за це - працював для мене, за винятком того, що мені не запропонували довіряти cert у VS - я занадто лінивий робити щось з цього приводу, ігноруватимуть попередження та продовжувати!
Дейв

2

Це анекдотично, як підслухано від колеги, але нібито це проблема із хромованим примусом https. Зазвичай я запускаю Firefox, тому раніше не бачив цієї проблеми. Використовуючи firefox або тобто працював для мого колеги.


1

Мою проблему викликав Фіддлер. Коли Fiddler виходить з ладу, він періодично псується з налаштуваннями вашого проксі. Просто запуск Fiddler ніби все виправляв (можливо, він якось ремонтує себе).


1

« Digicert установка сертифікату перевірки » часто буває корисно в подібних ситуаціях.

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

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

Для мене @Jason Kleban відповідь була справжньою проблемою, але це може бути дуже корисною утилітою для перевірки основних тверджень про те, який сертифікат завантажується.


Вау, спасибі велике Єдине рішення, яке працювало для мене.
Фернандо Сільва

1

Якщо вам потрібно використовувати порт поза межами діапазону 44300-44399, ось такий спосіб вирішення:

  • Створіть новий сайт у IIS (не в експресі)
  • Прив’яжіть HTTPS до потрібного вам порту
  • Для SSL-сертифікату виберіть сертифікат розвитку IIS Express
  • Після створення сайту зупиніть його, оскільки він насправді не потребує запуску

Це реєструє сертифікат IIS Express Development на цьому порту, і це найпростіший спосіб я обійти вимогу щодо діапазону 44300-44399.


0

Я щойно відновив комп’ютер. Цей потік дав мені підказки, де я зрозумів у налаштуваннях проекту> Веб, проект був налаштований на використання HTTP та HTTP-порту. Оновивши його до HTTPS та правильного порту HTTPS, все почало працювати знову.


0

Щоб перейти до інших відповідей щодо встановлення порту SSL між 44300 і 44399, я не зміг змінити властивість SSL Enabled у Visual Studio, а також встановити конкретну URL-адресу SSL. Інші відповіді, як-от ремонт IIS Express, не допомогли. Рішення полягало в тому, щоб зайти в папку .vs паралельно файлу sln, відкрити конфігураційну папку та редагувати файл applicationhost.config. Потім я додав рядок https вручну і перезапустив VS.

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

0

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


Ви можете мати обох, якщо вони не працюють одночасно.
trnelson

0

У моєму випадку URL-адресу localhost було переспрямовано на https: // localhost під час налагодження. Це відбувалося з однієї миті в іншу, нічого не змінюючи. Я вирішив це, зробивши важке перезавантаження браузера. Ось посилання

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.