Aspnetcore: Хост недоступен в https из-за слабого шифрования Http2

Созданный на 31 мар. 2019  ·  75Комментарии  ·  Источник: dotnet/aspnetcore

Опишите ошибку

Браузеру не нравится шифр, используемый для HTTP2 (я думаю)
ERR_SPDY_INADEQUATE_TRANSPORT_SECURITY и аналог в хроме

Плохой обходной путь

только для firefox
мне удалось зайти в about:config и отключить проверку слабого шифра, это действительно имеет эффект

есть ли простой способ полностью отключить HTTP2 с помощью Kestrel IOptions<> ?

Воспроизводить

Шаги по воспроизведению поведения:

  1. удален ВСЕ SDK
  2. удалена папка из программных файлов / user / appdata / temp
  3. установите sdk 2.2.105 и 3.0.0-preview3 с https://dot.net
  4. версия ASP.NET Core: поставляемая с предварительным просмотром3
  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/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 - инсайдер Fast Ring
Превью против 2019
netcoreapp3.0.0 предварительный просмотр
(куча краев ^^)

на прошлой неделе работал нормально. Пострадал от инсайдерской атаки + последний превью vs2019 с

также пытался добавить 2 раздела реестра, чтобы отключить HTTP2 для сервера Win2016.
это не повлияло ни на один браузер

Эти ключи reg предназначены только для IIS / Http.Sys. Интересно, есть ли у Insiders регресс? @shirhatti

Это способ сообщить разработчикам, что они работают на сервере, который может так закончиться?

Например, шифр списка dotnet tool который можно использовать на текущей машине / сервере, например, с цветами для обозначения потенциально слабого шифра и так далее.
Или логическое значение, чтобы сделать сервер агрессивным и отказоустойчивым, если указанный шифр слишком слаб во время запуска.

Это потребовало бы знать список «приемлемых», и я действительно понятия не имею, существует ли такой список и возможно ли это вообще

Мне потребовалось много времени, чтобы понять, откуда это исходит

Вы можете указать конкретный номер сборки Windows?

Мы бы добавили этот вид инструментов только в том случае, если бы больше не могли сказать, что они работают на всех сборках rtm win10.

Начиная с обновления 1803, IIS позволяет управлять Http.Sys для каждой привязки. Вам больше не нужно отключать HTTP / 2 для всего сервера.

image

При этом глобальный ключ reg должен работать. Не могли бы вы поделиться своим номером сборки Windows, и я посмотрю на него?

@shirhatti они используют пустельгу.

Упс 🤦‍♂️. Игнорируйте мой предыдущий комментарий.

также я действительно не хочу отключать 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 Можете ли вы предоставить нам трассировку wirehark, чтобы мы могли точно увидеть, о чем ведутся переговоры? Благодаря!

cc @anurse

Какой фильтр я бы использовал для извлечения того, что вы ищете, я уверен, что могу утечь данные, которых я тоже не хочу
Также я сомневаюсь, что действительно что-то вижу:

  • С хромом у меня нет логов из пустельги
  • С 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 для захвата, но я либо выберу плохие параметры при установке wirehark (много вопросов о loopback / wifi / admin и т. д.), и у меня может быть opt_out из слишком большого количества вариантов

также я пытался использовать этот фильтр: tcp.port == 5043 (который должен быть портом Kestrel)
и я ничего не вижу

также я не да отключил H2, так ли это нормально:

(двойное округление - бонус)

image

@shirhatti

действительно хотел бы сделать захват Wireshark
Я использую ноутбук (так что Wi-Fi) и использую localhost для пустельги
на ноутбуке с сетевым адаптером ~ 6-8

как лучше всего получить чистый и красивый снимок?

также какой фильтр захвата я должен использовать для фильтрации того, что вам нужно?

Аналогичная проблема: https://github.com/aspnet/AspNetCore/issues/8409

Я могу воспроизвести это на 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. Решает проблему для тех, кто попадает в это.

Еще одна точка данных: мы тестировали использование сертификата IIS Express в Kestrel, и он также работал, посмотрим, что нужно изменить с помощью сертификата разработчика AspNetCore.

@Tratcher У вас есть для этого шаги? На данный момент было бы приятным обходным путем. Рад, что это сработало!

@anurse, можешь ли ты вставить образец кода?

Ага. Мы намерены исправить наш сертификат разработчика для 3.0, но в качестве временного решения вы можете использовать сертификат разработки IIS Express непосредственно из Kestrel.

Это работает только в 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 - это то, на что вы можете посмотреть? Сертификат разработчика IIS Express в Win 10 18356 работает нормально, а наш - нет. Все, что нам нужно сделать, это убедиться, что мы соответствуем одинаковым требованиям.

Это высокий приоритет для предварительной версии 5, поскольку сертификат разработчика полностью поврежден в Windows 10 19H1.

cc @mkArtakMSFT

@anurse Прочитал вопрос, но должно быть выполнимо. Придется сообщить

