SSL-соединение / сброс соединения с помощью IISExpress
Я впервые использую новую Visual Studio 2013 с IISExpress (ранее использовалось ASP.net сервер разработки на VS2010). Я сталкиваюсь с проблемами, пытаясь отладить мой проект.
вот что я вижу в Chrome:
не удалось установить безопасное соединение с сервером. Это может быть проблема с сервером или может потребоваться сертификат проверки подлинности клиента, которого у вас нет.
Код ошибки: ERR_SSL_PROTOCOL_ERROR
я обновил Свойства - > веб-файл, чтобы Url-адрес проекта теперь использовал URL-адрес https. Однако после этого я теперь получаю новую ошибку при запуске:
подключение к localhost прервано.
Код ошибки: ERR_CONNECTION_RESET
спасибо
16 ответов:
Если вы используете URLRewrite для принудительного подключения SSL в вашем интернете.config, это, вероятно, переписывает ваш адрес localhost, чтобы заставить https. Если отладка с включенным SSL не важна для вас, и вы используете URLRewrite, подумайте о добавлении
<add input="{HTTP_HOST}" pattern="localhost" negate="true" />в свою паутину.раздел перезаписи конфигурационного файла. Он остановит перезапись для любых адресов localhost, но оставит ее на месте в рабочей среде. Если вы не используете URLRewrite или вам нужно отлаживать с помощью SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx может помочь. Это для VS2010,но должно хватить и для VS2013.
Я получал ERR_CONNECTION_RESET, потому что мой Visual Studio 2013/IIS Express настроил приложение номер порта не было в диапазоне :44300-:44398. (Я не помню, чтобы нужно было отклонять какие-либо предупреждения, чтобы получить из этого диапазона.) Изменение номера порта на что-то в этом диапазоне-это все, что мне нужно было сделать, чтобы заставить его работать.
Я заметил это после просмотра
netsh http show sslcert > sslcert.txtвывод и что-то щелкающее с вещами, которые я недавно читал о порту числа.
обязательно удалите все предыдущие сертификаты "localhost", поскольку они могут конфликтовать с тем, который был создан IIS Express. У меня была такая же ошибка (ERR_SSL_PROTOCOL_ERROR), и мне потребовалось много часов, чтобы наконец понять это после того, как я попробовал много "решений". Моя ошибка заключалась в том, что я создал свой собственный сертификат "localhost", и их было два. Мне пришлось удалить оба и заставить IIS Express воссоздать его.
вот как вы можете проверить и удалить localhost в сертификат:
- при запуске введите - > mmc.exe
- File - > Add / Remove Snap-in...
- выберите сертификаты -> добавить -> учетная запись компьютера -> локальный компьютер
- проверьте в разделе Сертификаты > личные > сертификаты
- убедитесь, что существующий сертификат localhost имеет понятное имя "сертификат разработки IIS Express". Если нет, удалите его. Или если несколько, удалите все.
в Visual Studio выберите проект и в разделе вкладка свойства, включить SSL=true. Сохранить, построить и запустить. IIS Express создаст новый сертификат "localhost".
Примечание: если это не работает, попробуйте следующее: обязательно отключите IIS Express на VS project и остановите все запущенные приложения на нем до удаления сертификата "localhost". Кроме того, вы можете перейти в "Панель управления > программы" и восстановить IIS Express.
я резюмирую шаги, которые помогли мне в решении этой проблемы:
- убедитесь, что диапазон портов SSL (используемый IIS express) находится между 44300-44398
во время установки IIS Express использует Http.sys для резервирования портов 44300 через 44399 для использования SSL. Это позволяет стандартным пользователям (без повышенные привилегии) IISExpress для настройки и использования SSL. Для более подробно об этом см. здесь
- выполнить следующую команду от имени администратора в командной строке. Это выведет привязки сертификата SSL на компьютере. Из этого списка узнайте сертификат, используемый IIS express для соответствующего порта:
netsh http show sslcert > sslcert.txt
- найдите следующие элементы в sslcert.txt (в моем случае IIS экспресс был запущен в порту 44300)
IP: port : 0.0.0.0:44300
Хэш Сертификата: eb380ba6bd10fb4f597cXXXXXXXXXX
идентификатор приложения: {214124cd-d05b-4309-XXX-XXXXXXX}
- также посмотрите в консоли управления IIS express (RUN (Ctrl+R) - > inetmgr.исполняемый) и найти, если соответствующий сертификат существует в сертификатах сервера
(нажмите на корень сервера -> в разделе IIS () - > откройте сервер Сертификаты)
- Если ваш localhost по умолчанию использует другой сертификат, отличный от указанного в шаге 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) или тем, который вы хотите добавить в качестве нового сертификата.
P. S. Спасибо за ваш ответ!--63-- > uosɐſ (что помогло мне в решении этой проблемы)
проблема, которую я испытывал, была связана со мной, в какой-то момент времени, включив HSTS для localhost и не понимая, что это сломает мой http://localhost:someport в IIS Express.
HSTS сообщает браузеру (Chrome в моем случае) всегда запрашивать URL-адрес с помощью HTTPS. Поэтому, хотя я даже не включил SSL для своего приложения MVC 5, браузер все равно попытается получить доступ к моему сайту с помощью HTTPS в URL вместо HTTP.
в исправить?
- Surf to chrome: / / net-internals / #hsts
- в разделе удалить введите "localhost" и удалите запись из Chrome.
ни один из вышеперечисленных вариантов не работал для меня. Я должен был сделать следующее:
- удаленный IIS Express 8.0
- удалены все конфигурации в каталоге Мои Документы для IIS Express
- переустановил IIS Express 8.0
- удалил проект на моем локальном компьютере и скачал чистую версию для TFS
- запустил проект-затем он перешел на SSL, и я могу отлаживать
Я получил шаги от этот нитка.
надеюсь, что это помогает.
в моем случае я создал самозаверяющий сертификат и работал с ним, за исключением того, что я получал ошибку в браузере, потому что сертификат был ненадежным. Итак, я переместил сертификат в папку Доверенные корневые центры сертификации > сертификаты в оснастке "сертификаты". Это сработало, а затем я закрыл Visual Studio на день.
на следующий день я начал свой проект, и я получил ошибку, упомянутую в исходном вопросе. Проблема в том, что сертификат у вас настроенный IISExpress С должен существовать в папке Personal > Certificates или HTTPS перестанет работать. После успешного запуска IIS Express можно перетащить сертификат обратно в надежное расположение. Он будет продолжать работать до перезапуска IIS Express.
Не желая возиться с перетаскиванием сертификата туда и обратно каждый раз, я просто помещаю копию сертификата в обоих местах, и теперь все работает нормально.
У меня была эта проблема, я настроил свой сайт для global require https в FilterConfig.цезий.
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. Это вызвало ошибки, которые вы получали.
у меня такая же проблема в Visual Studio 2015. Потому что я использую привязку SSL в web.конфигурации
<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>и я могу решить проблему с ответом г-на djroedger. Путем замены
<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>
еще одна проблема, которая случилась со мной дважды:
В IIS Expressapplicationhost.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, хотя использовался другой порт.удалить зло привязки или переместите его вниз.
Это анекдотический, как Подслушано от коллеги, но предположительно это проблема с chrome forcing https. Я обычно запускаю в firefox, поэтому я не видел эту проблему раньше. Использование firefox или ie работало для моего коллеги.
моя проблема была вызвана скрипач. Когда Fiddler падает, он иногда путается с настройками прокси-сервера. Просто запуск Fiddler, казалось, все исправил (возможно, он как-то сам себя ремонтирует).
Я только что восстановил свой компьютер. Этот поток дал мне подсказки, где я понял в настройках проекта>Web, проект был настроен на использование HTTP и HTTP-порта. Обновив его до HTTPS и правильного порта HTTPS, все снова начало работать.
чтобы перейти к другим ответам о настройке порта SSL между 44300 и 44399, мне не удалось изменить свойство SSL Enabled в Visual Studio и установить конкретный URL-адрес SSL. Другие ответы, такие как восстановление IIS Express, не помогли. Решение состояло в том, чтобы войти в него .против параллельные папки с sln файл, откройте папку config, а затем отредактировать файл applicationhost.конфигурационный файл. Затем я добавил строку https вручную и перезапустил VS.
<binding protocol="http" bindingInformation="*:24941:localhost" /> <binding protocol="https" bindingInformation="*:44301:localhost" />
The'проверка установки сертификата Digicert часто помогает в подобных ситуациях.
Я смог проверить, что SSL-сертификат, который был предпринят, был тем, который я ожидал, сравнивая серийный номер.
для меня @Jason Kleban ответ был фактической проблемой, но это может быть очень полезная утилита для проверки ваших основных утверждений о том, какой сертификат загружается.
в моем случае я просто забыл, что у меня есть привязка, настроенная для (в моем случае) https://localhost:44300 в полном IIS. Вы не можете иметь оба!

Comments