Aspnetcore: 由于弱Http2密码,无法在https中访问主机

创建于 2019-03-31  ·  75评论  ·  资料来源: dotnet/aspnetcore

描述错误

浏览器对用于HTTP2的密码不满意(我猜)
ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY和等值的Chrome

错误的解决方法

仅适用于Firefox
我设法进入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条评论

服务器在什么操作系统上? 我们已经在2012 / Win8上看到了这一点。

您可以使用以下选项退出HTTP / 2:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#listenoptionsprotocols
例如:

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

在这里查看平台要求:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#http2 -support

Windows 10-快速铃声内幕
VS2019预览
netcoreapp3.0.0预览
(一堆边缘的东西^^)

上周工作正常。 自从受到内幕冲击+ vs2019的最新预览以来

还尝试添加2个注册表项来禁用Win2016服务器的HTTP2。
它对任何浏览器都没有影响

这些注册表项仅适用于IIS / Http.Sys。 我想知道Insiders是否有回归。 @shirhatti

是否可以通过这种方式让开发人员知道他们正在可能最终以这种方式运行的服务器上运行?

例如,可以在当前机器/服务器上使用的dotnet tool列表密码,例如用于指示潜在弱密码的颜色,等等。
如果在启动时列出的密码太弱,则使用布尔值使服务器积极进取并进行快速故障转移。

这将需要知道“可接受的”列表,而我真的不知道这样的列表是否存在以及是否有可能

我花了很长时间才意识到它的来源

您可以提供特定的Windows内部版本号吗?

如果我们不能再说它在所有rtm win10版本上都起作用了,我们只会添加这种工具。

从1803更新开始,IIS允许您基于每个绑定控制Http.Sys。 您不再需要为整个服务器禁用HTTP / 2。

image

话虽如此,全局reg密钥仍然应该起作用。 您能否分享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

我将使用哪种过滤器来提取您要查找的内容,可以肯定的是,我也会泄漏我不想要的数据
我也怀疑我实际上看到了什么:

  • 使用chrome,我没有退出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,所以正常吗:

(二舍五入后的值是奖励)

image

@shirhatti

真的很想做一个Wireshark捕获
我正在使用笔记本电脑(例如Wifi),并且将本地主机用于红est
现在具有〜6-8网络适配器的笔记本电脑上

进行清晰美观的捕捉的最佳方法是什么?

我还应该使用什么捕获过滤器来过滤您需要的过滤器?

相似的问题: https :

我可以在18356.21上重现它,而#8409在18362.1上也可以报告。

请注意,它可以在IE和Edge中使用,因此这与Windows支持的密码与Chrome支持的密码冲突。

@Tratcher
好的Chrome和Firefox
有点讨厌

[dev]证书本身可能并不安全,但是仅与某些密码套件兼容。 即我认为它不适用于EC密码。 协商回退到证书兼容的密码,并且显然找不到符合HTTP / 2要求的密码。

来自其他线程的@Tratcher评论

我能提供什么帮助?

@tebeco,我想我们有足够的机会继续了,谢谢。

进入预览5。

如果可以的话,解决方法是使用Vs.net和IIS Express并以这种方式进行调试,因为IIS Express开发证书即使在Windows内部发行版中也可以正常工作。 现在为那些解决此问题的人解决此问题。

另一个数据点:我们在Kestrel中使用IIS Express的证书进行了测试,并且它也有效,我们将看到需要使用AspNetCore开发证书进行哪些更改。

@Tratcher您有步骤这样做吗? 现在将是一个不错的解决方法。 很高兴它有效!

可以在

是的我们打算修复3.0版的开发证书,但作为临时解决方法,您可以直接从Kestrel使用IIS Express开发证书。

这仅在Windows上有效(但到目前为止,仅在Windows上才报告此问题),并且要求您已安装并配置了IIS Express(为此安装VS即可)。 您实际上不必使用IIS Express来托管您的网站,我们只是在借用它的开发证书:)。

首先,您需要在用户证书存储区中找到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可以正常工作,但我们不能。 我们需要做的就是确保我们符合相同的要求。

这是预览版5的高优先级,因为dev证书在Windows 10 19H1上已完全损坏。

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使用的默认密码套件集并进行比较,因为我猜是Kestrel正在降级为不可接受的等级,因此更改我们的证书只会为问题提供创可贴并且没有正确地修复它。

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

如果您使用昨天的内部人员构建,则为20H1,而不是19H1。 您需要执行发布预览铃声或慢铃声才能获取有问题的版本。 (也许这是现在最后的19H1的问题?)

我可以添加该EKU。