Это мое понимание. Как я уже сказал, мы знаем, что сертификат 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 создаст сертификат https, совместимый с aspnetcore, с добавлением цифровой подписи. Я пытался воспроизвести это на инсайдерских сборках 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 и переключился на него, и проблема больше не воспроизводится с обновленным сертификатом.

https://github.com/aspnet/AspNetCore/pull/9293/files PR вышел для обновления KU.

PR слились. Закройте его, если чувствуете, что здесь больше не к чему обращаться

я только что обновился до 20H1 вчера
я не уверен, какой предварительный просмотр 3.0.0-previewX будет содержать слияние
можешь просветить меня в этом вопросе? предварительный просмотр4 или 5?
(я могу тестировать каждую ночь, но не хочу использовать его после быстрого теста)

Это будет частью preview5.

Если ты бежишь

dotnet dev-certs http --clean

Сценарий powershell выше, а затем

dotnet dev-certs http --trust

Он должен разблокировать вас.

Всем спасибо. Теперь это исправлено, и я буду следить за включением этого в Known issues для версии Preview5.

В 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 - вывод информации
.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

Установленные SDK .NET Core:
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]

Для меня это может быть связано с https://github.com/aspnet/AspNetCore/issues/11283 .

@nphmuller

Вы пробовали запускать следующие команды в среде dotnet preview6?

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). Есть ли место, где можно кэшировать сертификат? Похоже, сертификат действительно предыдущий.

Вы использовали SDK 3.0 для создания сертификата?

Да, я так думаю. 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 --version печатает 3.0.100-preview6-012264 .

проблема в том, что вы должны быть уверены в этом, когда вы действительно запускали эту команду в тот момент

Я действительно не могу следовать за мной. Что я должен сделать? 😕

сделать полную очистку
не знаю, требуется ли перезагрузка
затем проверьте dotnet version перед повторным запуском --trust one

Я это уже делал (несколько раз) 🙂 - все равно безуспешно.

У меня есть недавно установленный VS2019 Preview 16.2 Preview 2, и это первое ядро ​​ASP.NET с проектом Kestrel, которое я запускаю, и я сталкиваюсь с той же проблемой. Я пробовал команды clean / trust, чтобы обновить сертификат без изменений.

dotnet --version
3.0.100-preview-010184

Это пустой проект с добавленным .ConfigureKestrel () без каких-либо изменений

@karaziox SDK 3.0.100-preview-010184 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 проблема все еще возникает в превью6.

Я считаю, что исправление находится в превью7, а не в превью6. @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 --clean и dotnet dev-certs https --trust . Было решено несколько проблем, касающихся взаимодействия с пользователем, которые будут исправлены в предварительном просмотре7, но сертификат должен работать, если он был восстановлен в предварительном просмотре6.

Привет. Та же проблема для меня 3.0.100-preview6-012264 (ОС Win 8.1), установил VS2019 16.1.1. Проверено с помощью dotnet new blazorhosted . Я попытался очистить сертификаты (закрыть chrome 75.0.3770.100) с помощью инструмента dotnet и снова довериться, но без помощи.

@vmandic HTTP / 2 не поддерживается в Win8.1, вам необходимо отключить его.
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#http2 -support

@Tratcher, вероятно, нам следует отключить HTTP2 по умолчанию, если вы работаете на Win7 или Win8

@jkotalik, пожалуйста, откройте новый выпуск для сортировки. Теоретически он может работать на Win8.1, есть проблема только с порядком шифрования и получением сертификата, поддерживающего некоторые из альтернативных шифров.

Поскольку вчера, когда я установил Preview8, проблема все еще не была решена, я попытался снова запустить и dotnet dev-certs https --clean и dotnet dev-certs https --trust , но безуспешно.

Я обнаружил, что Kestrel все еще использует старый устаревший сертификат, но мне не удалось найти указанный сертификат в диспетчере сертификатов Windows. Оказывается, здесь кешируются сертификаты: C:\Users\<user>\AppData\Roaming\ASP.NET\Https . Было три файла * .pfx, один из которых, очевидно, все еще использовался Kestrel.

На это у меня ушло буквально несколько часов. Я уже ожидал, что сертификаты кэшируются, но мне не удалось найти его где-нибудь в документации. Это действительно нужно задокументировать, пожалуйста.

Я полагаю, это потому, что вы используете контейнеры докеров. Это место, куда докер экспортирует сертификат, чтобы импортировать его в контейнер.

@anurse, я думаю, мы могли бы добавить это в документы. Я не уверен, что очистка этой папки отразится на докерах, но мы можем спросить их.

Чего я не хочу, так это добавлять это в инструмент, так как это деталь реализации инструментария докеров и не имеет к нему никакого отношения.

Тем не менее, я не думаю, что нам нужно здесь менять среду выполнения, если мы подробно расскажем, что делать, если вы столкнетесь с такой ситуацией в документации. Я подал https://github.com/aspnet/AspNetCore.Docs/issues/13927, чтобы отследить это.

Спасибо за уточнение.

Добавление этого в документацию поможет людям сэкономить время. Большое спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги