IT

IISExpress를 사용하여 SSL 연결 / 연결되어

lottoking 2020. 7. 12. 09:05
반응형

IISExpress를 사용하여 SSL 연결 / 연결되어


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

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

서버에 확실한 수 없습니다. 서버에 문제가 있거나 가지고 있지 않은 클라이언트 인증서가 필요합니다. 오류 코드 : ERR_SSL_PROTOCOL_ERROR

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

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

감사합니다


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


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

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


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 복구가 가능합니다.


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

  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ɐſ에 감사드립니다 (이 문제를 해결하는 데 도움이되었습니다)


내가있는 곳고있는 문제는 어느 시점에서 localhost에 HSTS를 활성화 하고 IIS Express의 http : // localhost : someport손상시키는 것을 목적으로하는 것 입니다.

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

수정?

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

위의 옵션 중 어느 것도 나를 위해 일하지 않습니다. 나는 다음을 수행해야했다.

  1. IIS Express 8.0 제거
  2. IIS Express의 내 문서 디렉토리에서 모든 구성을 삭제했습니다.
  3. IIS Express 8.0
  4. 내 로컬 컴퓨터에서 프로젝트를 삭제하고 TFS 용 버전을 다운로드했습니다.
  5. 프로젝트 실행 -SSL을 통해 실행 가능합니다.

이 행사 에서 단계를 얻었습니다 .

도움이 되셨기를 바랍니다.


필자의 경우 자체 서명 인증서를 생성하고 작동하도록했습니다. 단, 인증서가 오류 수 있기 때문에 브라우저에서 오류가 발생했습니다. 그래서 인증서를 인증서 스냅인의 수있는 루트 인증 기관> 인증서 폴더로 옮겼습니다. 작동, 하루 동안 Visual Studio를 닫았습니다.

다음날 프로젝트를 시작 원래 질문에 언급 된 오류를 발표했습니다. 문제는 IISExpress를 구성한 인증서가 개인> 인증서 폴더에 틀림없이 HTTPS가 작동을 중지 할 것입니다. IIS Express가있는 위치로 다시 끌 수 있습니다. IIS Express를 다시 시작할 때까지 계속 작동합니다.

매번 인증서를 앞뒤로 드래그하는 데 소란을 피우고 싶지 않고 두 위치에 인증서 사본을 배치하면 이제 모든 것이 잘 작동합니다.


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

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

이 문제가 발생하여 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 파트 4 아래의 sql-database / . 이로 인해 오류가 발생했습니다.


나에게 두 번 중요한 또 다른 문제 :
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 바인딩을 사용하는 것처럼 보입니다.

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


이 동료로부터 우연히들은 일화이지만, 크롬 강제 https의 문제라고합니다. 나는 보통 파이어 폭스에서 시작하지 않은 이전 에이 문제를 본 적이 없습니다. firefox 또는 ie를 사용하여 동료를 위해 일했습니다.


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

인증서 번호를 비교하여 시도중인 SSL 인증서가 예상했던 인증서인지 확인할 수 있습니다.

여기에 이미지 설명 입력

나를 @Jason Kleban 대답이 실제 문제 였지만 이것은 어떤 인증서가로드되고 있는지에 대한 기본 주장을 확인하는 데 매우 유용한 유틸리티가 수 있습니다.


이 기사 에서 IISExpress 및 vs 디렉토리를 제거하고 SSL 포트 범위 44300 ~ 44399 (포함)를 사용 하면 저에게 맞는 솜씨 .


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

  • IIS에서 새 사이트 만들기 (Express 아님)
  • 필요한 포트에 HTTPS 바인딩
  • SSL 인증서의 경우 IIS Express 개발 인증서를 선택 합니다.
  • 설치가되면 설치가 가능합니다.

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


내 문제는 Fiddler로 인해 발생했습니다. Fiddler가 충돌하면 가끔 프록시 설정이 엉망이됩니다. 피들러를 실행하는 것만으로도 모든 문제가 해결되는 것 같았습니다 (자체면 자체적으로 복구 수 있습니다).


방금 컴퓨터를 다시 만들었습니다. 이 표준은 프로젝트 설정> 웹에서 프로젝트가 HTTP 및 HTTP 포트를 사용하도록 구성되어 있습니다. 깨달은 단서를 제공했습니다. HTTPS와 올바른 HTTPS 포트로 업데이트하면 모든 것이 다시 작동하기 시작했습니다.


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

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

제 경우 에는 전체 IIS에서 https : // localhost : 44300대한 바인딩이 설정되어 사실을 잊었습니다 . 둘 다 번 수는 없습니다!


제 경우에는 필요한 경우 할 때 localhost URL이 https : // localhost 로 리디렉션 . 이 아무것도 변경하지 않고 한 순간에서 다른 순간으로 교체습니다. 브라우저에 하드 리로드를 하여이 문제를 해결했습니다. 여기 링크

참고 URL : https://stackoverflow.com/questions/19417219/ssl-connection-connection-reset-with-iisexpress

반응형