Приложение ASP.NET Core 3.0 не работает в Windows Server 2012 R2 из-за ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY - PullRequest
2 голосов
/ 01 октября 2019

Я взял рабочее приложение ASP.NET Core 2.2, обновил его до версии 3.0, и внезапно приложение перестало работать в Windows Server 2012. Он предлагает следующее:

ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY

Chrome: enter image description here

Firefox: enter image description here

Похоже, раньше мне приходилось выбирать HTTP / 2, а теперьэто по умолчанию вместе с HTTP1.1. Здесь есть сообщение https://github.com/aspnet/AspNetCore/issues/14350, но это полностью сбивает с толку без реального решения.

Я пробовал все виды включения / отключения небезопасных протоколов, но безрезультатно. Например, https://www.admin -enclave.com / de / Articles-by-year / 11-data-статьи / website_articles / Articles / exchange_articles / 405-resolved-error-err_spdy_inadequate_transport_security-when-using-google-chome-and-owa.html

Прекрасно работает в Windows 10 из-за того, что я считаю более лучшим набором протоколов. Но в Fiddler я проверил, и единственное отличие при ведении переговоров с Kestrel заключается в следующем:

Windows Server 2012 R2:

[0A0A]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1301]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1302]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1303]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02B]  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02F]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02C]  TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[C030]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA9]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA8]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C013]  TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014]  TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[009C]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[009D]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[002F]  TLS_RSA_AES_128_SHA
[0035]  TLS_RSA_AES_256_SHA
[000A]  SSL_RSA_WITH_3DES_EDE_SHA

Windows 10:

[3A3A]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1301]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1302]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[1303]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02B]  TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
[C02F]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C02C]  TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
[C030]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA9]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[CCA8]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[C013]  TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA
[C014]  TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA
[009C]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[009D]  Unrecognized cipher - See http://www.iana.org/assignments/tls-parameters/
[002F]  TLS_RSA_AES_128_SHA
[0035]  TLS_RSA_AES_256_SHA
[000A]  SSL_RSA_WITH_3DES_EDE_SHA

Верхняя строкаотличается, но это все. Не уверен, что это, это какое-то GREASE значение.

Program.cs:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
      .UseKestrel(opts => {
        opts.ListenAnyIP(5000);
        opts.ListenAnyIP(5001, listenOpts => {
          listenOpts.UseHttps(new HttpsConnectionAdapterOptions {
            ServerCertificate = new X509Certificate2("certificate-server.pfx", "...")
          });
        });
        opts.Limits.MaxRequestBodySize = null;
      })
      .UseContentRoot(Directory.GetCurrentDirectory())
      .UseStartup<Startup>();
  }

Обновление

Кажется, я на правильном пути благодаря @Крис-Пратт. Изменение шифра сертификата на ECDSA_nistP256 заставит веб-приложение работать. Но, к сожалению, я использую сертификат также для подписи токенов JWT, и теперь это не работает с:

System.NotSupportedException: алгоритм ключа сертификата не поддерживается. at System.Security.Cryptography.X509Certificates.PublicKey.get_Key ()

Код подписи:

  var privateKey = new X509SecurityKey(new X509Certificate2("certificate-server.pfx", "..."));
  var token = new JwtSecurityToken(
    issuer: "Sentry",
    claims: claims,
    notBefore: DateTime.Now,
    expires: DateTime.Now.AddDays(1),
    signingCredentials: new SigningCredentials(privateKey, SecurityAlgorithms.RsaSha256Signature));

  return new JwtSecurityTokenHandler().WriteToken(token);

Я пытался изменить перечисление SecurityAlgorithms, но не получил никакогоуспех.

...