Aspnetcore: 약한 Http2 암호로 인해 https에서 호스트에 연결할 수 없음

에 만든 2019년 03월 31일  ·  75코멘트  ·  출처: dotnet/aspnetcore

버그 설명

브라우저는 HTTP2에 사용 된 암호에 만족하지 않습니다.
ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY 및 이에 상응하는 크롬

잘못된 해결 방법

파이어 폭스 전용
나는 about:config 에 들어가서 약한 사이퍼 검사를 비활성화했습니다. 이것은 실제로 효과가 있습니다.

Kestrel IOptions<> 를 통해 HTTP2를 완전히 비활성화하는 간단한 방법이 있습니까?

재현하려면

동작을 재현하는 단계 :

  1. 모든 sdk를 제거했습니다.
  2. 프로그램 파일 / 사용자 / appdata / temp에서 폴더를 제거했습니다.
  3. https://dot.net 에서 sdk 2.2.1053.0.0-preview3
  4. ASP.NET Core 버전 : preview3와 함께 제공되는 버전
  5. dotnet new webapi -n foo
  6. UseHsts 주석 처리
  7. UseHttpsRedirection() 주석 처리
  8. dotnet run --project foo.csproj
  9. http 끝점에 도달 => 작동
  10. https 엔드 포인트 히트 => 거부 됨

예상되는 행동

나는 시도했다 :

  • dotnet dev-certs http --clean
  • dotnet dev-certs http --trust
  • .vs/ 삭제
  • launchSettings.json 를 다른 것으로 변경
  • UseHttpsRedirection() 삭제됨
  • UseHsts() 제거됨
  • 브라우저에서 IP / DNS에 대해 작동하지 않음

내가 한 모든 것이 Vs2019를 업데이트 한 것이 확실합니다. 2 주 전에 동일한 SDK (또는 최신 win10 내부자-빠른 링 업데이트)에서 작동했습니다.

>dotnet --version
3.0.100-preview3-010431
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.0.0-preview3-19153-02" />
  </ItemGroup>

</Project>
Done area-commandlinetools bug servers-kestrel

가장 유용한 댓글

https://github.com/aspnet/AspNetCore/issues/8952#issuecomment -482499042에 오타가 있지만 수정하면 다음과 같이 작동합니다.

dotnet dev-certs https --clean
dotnet dev-certs https --trust

모든 75 댓글

서버는 어떤 OS에 있습니까? 우리는 2012 / Win8에서 이것을 보았습니다.

다음 옵션을 사용하여 HTTP / 2를 옵트 아웃 할 수 있습니다.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#listenoptionsprotocols
예 :

{
  "Kestrel": {
    "EndPointDefaults": {
      "Protocols": "Http1"
    }
  }
}

여기에서 플랫폼 요구 사항을 참조하십시오.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#http2 -support

Windows 10-빠른 링 내부자
Vs2019 미리보기
netcoreapp3.0.0 미리보기
(엣지 뭉치 ^^)

지난주에 잘 작동했습니다. 내부자 범프 + vs2019의 최신 미리보기 이후

또한 Win2016 서버용 HTTP2를 비활성화하기 위해 2 개의 레지스트리 키를 추가하려고했습니다.
어떤 브라우저에도 영향을 미치지 않았습니다.

이러한 등록 키는 IIS / Http.Sys 전용입니다. Insiders에 회귀가 있는지 궁금합니다. 뿡뿡

개발자에게 이런 식으로 끝날 수있는 서버에서 실행 중임을 알리는 방법입니까?

예를 들어 현재 컴퓨터 / 서버에서 사용할 수있는 암호를 나열하는 dotnet tool 예 : 잠재적 인 약한 암호 등을 나타내는 색상)입니다.
또는 나열된 암호가 시작시 너무 약한 경우 서버를 공격적이고 failfast로 만드는 부울입니다.

이것은 "허용되는"목록을 알아야 할 필요가 있었고 그러한 목록이 존재하는지, 그리고 그것이 가능한지 전혀 알 수 없습니다.

그것이 어디에서 왔는지 깨닫는 데 오랜 시간이 걸렸습니다.

특정 Windows 빌드 번호를 제공 할 수 있습니까?

더 이상 모든 rtm win10 빌드에서 작동한다고 말할 수없는 경우에만 이러한 종류의 도구를 추가 할 것입니다.

1803 업데이트부터 IIS를 사용하면 바인딩별로 Http.Sys를 제어 할 수 있습니다. 더 이상 전체 서버에 대해 HTTP / 2를 비활성화 할 필요가 없습니다.

image

