IISExpress를 사용한 SSL 연결 / 연결 재설정


140

IISExpress와 함께 새로운 Visual Studio 2013을 처음으로 사용하고 있습니다 (이전에는 VS2010에서 ASP.net 개발 서버를 사용했습니다). 프로젝트 디버깅에 문제가 있습니다.

이것이 내가 Chrome에서 보는 것입니다.

서버에 안전하게 연결할 수 없습니다. 서버에 문제가 있거나 가지고 있지 않은 클라이언트 인증 인증서가 필요할 수 있습니다. 오류 코드 : ERR_SSL_PROTOCOL_ERROR

프로젝트 URL이 https URL을 사용하도록 Properies-> 웹 파일을 업데이트했습니다. 그러나 그렇게 한 후에는 시작할 때 새로운 오류가 발생합니다.

localhost에 대한 연결이 중단되었습니다. 오류 코드 : ERR_CONNECTION_RESET

감사


비슷한 질문에 대한 내 답변 확인 stackoverflow.com/questions/28195505/…
Bogac

1
아래 답변에서 쉽게 놓칠 수 있기 때문에 여기에 게시하십시오. 수락 된 답변이 작동하지 않으면 대신 시도해보십시오. stackoverflow.com/questions/20036984/…
IWriteApps

포트 번호를 변경하면 나에게 효과적입니다.
토룬

답변:


47

web.config에서 URLRewrite를 사용하여 SSL 연결을 강제하는 경우 로컬 호스트 주소를 다시 작성하여 https를 강제로 설정했을 수 있습니다. SSL을 사용하여 디버깅하는 것이 중요하지 않고 URLRewrite를 사용하는 경우 <add input="{HTTP_HOST}" pattern="localhost" negate="true" />web.config 파일의 다시 쓰기 섹션에 추가 하십시오. 로컬 호스트 주소에 대한 다시 쓰기를 중지하지만 프로덕션 환경에 그대로 둡니다. URLRewrite를 사용하지 않거나 SSL을 사용하여 디버그해야하는 경우 http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx 가 도움이 될 수 있습니다. VS2010 용이지만 VS2013에도 충분합니다.


7
URLrewrite에 해당 줄을 추가하고 포트를 ": 44300- : 44398"범위로 변경하여 작동 시켰습니다 (uosef의 아래 답변 참조)
Rubanov

예! 내 마음을 거의 잃어버린 몇 시간 후에, 이것이 나를 도왔다!
waka

363

Visual Studio 2013 / IIS Express 구성 앱 포트 번호 가 범위 : 44300- : 44398이 아니기 때문에 ERR_CONNECTION_RESET이 발생했습니다 . ( 이 범위를 벗어나기 위해 경고를 해제하지 않아도됩니다 .)이 범위 내에서 포트 번호를 변경하면 작동하도록해야합니다.

netsh http show sslcert > sslcert.txt출력 을 검토 한 후 포트 번호에 대해 최근에 읽은 내용을 클릭하여이를 알았습니다.


53
이 게시물에 대해 한 가지만 투표 한 것이 유감입니다. SO보다 먼저 이런 종류의 난센스를 어떻게 고쳤습니까?
quillbreaker

6
사용 netsh http add sslcert ...하려는 포트를 추가 할 수도 있습니다. 어떤 경우에는 유용합니다.
brazilianldsjaguar

3
Crikey 이것은 내가 다시는 얻을 수 없을 많은 시간을 먹었다 ... netsh구조에, 이것은 블로그 게시물에 가치가있다 ...
Jim


2
여전히 Visual Studio 2017 / IIS Express 10과 함께 작업
TvdH

87

IIS Express에서 생성 한 인증서와 충돌 할 수 있으므로 이전의 'localhost'인증서를 제거하십시오. 이 같은 오류 (ERR_SSL_PROTOCOL_ERROR)가 있었고 많은 "솔루션"을 시도한 후에 마침내 알아내는 데 몇 시간이 걸렸습니다. 내 실수는 내가 'localhost'인증서를 만들었고 그 중 두 개가 있다는 것입니다. 둘 다 삭제하고 IIS Express에서 다시 만들어야했습니다.

'localhost'인증서를 확인하고 제거하는 방법은 다음과 같습니다.

  • 시작에서-> mmc.exe를 입력하십시오.
  • 파일-> 스냅인 추가 / 제거 ...
  • 인증서-> 추가>-> 컴퓨터 계정-> 로컬 컴퓨터를 선택하십시오.
  • 인증서> 개인> 인증서에서 확인
  • 존재하는 로컬 호스트 인증서의 이름이 "IIS Express Development Certificate"인지 확인하십시오. 그렇지 않은 경우 삭제하십시오. 또는 여러 개인 경우 모두 삭제하십시오.

