[ssl] 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을 사용하여 디버깅하는 것이 중요하지 않고 URLRewrite를 사용하는 경우 <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 대신 URL에서 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를 다시 시작할 때까지 계속 작동합니다.

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