즉, 전역 등록 키는 여전히 작동합니다. Windows 빌드 번호를 공유해 주시면 조사하겠습니다.

@shirhatti 그들은 Kestrel을 사용하고 있습니다.

🤦‍♂️. 내 이전 댓글을 무시합니다.

또한 내가 고칠 수 있다면 Http2를 비활성화하고 싶지 않습니다.)

@Tratcher
도움이 되나요?

> systeminfo
OS Version:                10.0.18362 N/A Build 18362
OS Configuration:          Standalone Workstation

image

> Get-TlsCipherSuite


KeyType               : 0
Certificate           :
MaximumExchangeLength : 0
MinimumExchangeLength : 0
Exchange              :
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 4866
CipherSuite           : 4866
Cipher                : AES
Name                  : TLS_AES_256_GCM_SHA384
Protocols             : {772}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 0
MinimumExchangeLength : 0
Exchange              :
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 4865
CipherSuite           : 4865
Cipher                : AES
Name                  : TLS_AES_128_GCM_SHA256
Protocols             : {772}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 0
MinimumExchangeLength : 0
Exchange              :
HashLength            : 0
Hash                  :
CipherBlockLength     : 0
CipherLength          : 0
BaseCipherSuite       : 0
CipherSuite           : 0
Cipher                :
Name                  : TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
Protocols             : {}

KeyType               : 0
Certificate           : ECDSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49195
CipherSuite           : 49195
Cipher                : AES
Name                  : TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 49200
CipherSuite           : 49200
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49199
CipherSuite           : 49199
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 1024
MinimumExchangeLength : 1024
Exchange              : DH
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 159
CipherSuite           : 159
Cipher                : AES
Name                  : TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 1024
MinimumExchangeLength : 1024
Exchange              : DH
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 158
CipherSuite           : 158
Cipher                : AES
Name                  : TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 0
MinimumExchangeLength : 0
Exchange              :
HashLength            : 0
Hash                  :
CipherBlockLength     : 0
CipherLength          : 0
BaseCipherSuite       : 0
CipherSuite           : 0
Cipher                :
Name                  : TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
Protocols             : {}