我刚刚重现了该问题,然后安装了@javiercn的更新证书并切换到该证书,该问题不再与更新后的证书一起出现。

公关合并。 如果您觉得这里无话可关了,请关闭它

我昨天刚更新到20H1
我不确定哪个预览3.0.0-previewX将包含合并
你能启发我吗? 预览4或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

运行环境:
操作系统名称:Windows
操作系统版本:10.0.18362
操作系统平台:Windows
RID:win10-x64
基本路径:C:\ Program Files \ dotnet \ sdk3.0.100-preview6-012264 \

主持人(对支持有用):
版本:3.0.0-preview6-27804-01
提交:fdf81c6faf

安装的.NET Core SDK:
2.1.402 [C:\ Program Files \ dotnet \ sdk]
2.1.403 [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.507 [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.1.800-preview-009696 [C:\ Program Files \ dotnet \ sdk]
2.2.100 [C:\ Program Files \ dotnet \ sdk]
2.2.102 [C:\ Program Files \ dotnet \ sdk]
2.2.104 [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运行时:
Microsoft.AspNetCore.All 2.1.4 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.5 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.7 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.8 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.9 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.11 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.1 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.2 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.3 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.5 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.5 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.7 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.8 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.9 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.11 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.1 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.2 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.3 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.5 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.0.0-preview6.19307.2 [C:\ Program Files \ dotnet \ sharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.4 [C:\ Program Files \ dotnet \ shared \ Microsoft.NETCore.App]
Microsoft.NETCore.App 2.1.5 [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]

@nphmuller

您是否尝试在Preview6 dotnet环境中运行以下命令?

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

您可能有旧证书。 我们添加了逻辑来升级证书,但是我不确定该证书是否已进入预览6或将在预览7中可用。

@javiercn
我尝试了一种解决方法,但--clean失败。 我已经为此问题创建了https://github.com/aspnet/AspNetCore/issues/11283

@nphmuller您正在使用什么操作系统?

您可以打开证书管理器并自己清理证书(我认为这不理想)
在Windows(Win + R)-> mmc->输入->(Ctrl + M(添加管理单元)->证书->我的用户帐户->证书->个人->证书->用'localhost找到那些'->删除具有ASP.NET Core HTTPS ...
在受信任的根证书颁发机构上重复证书
重新运行dotnet dev-certs https --trust

@javiercn
那工作。 谢谢!
我在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

也在Windows上吗?

dotnet --info只列出SDK
您可能已经受到该文件夹​​或任何父文件夹中的global.json的影响
这将导致重新生成相同的旧证书

尝试清理
检查dotnet --version
然后使用--trust命令

@javiercn是什么意思? 我在Windows上。 🙂

@tebeco dotnet --version也会打印3.0.100-preview6-012264

问题是您需要确保在那时实际运行该命令时

我真的不能跟随。 我应该做些什么? 😕

进行全面清理
不知道是否需要重启
然后在重新运行--trust一个之前检查dotnet version

那是我已经(几次)做了的-仍然没有成功。

我已经全新安装了VS2019 Preview 16.2 Preview 2,这是我运行的第一个带有Kestrel项目的ASP.NET内核,并且遇到了同样的问题。 我已经尝试过clean / trust命令来刷新证书而没有任何更改。

dotnet --version
3.0.100-preview-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 --version也会打印3.0.100-preview6-012264

@Tratcher ,问题仍然出现在Preview6中。

我相信此修复程序在Preview7中,而不是Preview6中。 @jkotalik您可以确认吗?

dotnet 3.0.100-preview6-012264和VS 16.2.0 Preview 3.0对我来说仍然是一个问题

IIS在默认的ASP.Net Core应用程序中运行良好,Kestrel失败,并显示ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY

@simonmurdock您可以尝试使用dotnet 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)并再次信任,但没有帮助。

@Tratcher ,如果在Win7或Win8上运行,我们可能应该默认禁用

@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容器。 那是docker导出证书以将其导入到容器的位置。

@anurse我们可以将其添加到我认为的文档中。 我不确定清理此文件夹对码头工人的影响,但是我们可以问他们。

我不希望将其添加到工具中,因为它是docker工具实现的详细信息,并且与该工具无关。

就是说,只要我们提供有关文档中遇到这种情况的处理方法,我认为我们不需要在此处更改运行时。 我已提交https://github.com/aspnet/AspNetCore.Docs/issues/13927进行跟踪。

感谢您的阐述。

将其添加到文档中将帮助人们节省一些时间。 非常感谢!

此页面是否有帮助?
0 / 5 - 0 等级