Visual Studio에서 프로젝트를 선택하고 속성 탭에서 SSL = true를 활성화하십시오. 저장, 빌드 및 실행 IIS Express는 새로운 'localhost'인증서를 생성합니다.

참고 : 작동하지 않으면 다음을 시도하십시오 : 'localhost'인증서를 제거하기 전에 VS 프로젝트에서 IIS Express를 비활성화하고 실행중인 모든 응용 프로그램을 중지하십시오. 또한 '제어판> 프로그램'및 IIS Express 복구로 이동할 수 있습니다.


2
필자의 경우 IIS 인증서 설정이 손실되었지만 인증서는 디스크에있었습니다. 웹 사이트에서 SSL 인증서 설정 및 HTTPS 바인딩 업데이트가 도움이되었습니다. 콤보 상자에서 SSL 인증서가 이미 선택된 경우에도 https 바인딩을 다시 설정해야합니다.
opewix

10
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

36

이 문제를 해결하는 데 도움이 된 단계를 요약하고 있습니다.

  1. IIS Express에서 사용하는 SSL 포트 범위가 44300-44398 사이인지 확인하십시오.

설치하는 동안 IIS Express는 Http.sys를 사용하여 SSL 사용을 위해 포트 44300-44399를 예약합니다. 이를 통해 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

응용 프로그램 ID : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. 또한 IIS Express 관리 콘솔 (RUN (Ctrl + R)-> inetmgr.exe)을보고 해당 인증서가 서버 인증서에 있는지 확인하십시오.

(IIS ()-> 서버 인증서 열기 섹션에서 ServerRoot->를 클릭하십시오.)

  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 단계에서 찾은)와 연결된 기본 인증서이거나 새 인증서로 추가하려는 인증서입니다.

추신 : 귀하의 답변 uosɐſ에 감사드립니다 (이 문제를 해결하는 데 도움이되었습니다)


8
하, 포트를 53xxx에서 44300으로 변경하면 나에게 속임수가되었습니다.
cdonner

IIS에서 IISExpress로 전환 한 후이 작업을 수행해야합니다
K0D4

2
포트를 변경하면 나에게도 효과가있었습니다. 포트가이 범위에 있어야하는 이유와 구성 위치를 아는 사람이 있습니까?
Jim

승리를위한 항구 변경! 포트가 왜 44300-44398 범위에 있어야하는지에 대한 Jim의 의견에 따랐습니까?
TChadwick

설치 중에 IIS Express는 Http.sys를 사용하여 SSL 사용을 위해 포트 44300-44399를 예약합니다. 이를 통해 IISExpress의 표준 사용자 (권한이없는)가 SSL을 구성하고 사용할 수 있습니다. 이에 대한 자세한 내용은 여기를 참조하십시오-> docs.microsoft.com/en-us/iis/extensions/using-iis-express/…
Karthik

26

내가 겪고있는 문제는 어느 시점에서 localhost에 HSTS를 활성화 하고 IIS Express의 http : // localhost : someport 를 손상시킬 것이라는 것을 깨닫지 못하고 나와 관련이 있습니다.

HSTS는 브라우저 (내 경우에는 Chrome)에게 항상 HTTPS를 사용하여 URL을 요청하도록 지시합니다. 따라서 MVC 5 앱에서 SSL을 활성화하지 않아도 브라우저는 여전히 HTTP 대신 URL에서 HTTPS를 사용하여 내 사이트에 액세스하려고 시도합니다.

수정?

  1. chrome : // net-internals / # hsts로 서핑
  2. 삭제 섹션에서 "localhost"를 입력하고 Chrome에서 레코드를 삭제하십시오.

1
그렇습니다.이 문제의 원인 일 수 있습니다. 이것은 고마워했다.
코스모

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-아니오, 무료입니다.
Eric Kelly

6

필자의 경우 자체 서명 된 인증서를 작성하고 인증서를 신뢰할 수 없기 때문에 브라우저에서 오류가 발생하는 것을 제외하고 작동했습니다. 따라서 인증서를 인증서 스냅인의 신뢰할 수있는 루트 인증 기관> 인증서 폴더로 옮겼습니다. 그것은 효과가 있었고 나는 하루 동안 Visual Studio를 닫았습니다.

다음 날, 나는 프로젝트를 시작했고 원래 질문에 언급 된 오류를 받았다. 문제는 IISExpress를 구성한 인증서가 개인> 인증서 폴더에 존재해야합니다. 그렇지 않으면 HTTPS가 작동하지 않습니다. IIS Express가 성공적으로 시작되면 인증서를 신뢰할 수있는 위치로 다시 끌어 올 수 있습니다. IIS Express를 다시 시작할 때까지 계속 작동합니다.