KeyType               : 0
Certificate           : ECDSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49187
CipherSuite           : 49187
Cipher                : AES
Name                  : TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 384
Hash                  : SHA384
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 49192
CipherSuite           : 49192
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49191
CipherSuite           : 49191
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : ECDSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 49162
CipherSuite           : 49162
Cipher                : AES
Name                  : TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : ECDSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49161
CipherSuite           : 49161
Cipher                : AES
Name                  : TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 49172
CipherSuite           : 49172
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 65536
MinimumExchangeLength : 0
Exchange              : ECDH
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 49171
CipherSuite           : 49171
Cipher                : AES
Name                  : TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 157
CipherSuite           : 157
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_256_GCM_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 156
CipherSuite           : 156
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_128_GCM_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 61
CipherSuite           : 61
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_256_CBC_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 60
CipherSuite           : 60
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_128_CBC_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 53
CipherSuite           : 53
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_256_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 47
CipherSuite           : 47
Cipher                : AES
Name                  : TLS_RSA_WITH_AES_128_CBC_SHA
Protocols             : {769, 770, 771, 65279...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 8
CipherLength          : 168
BaseCipherSuite       : 10
CipherSuite           : 10
Cipher                : 3DES
Name                  : TLS_RSA_WITH_3DES_EDE_CBC_SHA
Protocols             : {769, 770, 771, 768...}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 1
CipherLength          : 0
BaseCipherSuite       : 59
CipherSuite           : 59
Cipher                :
Name                  : TLS_RSA_WITH_NULL_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           : RSA
MaximumExchangeLength : 16384
MinimumExchangeLength : 512
Exchange              : RSA
HashLength            : 160
Hash                  : SHA1
CipherBlockLength     : 1
CipherLength          : 0
BaseCipherSuite       : 2
CipherSuite           : 2
Cipher                :
Name                  : TLS_RSA_WITH_NULL_SHA
Protocols             : {769, 770, 771, 768...}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 0
MinimumExchangeLength : 0
Exchange              :
HashLength            : 0
Hash                  :
CipherBlockLength     : 0
CipherLength          : 0
BaseCipherSuite       : 0
CipherSuite           : 0
Cipher                :
Name                  : TLS_PSK_WITH_AES_256_GCM_SHA384
Protocols             : {}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 256
MinimumExchangeLength : 0
Exchange              : PSK
HashLength            : 0
Hash                  :
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 168
CipherSuite           : 168
Cipher                : AES
Name                  : TLS_PSK_WITH_AES_128_GCM_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 256
MinimumExchangeLength : 0
Exchange              : PSK
HashLength            : 384
Hash                  : SHA384
CipherBlockLength     : 16
CipherLength          : 256
BaseCipherSuite       : 175
CipherSuite           : 175
Cipher                : AES
Name                  : TLS_PSK_WITH_AES_256_CBC_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 256
MinimumExchangeLength : 0
Exchange              : PSK
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 16
CipherLength          : 128
BaseCipherSuite       : 174
CipherSuite           : 174
Cipher                : AES
Name                  : TLS_PSK_WITH_AES_128_CBC_SHA256
Protocols             : {771, 65277}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 256
MinimumExchangeLength : 0
Exchange              : PSK
HashLength            : 384
Hash                  : SHA384
CipherBlockLength     : 1
CipherLength          : 0
BaseCipherSuite       : 177
CipherSuite           : 177
Cipher                :
Name                  : TLS_PSK_WITH_NULL_SHA384
Protocols             : {771, 65277}

KeyType               : 0
Certificate           :
MaximumExchangeLength : 256
MinimumExchangeLength : 0
Exchange              : PSK
HashLength            : 256
Hash                  : SHA256
CipherBlockLength     : 1
CipherLength          : 0
BaseCipherSuite       : 176
CipherSuite           : 176
Cipher                :
Name                  : TLS_PSK_WITH_NULL_SHA256
Protocols             : {771, 65277}

@tebeco 협상중인 내용을 정확히 볼 수 있도록 wireshark 추적을 제공 할 수 있습니까? 감사!

cc @anurse

당신이 찾고있는 것을 추출하기 위해 어떤 필터를 사용할 것인가, 내가 원하지 않는 데이터를 유출 할 수 있다고 확신한다.
또한 나는 실제로 무언가를 본다는 의심이 있습니다.

  • 크롬을 사용하면 Kestrel에서 로그가 없습니다.
  • Firefox를 사용하면 다음과 같습니다.
info: Microsoft.AspNetCore.Server.Kestrel[20]
      Connection id "xxxxxxxxxxxxxxxxxxx" request processing ended abnormally.
System.IO.IOException: The decryption operation failed, see inner exception. ---> System.ComponentModel.Win32Exception: An unknown error occurred while processing the certificate.
   --- End of inner exception stack trace ---
   at System.Net.Security.SslStreamInternal.ReadAsyncInternal[TReadAdapter](TReadAdapter adapter, Memory`1 buffer)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Adapter.Internal.AdaptedPipeline.ReadInputAsync(Stream stream)
   at System.IO.Pipelines.PipeCompletion.ThrowLatchedException()
   at System.IO.Pipelines.Pipe.GetReadResult(ReadResult& result)
   at System.IO.Pipelines.Pipe.GetReadAsyncResult()
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)
   at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequestsAsync[TContext](IHttpApplication`1 application)

지금은 Firefox를 사용하여 캡처를 계속할 것이지만 wireshark를 설치할 때 잘못된 옵션을 선택하거나 (루프백 / wifi / 관리자 등에 대한 질문이 많음 ...) 너무 많은 옵션에서 opt_out이있을 수 있습니다.

또한 나는이 필터를 사용하려고했습니다 : tcp.port == 5043 (Kestrel 포트로 추정 됨)
그리고 나는 아무것도 보지 않는다

또한 나는 H2를 비활성화하지 않았다. soooo는 그 정상이다.

(이중 반올림 값은 보너스입니다)

image

뿡뿡

Wireshark 캡처를 정말로하고 싶습니다.
랩톱 (WiFi)을 사용하고 kestrel에 localhost를 사용하고 있습니다.
현재 ~ 6-8 개의 네트워크 어댑터가있는 노트북

깨끗하고 멋진 캡처를하는 가장 좋은 방법은 무엇입니까?

필요한 것을 필터링하기 위해 어떤 캡처 필터를 사용해야합니까?

나는 이것을 18356.21에서 재현 할 수 있으며 # 8409도 18362.1에보고합니다.

IE와 Edge에서 작동하므로 Windows가 지원하는 암호와 Chrome이 지원하는 암호가 충돌합니다.

@Tratcher
Well Chrome과 Firefox
그건 좀 더럽 네요

[dev] 인증서 자체가 안전하지 않은 것은 아니지만 특정 암호 슈트와 만 호환됩니다. 즉, EC 사이퍼에서 작동하지 않는다고 생각합니다. 협상은 인증서 호환 암호로 돌아가고 분명히 HTTP / 2 요구 사항을 충족하는 암호를 찾지 못합니다.

다른 스레드에서 @Tratcher의견

무엇을 도와 드릴까요?

@tebeco 나는 우리가 지금 진행하기에 충분하다고 생각합니다, 감사합니다.

미리보기로 가져 오기 5.

가능한 경우 해결 방법은 Vs.net 및 IIS Express를 사용하고 이러한 방식으로 디버깅하는 것입니다. IIS Express 개발 인증서가 Windows 내부 릴리스에서도 올바르게 작동하기 때문입니다. 이것을 치는 사람들을 위해 지금 문제를 해결합니다.

또 다른 데이터 포인트 : 우리는 Kestrel에서 IIS Express의 인증서를 사용하여 테스트했으며 또한 작동했습니다. AspNetCore 개발 인증서로 변경해야하는 사항을 확인할 수 있습니다.

@Tratcher 그렇게 할 단계가 있습니까? 지금은 달콤한 해결 방법이 될 것입니다. 효과가있어서 다행입니다!

@anurse 코드 샘플에 붙여 넣을 수 있습니까?

네. 3.0 용 개발 인증서를 수정하려고하지만 임시 해결 방법으로 Kestrel에서 직접 IIS Express 개발 인증서를 사용할 수 있습니다.

이것은 Windows에서만 작동하며 (지금까지 문제는 그곳에서만보고되었습니다) IIS Express를 설치하고 구성해야합니다 (VS 설치만으로 충분합니다). 실제로 사이트를 호스팅 하기 사용할 필요는 없습니다. 단지 개발 인증서를 빌릴뿐입니다. :).

먼저 사용자 인증서 저장소에서 IIS Express 인증서를 찾아 지문을 가져와야합니다. 다음 PowerShell 스크립트가 트릭을 수행합니다.

dir Cert:\CurrentUser\Root\ | Where { $_.FriendlyName -like "IIS Express*" } | Select Thumbprint

지문이 있으면 Program.cs 에 약간의 코드를 작성하여 해당 인증서를 저장소에서 가져와 Kestrel에 사용할 수 있습니다.

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();

                // Add this section below
                webBuilder.ConfigureKestrel(options =>
                {
                    options.ConfigureHttpsDefaults(ssl =>
                    {
                        // Open the Current User's Trusted Root Certificate store
                        var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
                        store.Open(OpenFlags.ReadOnly);

                        // Find the IIS Express Certificate
                        var cert = store.Certificates.Find(X509FindType.FindByThumbprint, "<<put the hex thumbprint value in here>>", validOnly: false);
                        ssl.ServerCertificate = cert.Cast<X509Certificate2>().First();
                    });
                });
            });
}

@anurse 굉장합니다! 감사!

개발 인증서를 업데이트해야합니다. @javiercn 은 당신이 볼 수있는 것입니까? Win 10 18356의 IIS Express Dev Cert는 제대로 작동하지만 우리는 그렇지 않습니다. 우리가해야 할 일은 동일한 요구 사항을 충족하는지 확인하는 것뿐입니다.

Windows 10 19H1에서 개발자 인증서가 완전히 손상되었으므로 미리보기 5의 우선 순위가 높습니다.

cc @mkArtakMSFT

@anurse 문제를 읽었지만 실행 가능해야합니다. @blowdart 에게

그것이 제 이해입니다. 내가 말했듯이, 우리는 IIS Express 인증서가 제대로 작동 하고 있다는 것을 알고 있습니다. 단지 무엇이 다른지 파악하고 해당 변경 사항을 인증서에도 적용하면됩니다.

@shirhatti IIS 인증서에서 변경된 사항을 구체적으로 알고있는 사람을 아십니까? 변경 사항을 알고 있다면 인증서 세부 사항에 대한 다이빙을 절약하는 데 도움이 될 수 있습니다. :)

Windows 10 컴퓨터를 만들고 최신 내부자 빌드로 업데이트 한 다음 vs (IIS가 인증서를 설치하도록)를 설치하여이를 살펴 보았습니다.

인증서에서 아무것도 볼 수 없었습니다. 누구든지 "작업 인증서"를 내보내고 나와 함께 볼 수 있도록 공유 할 수 있습니까? 공개 부분 만 필요합니다.

Certs.zip

비교할 수 있도록 여기에 둘 다 있습니다. 또한 ASP.NET Core 인증서는 현재 사용자의 개인 저장소에 있고 IIS Express 인증서는 중요한 경우 로컬 컴퓨터의 개인 저장소에 있습니다.