매번 인증서를 앞뒤로 드래그하여 소란을 피하고 싶지 않기 때문에 인증서 사본을 두 곳에 모두 배치하면 모든 것이 잘 작동합니다.


2
인증서 스냅인 내부의 인증서를 일반 파일처럼 복사 + 붙여 넣기 할 수 있습니다. 그것을 알아 내기 위해 몇 년이 걸렸습니다.
Simon_Weaver

6

web.config에서 SSL 바인딩을 사용하기 때문에 Visual Studio 2015에서도 동일한 문제가 있습니다.

<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>

그리고 Mr.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>

4

이 문제가 발생했습니다. FilterConfig.cs에서 전역 요구 https에 대해 내 사이트를 구성했습니다.

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- ENABLE SSL part 4에서 sql-database / 가 발생하여 오류가 발생했습니다.


4

내가 가진 문제는 @Jason Kleban의 답변과 관련이 있었지만 IIS Express의 Visual Studio 속성에서 내 설정에 작은 문제가있었습니다.

포트를 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 바인딩을 대체하는 것 같습니다.

사악한 바인딩을 제거 하거나 아래로 이동하십시오.


이것은 나를 위해 그것을 고쳤다. 감사!
Rich

3

이 기사 에서 IISExpress 및 vs 디렉토리를 제거하고 44300 ~ 44399 (포함)의 SSL 포트 범위를 사용 하면 나에게 도움 되었습니다.


이것에 감사드립니다-VS에서 인증서를 신뢰하라는 메시지가 표시되지 않았다는 점을 제외하고는 나를 위해 일했습니다.
Dave

2

이것은 동료가 들었던 것으로 일화 적이지만 크롬 강제 https의 문제입니다. 나는 보통 파이어 폭스에서 시작 하므로이 문제를 전에 보지 못했습니다. 파이어 폭스를 사용하거나 동료를 위해 일했습니다.


1

내 문제는 Fiddler에 의해 발생했습니다. 피들러가 크래시되면 가끔 프록시 설정이 엉망이됩니다. 단순히 Fiddler를 시작하면 모든 것을 고치는 것처럼 보였습니다 (어쩌면 어떻게 든 자체 복구됩니다).


1

' Digicert 인증서 설치 검사기 '는 종종 이와 같은 상황에서 유용합니다.

시도한 SSL 인증서가 일련 번호를 비교하여 예상했던 것임을 확인할 수있었습니다.

여기에 이미지 설명을 입력하십시오

나에게 @Jason Kleban의 대답은 실제 문제 였지만 이것은로드되는 인증서에 대한 기본 어설 션을 확인하는 매우 유용한 유틸리티 일 수 있습니다.


와, 고마워 나를 위해 일한 유일한 솔루션.
Fernando Silva

1

이 경우 필요 44300-44399 범위의 포트 외부 사용, 여기에 해결 방법입니다 :

  • IIS에서 새 사이트 만들기 (Express가 아님)
  • 필요한 포트에 HTTPS 바인딩
  • SSL 인증서의 경우 IIS Express Development Certificate를 선택하십시오.
  • 사이트를 만든 후에는 실제로 실행할 필요가 없으므로 사이트를 중지하십시오.

이것은 IIS Express Development 인증서를 해당 포트에 등록하며 44300-44399 범위 요구 사항을 충족하는 가장 쉬운 방법입니다.


0

방금 컴퓨터를 재건했습니다. 이 스레드는 프로젝트 설정> 웹에서 깨달은 단서를 제공했으며 프로젝트는 HTTP 및 HTTP 포트를 사용하도록 구성되었습니다. HTTPS 및 올바른 HTTPS 포트로 업데이트하면 모든 것이 다시 작동하기 시작했습니다.


0

44300과 44399 사이의 SSL 포트 설정에 대한 다른 답변을 따르기 위해 Visual Studio에서 SSL 사용 속성을 변경하거나 특정 SSL URL을 설정할 수 없었습니다. IIS Express 복구와 같은 다른 답변은 도움이되지 않았습니다. 해결책은 sln 파일과 평행 한 .vs 폴더로 이동하여 구성 하위 폴더를 연 다음 applicationhost.config 파일을 편집하는 것입니다. 그런 다음 https 줄을 수동으로 추가하고 VS를 다시 시작했습니다.

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


0

필자의 경우 로컬 호스트 URL 은 디버깅 할 때 https : // localhost 로 리디렉션되었습니다 . 이것은 아무런 변화없이 한 순간에서 다른 순간으로 발생했습니다. 브라우저로 다시로드 하여이 문제를 해결했습니다. 여기 링크

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.