@anurse 나는 이것을 보았습니다. 인증서는 기본적으로 동일하지만 (@ JohnGalt1717에서 제공 한 인증서를 기반으로) 다음과 같은 몇 가지 사항이 있습니다.

  • 기본 제약 : 우리는 그것들을 넣지 만 IIS는 그렇지 않습니다. 그것들은 중요하지 않습니다.
  • 키 사용 : IIS는 디지털 서명 및 데이터 암호화를 추가하는 동안 키 암호화 만 추가합니다.

내 작업 이론은 해결되는 TLS 제품군이 둘간에 다르다는 것입니다. @Tratcher 두 인증서에 대해 협상 된 제품군을 얻을 수 있습니까? 어떤 이유로 우리 인증서를 사용하면 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256이 선택되지 않을 수 있습니다. (키 교환을위한 Eliptic Curve Diffie-Helman Ephemeral, 인증을위한 RSA, 암호화를위한 AES128 Galois Counter Mode를 읽습니다.)

이를 기반으로 할 수있는 해결책은 단순히 키 사용에 디지털 서명을 추가하는 것입니다. 즉, Kestrel과 IIS에서 사용하는 기본 암호 모음 세트를 살펴보고 비교해야한다고 생각합니다. 제대로 고치지 마십시오.

@anurse 아래 powershell 스 니펫은 디지털 서명을 추가하여 "aspnetcore 호환"https 인증서를 생성합니다. 나는 이것을 Win 10 내부자 빌드에서 재현하려고 노력했지만 할 수 없었습니다. 팀원에게 시험해 볼 수 있습니까?

더 중요한 것은 IIS와 Kestrel에서 제공하는 암호 제품군을 검토해야한다는 것입니다.

function TryCreateAspNetCoreCertUsingPowershell () {
    $ekuOidCollection = [System.Security.Cryptography.OidCollection]::new();
    $ekuOidCollection.Add([System.Security.Cryptography.Oid]::new("1.3.6.1.5.5.7.3.1","Server Authentication"));
    $sanBuilder = [System.Security.Cryptography.X509Certificates.SubjectAlternativeNameBuilder]::new();
    $sanBuilder.AddDnsName("localhost");

    $certificateExtensions = @(
        # Subject Alternative Name
        $sanBuilder.Build($true),        
        # ASP.NET Core OID
        [System.Security.Cryptography.X509Certificates.X509Extension]::new(
            "1.3.6.1.4.1.311.84.1.1",
            [System.Text.Encoding]::ASCII.GetBytes("ASP.NET Core HTTPS development certificate"),
            $false),
        # KeyUsage
        [System.Security.Cryptography.X509Certificates.X509KeyUsageExtension]::new(
            [System.Security.Cryptography.X509Certificates.X509KeyUsageFlags]::KeyEncipherment -bor [System.Security.Cryptography.X509Certificates.X509KeyUsageFlags]::DigitalSignature,
            $true),
        # Enhanced key usage
        [System.Security.Cryptography.X509Certificates.X509EnhancedKeyUsageExtension]::new(
            $ekuOidCollection,
            $true),
        # Basic constraints
        [System.Security.Cryptography.X509Certificates.X509BasicConstraintsExtension]::new($false,$false,0,$true))
    $parameters = @{
        Subject = "localhost";
        KeyAlgorithm = "RSA";
        KeyLength = 2048;
        CertStoreLocation = "Cert:\CurrentUser\My";
        KeyExportPolicy = "Exportable";
        NotBefore = Get-Date;
        NotAfter = (Get-Date).AddYears(1);
        HashAlgorithm = "SHA256";
        Extension = $certificateExtensions;
        SuppressOid = @("2.5.29.14");
        FriendlyName = "ASP.NET Core HTTPS development certificate"
    }
    New-SelfSignedCertificate <strong i="11">@parameters</strong>
}

어제 내부자 빌드를 사용했다면 19H1이 아닌 20H1입니다. 문제가있는 버전을 가져 오려면 릴리스 미리보기 링 또는 느린 링을 수행해야합니다. (현재 최종 19H1의 문제일까요?)

해당 EKU를 추가해도 괜찮습니다.

방금 문제를 재현 한 다음 @javiercn 의 업데이트 된 인증서를 설치하고 전환했으며 더 이상 업데이트 된 인증서로 문제

https://github.com/aspnet/AspNetCore/pull/9293/files PR이 KU를 업데이트하기 위해 나왔습니다.

PR이 합병되었습니다. 여기서 해결할 다른 것이 없다고 생각되면 닫으십시오.

어제 20H1로 업데이트했습니다.
3.0.0-previewX 미리보기에 병합이 포함되는지 잘 모르겠습니다.
그것에 대해 나를 깨달을 수 있습니까? preview4 또는 5?
(저는 밤마다 테스트 할 수 있지만 빠른 테스트 후에는 사용하지 않을 것입니다)

이것은 preview5의 일부입니다.

달리면

dotnet dev-certs http --clean

위의 powershell 스크립트와

dotnet dev-certs http --trust

차단을 해제해야합니다.

모두에게 감사합니다. 이제이 문제가 해결되었으며 Preview5 릴리스의 Known issues 에이를 포함하는 것과 관련하여 후속 조치를 취하겠습니다.

https://github.com/aspnet/AspNetCore/issues/8952#issuecomment -482499042에 오타가 있지만 수정하면 다음과 같이 작동합니다.

dotnet dev-certs https --clean
dotnet dev-certs https --trust

방금 미리보기 6을 설치했지만 여전히 발생했습니다.
Chrome에서 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY 합니다.

이전에 미리보기를 설치하지 않았고 SDK 2.0 이상 만 설치했습니다.

SDK / 런타임 버전 : 3.0.100-preview6-012264 .

dotnet --info 출력
.NET Core SDK (global.json 반영) :
버전 : 3.0.100-preview6-012264
커밋 : be3f0c1a03

런타임 환경 :
OS 이름 : Windows
OS 버전 : 10.0.18362
OS 플랫폼 : Windows
RID : win10-x64
기본 경로 : C : \ Program Filesdotnet \ sdk3.0.100-preview6-012264 \

호스트 (지원에 유용) :
버전 : 3.0.0-preview6-27804-01
커밋 : fdf81c6faf

설치된 .NET Core SDK :
2.1.402 [C : \ Program Filesdotnet \ sdk]
2.1.403 [C : \ Program Filesdotnet \ sdk]
2.1.500 [C : \ Program Filesdotnet \ sdk]
2.1.502 [C : \ Program Filesdotnet \ sdk]
2.1.503 [C : \ Program Filesdotnet \ sdk]
2.1.504 [C : \ Program Filesdotnet \ sdk]
2.1.505 [C : \ Program Filesdotnet \ sdk]
2.1.507 [C : \ Program Filesdotnet \ sdk]
2.1.600 [C : \ Program Filesdotnet \ sdk]
2.1.601 [C : \ Program Filesdotnet \ sdk]
2.1.602 [C : \ Program Filesdotnet \ sdk]
2.1.604 [C : \ Program Filesdotnet \ sdk]
2.1.700 [C : \ Program Filesdotnet \ sdk]
2.1.800-preview-009696 [C : \ Program Filesdotnet \ sdk]
2.2.100 [C : \ Program Filesdotnet \ sdk]
2.2.102 [C : \ Program Filesdotnet \ sdk]
2.2.104 [C : \ Program Filesdotnet \ sdk]
2.2.202 [C : \ Program Filesdotnet \ sdk]
2.2.204 [C : \ Program Filesdotnet \ sdk]
2.2.300 [C : \ Program Filesdotnet \ sdk]
3.0.100-preview6-012264 [C : \ Program Filesdotnet \ sdk]

설치된 .NET Core 런타임 :
Microsoft.AspNetCore.All 2.1.4 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.5 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.7 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.9 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.11 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.1 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.2 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.3 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.5 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.5 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.7 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.9 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.11 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.1 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.2 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.3 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.5 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0-preview6.19307.2 [C : \ Program Filesdotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.4 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.5 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.7 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.8 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.9 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.11 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.1 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.2 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.3 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.2.5 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.0-preview6-27804-01 [C : \ Program Filesdotnet \ shared \ Microsoft.NETCore.App]
Microsoft.WindowsDesktop.App 3.0.0-preview6-27804-01 [C : \ Program Filesdotnet \ shared \ Microsoft.WindowsDesktop.App]

나를 위해 https://github.com/aspnet/AspNetCore/issues/11283 과 관련이있을 수 있습니다.

뿡 빵뀨

preview6 dotnet 환경에서 다음 명령을 실행 해 보셨습니까?

dotnet dev-certs https --clean
dotnet dev-certs https --trust

이전 인증서가있을 가능성이 있습니다. 인증서를 업그레이드하는 로직을 추가했지만 그것이 preview6로 만들어 졌는지 또는 preview7에서 제공 될지 확실하지 않습니다.


해결 방법으로 시도했지만 --clean 가 실패합니다. 이 문제에 대해 https://github.com/aspnet/AspNetCore/issues/11283 을 만들었습니다.

@nphmuller 어떤 OS를 사용하고 있습니까?

인증서 관리자를 열고 인증서를 직접 정리할 수 있습니다 (이상적이라고 생각하지 않습니다)
Windows (Win + R)-> mmc-> enter-> (Ctrl + M (스냅인 추가)-> 인증서-> 내 사용자 계정-> 인증서-> 개인-> 인증서-> 'localhost '-> ASP.NET Core HTTPS ... 가있는 항목을 제거합니다.
신뢰할 수있는 루트 인증 기관의 인증서로 반복
dotnet dev-certs https --trust 재실행


작동합니다. 감사!
저는 Win 10 1903 (18362.175)을 사용 중입니다 ( dotnet --info 출력에서도 초기 의견에 작성했습니다).

제 생각에는 당신이 쓴 것처럼 업그레이드 로직이 미리보기 6으로 만들지 않았지만 미리보기 7에있을 것입니다.

@javiercn @nphmuller 동일한 문제가 발생하여 인증서를 수동으로 제거하고 dotnet dev-certs https --trust 사용하여 다시 생성 해 보았습니다. 작동했지만 이제 ERR_CERT_AUTHORITY_INVALID 오류가 발생합니다. Kestrel이 여전히 이전 인증서를 사용하고있는 것 같습니다. 어떤 아이디어?

브라우저 창을 닫았다가 다시 열었습니까? 브라우저는 인증서를 메모리에 캐시하므로 변경 사항을 표시하려면 새 브라우저를 닫고 열어야합니다.

네, 그렇습니다. 방금 컴퓨터를 다시 시작했습니다. 작동하지 않는 것 같습니다 (Chrome, Firefox, Edge에서 시도). 인증서를 캐시 할 수있는 장소가 있습니까? 인증서가 실제로 이전 인증서 인 것 같습니다.

3.0 SDK를 사용하여 인증서를 생성 했습니까?

네, 그렇게 생각합니다. dotnet --info 출력은 @nphmuller 와 유사합니다.

dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.0.100-preview6-012264
 Commit:    be3f0c1a03

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18362
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.0.100-preview6-012264\

Host (useful for support):
  Version: 3.0.0-preview6-27804-01
  Commit:  fdf81c6faf

.NET Core SDKs installed:
  2.1.202 [C:\Program Files\dotnet\sdk]
  2.1.500 [C:\Program Files\dotnet\sdk]
  2.1.502 [C:\Program Files\dotnet\sdk]
  2.1.503 [C:\Program Files\dotnet\sdk]
  2.1.504 [C:\Program Files\dotnet\sdk]
  2.1.505 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009426 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009472 [C:\Program Files\dotnet\sdk]
  2.1.600-preview-009497 [C:\Program Files\dotnet\sdk]
  2.1.600 [C:\Program Files\dotnet\sdk]
  2.1.601 [C:\Program Files\dotnet\sdk]
  2.1.602 [C:\Program Files\dotnet\sdk]
  2.1.604 [C:\Program Files\dotnet\sdk]
  2.1.700 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009648 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009748 [C:\Program Files\dotnet\sdk]
  2.2.200-preview-009804 [C:\Program Files\dotnet\sdk]
  2.2.200 [C:\Program Files\dotnet\sdk]
  2.2.201 [C:\Program Files\dotnet\sdk]
  2.2.202 [C:\Program Files\dotnet\sdk]
  2.2.204 [C:\Program Files\dotnet\sdk]
  2.2.300 [C:\Program Files\dotnet\sdk]
  3.0.100-preview6-012264 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.0.0-preview6.19307.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.6 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.11 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.0.0-preview6-27804-01 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.0.0-preview6-27804-01 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

창문에서도?

dotnet --info 그냥 SDK 나열
해당 폴더 또는 상위 폴더의 global.json의 영향을 받았을 수 있습니다.
동일한 이전 인증서를 다시 생성하게됩니다.

청소 해봐
dotnet --version
그런 다음 --trust 명령을 사용하십시오.

@javiercn 무슨 뜻이야? 저는 Windows를 사용하고 있습니다. 🙂

@tebeco dotnet --version3.0.100-preview6-012264 도 인쇄합니다.

문제는 실제로 그 순간에 해당 명령을 실행할 때 확인해야한다는 것입니다.

나는 정말로 따라갈 수 없다. 나는 무엇을해야합니까? 😕

완전히 정리하다
재부팅이 필요한지 모르겠다
그런 다음 --trust 하나를 다시 실행하기 전에 dotnet version 를 확인하십시오.

그것이 내가 이미 한 일입니다 (몇 번) 🙂-여전히 성공하지 못했습니다.

새로 설치된 VS2019 Preview 16.2 Preview 2가 있으며 이것은 Kestrel 프로젝트를 실행하는 첫 번째 ASP.NET 코어이며 동일한 문제가 발생합니다. 변경하지 않고 인증서를 새로 고치기 위해 clean / trust 명령을 시도했습니다.

dotnet --version
3.0.100- 미리보기 -010184

변경없이 .ConfigureKestrel ()이 추가 된 빈 프로젝트입니다.

@karaziox 3.0.100-preview-010184 SDK는 3.0.0-preview2에서 왔으며,이 문제는 preview6까지 수정되지 않았습니다. https://dotnet.microsoft.com/download/dotnet-core/3.0으로 이동하여 SDK 3.0.100-preview6-012264를 설치합니다.

@javiercn 무슨 뜻이야? 저는 Windows를 사용하고 있습니다. 🙂

@tebeco dotnet --version3.0.100-preview6-012264 도 인쇄합니다.

@Tratcher 문제는 여전히

수정 사항은 preview6이 아닌 preview7에 있다고 생각합니다. @jkotalik 확인할 수 있습니까?

dotnet 3.0.100-preview6-012264 및 VS 16.2.0 Preview 3.0 여전히 문제가 있습니다.

IIS는 기본 ASP.Net Core 응용 프로그램에서 제대로 작동하고 Kestrel은 ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY로 실패합니다.

@simonmurdockdotnet dev-certs https --cleandotnet dev-certs https --trust 명령 줄에서 인증서를 수동으로 다시 생성 할 수 있습니다. 사용자 환경과 관련하여 몇 가지 문제가 해결되어 preview7에서 수정되지만, preview6에서 다시 생성되면 인증서가 작동합니다.

안녕하세요. 나에게 동일한 문제 3.0.100-preview6-012264 (OS Win 8.1), VS2019 16.1.1을 설치했습니다. dotnet new blazorhosted . dotnet 도구로 인증서를 정리하고 (Chrome 75.0.3770.100 닫기) 다시 신뢰했지만 도움이되지 않았습니다.

@vmandic HTTP / 2는 Win8.1에서 지원되지 않으므로이 기능을 꺼야합니다.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#http2 -support

@Tratcher Win7 또는 Win8에서 실행중인 경우 기본적으로 HTTP2를 비활성화해야합니다.

@jkotalik 은 분류에 대한 새로운 문제를 엽니 다. 이론적으로는 Win8.1에서 작동 할 수 있지만, 암호 순서 지정 및 일부 대체 암호를 지원하는 인증서를 얻는 데 문제가 있습니다.

어제 Preview8을 설치해도 문제가 해결되지 않았기 때문에 dotnet dev-certs https --cleandotnet dev-certs https --trust 다시 실행하려고 시도했지만 성공하지 못했습니다.

Kestrel이 여전히 오래된 오래된 인증서를 사용하고 있음을 발견했지만 Windows 인증서 관리자에서 해당 인증서를 찾을 수 없었습니다. 인증서가 C:\Users\<user>\AppData\Roaming\ASP.NET\Https 캐시 된 것으로 나타났습니다. 세 개의 * .pfx 파일이 있었는데 그중 하나는 Kestrel에서 여전히 사용 중이었습니다.

이것을 찾는 데 문자 그대로 몇 시간이 걸렸습니다. 이미 인증서가 캐시 될 것으로 예상했지만 설명서에서 찾을 수 없었습니다. 이것은 정말로 문서화되어야합니다.

도커 컨테이너를 사용하고 있기 때문이라고 생각합니다. Docker가 인증서를 내보내 컨테이너로 가져 오는 위치입니다.

@anurse 우리가 생각하는 문서에 이것을 추가 할 수 있습니다. 이 폴더를 정리하는 것이 도커 사람들에게 미치는 영향을 잘 모르겠지만 우리는 그들에게 물어볼 수 있습니다.

내가 원하지 않는 것은 도커 도구 구현 세부 사항으로 도구에 이것을 추가하는 것이며 도구와 관련이 없습니다.

즉, 문서에서 이러한 상황이 발생하면 수행 할 작업에 대한 세부 정보를 제공하는 한 여기서 런타임을 변경할 필요가 없다고 생각합니다. 나는 그것을 추적하기 위해 https://github.com/aspnet/AspNetCore.Docs/issues/13927 을 제출했습니다.

설명해 주셔서 감사합니다.

이것을 문서에 추가하면 사람들이 시간을 절약 할 수 있습니다. 감사합니다!

이 페이지가 도움이 되었나요?
0 / 5 - 0 등급