Wymuszanie protokołu HTTPS w ASP.NET CoreEnforce HTTPS in ASP.NET Core

Autor: Rick AndersonBy Rick Anderson

W tym dokumencie przedstawiono sposób:This document shows how to:

  • Wymagaj protokołu HTTPS dla wszystkich żądań.Require HTTPS for all requests.
  • Przekierowuj wszystkie żądania HTTP do protokołu HTTPS.Redirect all HTTP requests to HTTPS.

Żaden interfejs API nie może zapobiec wysyłaniu poufnych danych przez klienta do pierwszego żądania.No API can prevent a client from sending sensitive data on the first request.

Ostrzeżenie

Projekty interfejsu APIAPI projects

Nie należy używać RequireHttpsAttribute w interfejsach API sieci Web, które otrzymują poufne informacje.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute używa kodów stanu HTTP do przekierowywania przeglądarek z protokołu HTTP do HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Klienci interfejsu API nie mogą zrozumieć ani przestrzegać przekierowania z protokołu HTTP do protokołu HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Tacy klienci mogą wysyłać informacje za pośrednictwem protokołu HTTP.Such clients may send information over HTTP. Interfejsy API sieci Web powinny:Web APIs should either:

  • Nie nasłuchuje na protokole HTTP.Not listen on HTTP.
  • Zamknij połączenie z kodem stanu 400 (złe żądanie) i nie obsługuj żądania.Close the connection with status code 400 (Bad Request) and not serve the request.

HSTS i projekty interfejsu APIHSTS and API projects

Domyślne projekty interfejsów API nie obejmują HSTS , ponieważ HSTS jest ogólnie jedyną instrukcją przeglądarki.The default API projects don't include HSTS because HSTS is generally a browser only instruction. Inne obiekty wywołujące, takie jak telefony lub aplikacje klasyczne, nie przestrzegają instrukcji.Other callers, such as phone or desktop apps, do not obey the instruction. Nawet w przeglądarkach pojedyncze uwierzytelnione wywołanie interfejsu API za pośrednictwem protokołu HTTP jest niebezpieczne dla niezabezpieczonych sieci.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. Bezpiecznym podejściem jest skonfigurowanie projektów interfejsu API tylko do nasłuchiwania i odpowiadania za pośrednictwem protokołu HTTPS.The secure approach is to configure API projects to only listen to and respond over HTTPS.

Ostrzeżenie

Projekty interfejsu APIAPI projects

Nie należy używać RequireHttpsAttribute w interfejsach API sieci Web, które otrzymują poufne informacje.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute używa kodów stanu HTTP do przekierowywania przeglądarek z protokołu HTTP do HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Klienci interfejsu API nie mogą zrozumieć ani przestrzegać przekierowania z protokołu HTTP do protokołu HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Tacy klienci mogą wysyłać informacje za pośrednictwem protokołu HTTP.Such clients may send information over HTTP. Interfejsy API sieci Web powinny:Web APIs should either:

  • Nie nasłuchuje na protokole HTTP.Not listen on HTTP.
  • Zamknij połączenie z kodem stanu 400 (złe żądanie) i nie obsługuj żądania.Close the connection with status code 400 (Bad Request) and not serve the request.

Wymagaj protokołu HTTPSRequire HTTPS

Zalecamy korzystanie z aplikacji sieci Web ASP.NET Core produkcyjnych:We recommend that production ASP.NET Core web apps use:

  • Oprogramowanie pośredniczące przekierowania HTTPS ( UseHttpsRedirection ) do przekierowywania żądań HTTP do protokołu HTTPS.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • HSTSe oprogramowanie pośredniczące (UseHsts) do wysyłania nagłówków HTTP Strict Transport Security Protocol (HSTS) do klientów.HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

Uwaga

Aplikacje wdrożone w konfiguracji zwrotnego serwera proxy pozwalają serwerowi proxy obsługiwać zabezpieczenia połączeń (HTTPS).Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). Jeśli serwer proxy obsługuje również przekierowywanie przy użyciu protokołu HTTPS, nie ma potrzeby używania oprogramowania pośredniczącego do przekierowania protokołu HTTPS.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. Jeśli serwer proxy obsługuje również zapisywanie nagłówków HSTS (na przykład natywnej obsługi HSTS w usługach IIS 10,0 (1709) lub nowszej), oprogramowanie pośredniczące HSTS nie jest wymagane przez aplikację.If the proxy server also handles writing HSTS headers (for example, native HSTS support in IIS 10.0 (1709) or later), HSTS Middleware isn't required by the app. Aby uzyskać więcej informacji, zobacz rezygnacja z protokołu HTTPS/HSTS podczas tworzenia projektu.For more information, see Opt-out of HTTPS/HSTS on project creation.

UseHttpsRedirectionUseHttpsRedirection

Następujący kod wywołuje UseHttpsRedirection w Startup klasie:The following code calls UseHttpsRedirection in the Startup class:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

Poprzedni wyróżniony kod:The preceding highlighted code:

Zalecamy używanie tymczasowych przekierowań zamiast trwałych przekierowań.We recommend using temporary redirects rather than permanent redirects. Buforowanie łączy może spowodować niestabilne zachowanie w środowiskach deweloperskich.Link caching can cause unstable behavior in development environments. Jeśli wolisz wysyłać kod stanu stałego przekierowania, gdy aplikacja znajduje się w środowisku innym niż programowanie, zobacz sekcję Konfigurowanie stałych przekierowań w produkcji .If you prefer to send a permanent redirect status code when the app is in a non-Development environment, see the Configure permanent redirects in production section. Zalecamy używanie HSTS do sygnalizowania klientów, że tylko zabezpieczone żądania zasobów powinny być wysyłane do aplikacji (tylko w środowisku produkcyjnym).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

Konfiguracja portuPort configuration

Aby przekierować niezabezpieczone żądanie do protokołu HTTPS, Port musi być dostępny dla oprogramowania pośredniczącego.A port must be available for the middleware to redirect an insecure request to HTTPS. Jeśli port nie jest dostępny:If no port is available:

  • Przekierowanie do protokołu HTTPS nie jest wykonywane.Redirection to HTTPS doesn't occur.
  • Oprogramowanie pośredniczące rejestruje ostrzeżenie "nie można określić portu HTTPS do przekierowania".The middleware logs the warning "Failed to determine the https port for redirect."

Określ port HTTPS przy użyciu dowolnej z następujących metod:Specify the HTTPS port using any of the following approaches:

  • Ustaw https_port ustawienie hosta:Set the https_port host setting:

    • W obszarze Konfiguracja hosta.In host configuration.

    • Przez ustawienie ASPNETCORE_HTTPS_PORT zmiennej środowiskowej.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Dodając wpis najwyższego poziomu w appsettings.json :By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Information",
                  "Microsoft": "Warning",
                  "Microsoft.Hosting.Lifetime": "Information"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Wskaż port z bezpiecznym schematem przy użyciu zmiennej środowiskowej ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. Zmienna środowiskowa służy do konfigurowania serwera.The environment variable configures the server. Oprogramowanie pośredniczące pośrednio wykrywa port HTTPS za pośrednictwem IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Takie podejście nie działa w przypadku wdrożeń zwrotnych serwerów proxy.This approach doesn't work in reverse proxy deployments.

  • Ustaw https_port ustawienie hosta:Set the https_port host setting:

    • W obszarze Konfiguracja hosta.In host configuration.

    • Przez ustawienie ASPNETCORE_HTTPS_PORT zmiennej środowiskowej.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Dodając wpis najwyższego poziomu w appsettings.json :By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Wskaż port z bezpiecznym schematem przy użyciu zmiennej środowiskowej ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. Zmienna środowiskowa służy do konfigurowania serwera.The environment variable configures the server. Oprogramowanie pośredniczące pośrednio wykrywa port HTTPS za pośrednictwem IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Takie podejście nie działa w przypadku wdrożeń zwrotnych serwerów proxy.This approach doesn't work in reverse proxy deployments.

  • W obszarze programowanie Ustaw adres URL HTTPS w launchsettings.jsna.In development, set an HTTPS URL in launchsettings.json. Włącz protokół HTTPS, gdy zostanie użyta IIS Express.Enable HTTPS when IIS Express is used.

  • Skonfiguruj punkt końcowy adresu URL HTTPS dla wdrożenia publicznej krawędzi serwera Kestrel lub serwera HTTP.sys .Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. Aplikacja używa tylko jednego portu HTTPS .Only one HTTPS port is used by the app. Oprogramowanie pośredniczące odnajduje port za pośrednictwem programu IServerAddressesFeature .The middleware discovers the port via IServerAddressesFeature.

Uwaga

Gdy aplikacja jest uruchamiana w konfiguracji zwrotnego serwera proxy, IServerAddressesFeature jest niedostępna.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. Ustaw port przy użyciu jednej z innych metod opisanych w tej sekcji.Set the port using one of the other approaches described in this section.

Wdrożenia brzegoweEdge deployments

Gdy Kestrel lub HTTP.sys jest używany jako publiczny serwer graniczny, Kestrel lub HTTP.sys musi być skonfigurowany do nasłuchiwania na obu:When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • Bezpieczny port do przekierowania przez klienta (zazwyczaj 443 w środowisku produkcyjnym i 5001 podczas tworzenia).The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • Niezabezpieczony port (zazwyczaj 80 w środowisku produkcyjnym i 5000 podczas tworzenia).The insecure port (typically, 80 in production and 5000 in development).

Niezabezpieczony Port musi być dostępny dla klienta, aby aplikacja mogła odebrać niezabezpieczone żądanie i przekierować klienta do bezpiecznego portu.The insecure port must be accessible by the client in order for the app to receive an insecure request and redirect the client to the secure port.

Aby uzyskać więcej informacji, zobacz Kestrel Endpoint Configuration lub HTTP.sys implementacja serwera sieci Web w programie ASP.NET Core .For more information, see Kestrel endpoint configuration or HTTP.sys implementacja serwera sieci Web w programie ASP.NET Core.

Scenariusze wdrażaniaDeployment scenarios

Wszystkie zapory między klientem a serwerem muszą także mieć otwarte porty komunikacyjne dla ruchu.Any firewall between the client and server must also have communication ports open for traffic.

Jeśli żądania są przekazywane w konfiguracji zwrotnego serwera proxy, przed wywołaniem oprogramowania pośredniczącego do przekierowywania HTTPS Użyj oprogramowania pośredniczącego .If requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. Przesłane nagłówki — oprogramowanie pośredniczące aktualizuje Request.Scheme program, używając X-Forwarded-Proto nagłówka.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. Oprogramowanie pośredniczące umożliwia poprawne działanie identyfikatorów URI przekierowania i innych zasad zabezpieczeń.The middleware permits redirect URIs and other security policies to work correctly. Gdy przekazane nagłówki nie są używane, aplikacja zaplecza może nie otrzymać poprawnego schematu i zakończyć działania w pętli przekierowania.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. Typowy komunikat o błędzie użytkownika końcowego polega na tym, że wystąpiły zbyt wiele przekierowań.A common end user error message is that too many redirects have occurred.

Podczas wdrażania programu w celu Azure App Service postępuj zgodnie ze wskazówkami podanymi w samouczku: Powiąż istniejący niestandardowy certyfikat SSL z usługą Azure Web Apps.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

OpcjeOptions

Następujący wyróżniony kod wywołuje AddHttpsRedirection , aby skonfigurować opcje oprogramowania pośredniczącego:The following highlighted code calls AddHttpsRedirection to configure middleware options:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}

Wywołanie AddHttpsRedirection jest niezbędne tylko do zmiany wartości HttpsPort lub RedirectStatusCode .Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

Poprzedni wyróżniony kod:The preceding highlighted code:

Konfigurowanie stałych przekierowań w środowisku produkcyjnymConfigure permanent redirects in production

Ustawienia domyślne oprogramowania pośredniczącego do wysyłania Status307TemporaryRedirect z wszystkimi przekierowaniami.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. Jeśli wolisz wysyłać kod stanu stałego przekierowania, gdy aplikacja znajduje się w środowisku nieprogramistycznym, Zapakuj konfigurację opcji oprogramowania pośredniczącego w ramach sprawdzania warunkowego dla środowiska nieprogramistycznego.If you prefer to send a permanent redirect status code when the app is in a non-Development environment, wrap the middleware options configuration in a conditional check for a non-Development environment.

Podczas konfigurowania usług w programie Startup.cs:When configuring services in Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // IWebHostEnvironment (stored in _env) is injected into the Startup class.
    if (!_env.IsDevelopment())
    {
        services.AddHttpsRedirection(options =>
        {
            options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
            options.HttpsPort = 443;
        });
    }
}

Podczas konfigurowania usług w programie Startup.cs:When configuring services in Startup.cs:

public void ConfigureServices(IServiceCollection services)
{
    // IHostingEnvironment (stored in _env) is injected into the Startup class.
    if (!_env.IsDevelopment())
    {
        services.AddHttpsRedirection(options =>
        {
            options.RedirectStatusCode = StatusCodes.Status308PermanentRedirect;
            options.HttpsPort = 443;
        });
    }
}

Alternatywne podejście do przekierowania protokołu HTTPSHTTPS Redirection Middleware alternative approach

Alternatywą dla korzystania z oprogramowania pośredniczącego do przekierowania protokołu HTTPS UseHttpsRedirection jest użycie oprogramowania pośredniczącego ( AddRedirectToHttps ).An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttps można również ustawić kod stanu i port, gdy przekierowanie jest wykonywane.AddRedirectToHttps can also set the status code and port when the redirect is executed. Aby uzyskać więcej informacji, zobacz Ponowne Zapisywanie oprogramowania pośredniczącego w adresie URL.For more information, see URL Rewriting Middleware.

Podczas przekierowywania do protokołu HTTPS bez wymagania dotyczącego dodatkowych reguł przekierowywania zalecamy używanie oprogramowania pośredniczącego do przekierowania protokołu HTTPS ( UseHttpsRedirection ) opisanego w tym temacie.When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

Protokół HTTP Strict Transport Security Protocol (HSTS)HTTP Strict Transport Security Protocol (HSTS)

Na OWASP, http Strict Transport Security (HSTS) jest opcjonalnym ulepszeniem zabezpieczeń, określonym przez aplikację sieci Web przy użyciu nagłówka odpowiedzi.Per OWASP, HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that's specified by a web app through the use of a response header. Gdy przeglądarka, która obsługuje HSTS, otrzymuje ten nagłówek:When a browser that supports HSTS receives this header:

  • Przeglądarka przechowuje konfigurację dla domeny, która uniemożliwia wysyłanie komunikacji za pośrednictwem protokołu HTTP.The browser stores configuration for the domain that prevents sending any communication over HTTP. Przeglądarka wymusza całą komunikację za pośrednictwem protokołu HTTPS.The browser forces all communication over HTTPS.
  • Przeglądarka uniemożliwia użytkownikowi korzystanie z niezaufanych lub nieprawidłowych certyfikatów.The browser prevents the user from using untrusted or invalid certificates. Przeglądarka wyłącza wyświetlanie wierszy, które umożliwiają użytkownikowi tymczasowe zaufać temu certyfikatowi.The browser disables prompts that allow a user to temporarily trust such a certificate.

Ponieważ HSTS jest wymuszana przez klienta, ma pewne ograniczenia:Because HSTS is enforced by the client, it has some limitations:

  • Klient musi obsługiwać HSTS.The client must support HSTS.
  • HSTS wymaga co najmniej jednego pomyślnego żądania HTTPS do ustanowienia zasad HSTS.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • Aplikacja musi sprawdzić każde żądanie HTTP i przekierować lub odrzucić żądanie HTTP.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.NET Core 2,1 i nowsze implementują HSTS z UseHsts metodą rozszerzenia.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. Następujący kod wywołuje, UseHsts gdy aplikacja nie jest w trybie deweloperskim:The following code calls UseHsts when the app isn't in development mode:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseCookiePolicy();

    app.UseMvc();
}

UseHsts nie jest zalecane w programowaniu, ponieważ ustawienia HSTS mają wysoką pamięć podręczną przez przeglądarki.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. Domyślnie program UseHsts wyklucza adres lokalnego sprzężenia zwrotnego.By default, UseHsts excludes the local loopback address.

W przypadku środowisk produkcyjnych, które wdrażają protokół HTTPS po raz pierwszy, należy ustawić początkowy HstsOptions. maxAge na małą wartość przy użyciu jednej z TimeSpan metod.For production environments that are implementing HTTPS for the first time, set the initial HstsOptions.MaxAge to a small value using one of the TimeSpan methods. Ustaw wartość od godziny na nie więcej niż jeden dzień w przypadku konieczności przywrócenia infrastruktury HTTPS do protokołu HTTP.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. Po upewnieniu się, że trwałość konfiguracji protokołu HTTPS jest stabilna, zwiększ max-age wartość HSTS. najczęściej używaną wartością jest jeden rok.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

Następujący kod:The following code:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddHsts(options =>
    {
        options.Preload = true;
        options.IncludeSubDomains = true;
        options.MaxAge = TimeSpan.FromDays(60);
        options.ExcludedHosts.Add("example.com");
        options.ExcludedHosts.Add("www.example.com");
    });

    services.AddHttpsRedirection(options =>
    {
        options.RedirectStatusCode = StatusCodes.Status307TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}
  • Ustawia parametr wstępnego ładowania Strict-Transport-Security nagłówka.Sets the preload parameter of the Strict-Transport-Security header. Wstępne ładowanie nie jest częścią specyfikacji RFC HSTS, ale jest obsługiwane przez przeglądarki sieci Web do wstępnego ładowania witryn HSTS w przypadku instalacji nowej.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. Aby uzyskać więcej informacji, zobacz https://hstspreload.org/.For more information, see https://hstspreload.org/.
  • Włącza includeSubDomain, która stosuje zasady HSTS do hostowania poddomen.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • Jawnie ustawia max-age parametr Strict-Transport-Security nagłówka na 60 dni.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. Jeśli nie zostanie ustawiona, wartość domyślna to 30 dni.If not set, defaults to 30 days. Aby uzyskać więcej informacji, zobacz dyrektywa max-age.For more information, see the max-age directive.
  • Dodaje example.com do listy hostów, które mają zostać wykluczone.Adds example.com to the list of hosts to exclude.

UseHsts wyklucza następujące hosty sprzężenia zwrotnego:UseHsts excludes the following loopback hosts:

  • localhost : Adres sprzężenia zwrotnego IPv4.localhost : The IPv4 loopback address.
  • 127.0.0.1 : Adres sprzężenia zwrotnego IPv4.127.0.0.1 : The IPv4 loopback address.
  • [::1] : Adres sprzężenia zwrotnego IPv6.[::1] : The IPv6 loopback address.

Zrezygnuj z protokołu HTTPS/HSTS podczas tworzenia projektuOpt-out of HTTPS/HSTS on project creation

W niektórych scenariuszach usługi zaplecza, w których zabezpieczenia połączeń są obsługiwane na publicznej krawędzi sieci, skonfigurowanie zabezpieczeń połączeń w każdym węźle nie jest wymagane.In some backend service scenarios where connection security is handled at the public-facing edge of the network, configuring connection security at each node isn't required. Aplikacje sieci Web, które są generowane na podstawie szablonów w programie Visual Studio lub za pomocą polecenia dotnet New , umożliwiają przekierowania https i HSTS.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. W przypadku wdrożeń, które nie wymagają tych scenariuszy, można zrezygnować z protokołu HTTPS/HSTS podczas tworzenia aplikacji na podstawie szablonu.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

Aby zrezygnować z protokołu HTTPS/HSTS:To opt-out of HTTPS/HSTS:

Usuń zaznaczenie pola wyboru Konfiguruj dla protokołu HTTPS .Uncheck the Configure for HTTPS check box.

Okno dialogowe nowe ASP.NET Core aplikacji sieci Web z niezaznaczonym polem wyboru Konfiguruj dla protokołu HTTPS.

Okno dialogowe nowe ASP.NET Core aplikacji sieci Web z niezaznaczonym polem wyboru Konfiguruj dla protokołu HTTPS.

Ufaj certyfikatowi Deweloperskiemu protokołu HTTPS ASP.NET Core w systemach Windows i macOSTrust the ASP.NET Core HTTPS development certificate on Windows and macOS

Zestaw .NET Core SDK zawiera certyfikat programistyczny HTTPS.The .NET Core SDK includes an HTTPS development certificate. Certyfikat jest instalowany w ramach pierwszego uruchomienia.The certificate is installed as part of the first-run experience. Na przykład program dotnet --info tworzy odmianę następujących danych wyjściowych:For example, dotnet --info produces a variation of the following output:

ASP.NET Core
------------
Successfully installed the ASP.NET Core HTTPS Development Certificate.
To trust the certificate run 'dotnet dev-certs https --trust' (Windows and macOS only).
For establishing trust on other platforms refer to the platform specific documentation.
For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

Zainstalowanie zestaw .NET Core SDK instaluje certyfikat deweloperski ASP.NET Core HTTPS do magazynu certyfikatów użytkownika lokalnego.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. Certyfikat został zainstalowany, ale nie jest zaufany.The certificate has been installed, but it's not trusted. Aby zaufać certyfikatowi, wykonaj jednorazowy krok w celu uruchomienia narzędzia dotnet dev-certs :To trust the certificate, perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

Następujące polecenie zapewnia pomoc dotyczącą dev-certs Narzędzia:The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Jak skonfigurować certyfikat dewelopera dla platformy DockerHow to set up a developer certificate for Docker

Zobacz ten problemw serwisie GitHub.See this GitHub issue.

Ufaj certyfikatowi HTTPS w systemie LinuxTrust HTTPS certificate on Linux

Instrukcje dotyczące systemu Linux można znaleźć w dokumentacji dotyczącej dystrybucji.For instructions on Linux, refer to the distribution documentation.

Ufaj certyfikatowi HTTPS z podsystemu Windows dla systemu LinuxTrust HTTPS certificate from Windows Subsystem for Linux

Podsystem Windows dla systemu Linux (WSL) generuje certyfikat z podpisem własnym HTTPS. Aby skonfigurować magazyn certyfikatów systemu Windows w celu zaufać certyfikatowi WSL:The Windows Subsystem for Linux (WSL) generates an HTTPS self-signed cert. To configure the Windows certificate store to trust the WSL certificate:

  • Uruchom następujące polecenie, aby wyeksportować certyfikat wygenerowany przez WSL:Run the following command to export the WSL-generated certificate:

    dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <cryptic-password>
    
  • W oknie WSL Uruchom następujące polecenie:In a WSL window, run the following command:

      ASPNETCORE_Kestrel__Certificates__Default__Password="<cryptic-password>" 
      ASPNETCORE_Kestrel__Certificates__Default__Path=/mnt/c/Users/user-name/.aspnet/https/aspnetapp.pfx
      dotnet watch run
    

    Poprzednie polecenie ustawia zmienne środowiskowe, aby system Linux używał zaufanego certyfikatu systemu Windows.The preceding command sets the environment variables so Linux uses the Windows trusted certificate.

Rozwiązywanie problemów z certyfikatamiTroubleshoot certificate problems

Ta sekcja zawiera informacje ułatwiające zainstalowanie i zaufaniecertyfikatu deweloperskiego https ASP.NET Core, ale nadal masz ostrzeżenia przeglądarki, że certyfikat nie jest zaufany.This section provides help when the ASP.NET Core HTTPS development certificate has been installed and trusted, but you still have browser warnings that the certificate is not trusted. ASP.NET Core certyfikat programistyczny HTTPS jest używany przez Kestrel.The ASP.NET Core HTTPS development certificate is used by Kestrel.

Wszystkie platformy — certyfikat niezaufanyAll platforms - certificate not trusted

Uruchom następujące polecenia:Run the following commands:

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

Zamknij wszystkie otwarte wystąpienia przeglądarki.Close any browser instances open. Otwórz nowe okno przeglądarki do aplikacji.Open a new browser window to app. Zaufanie certyfikatu jest buforowane przez przeglądarki.Certificate trust is cached by browsers.

Powyższe polecenia rozwiązują większość problemów z zaufaniem do przeglądarki.The preceding commands solve most browser trust issues. Jeśli przeglądarka nadal nie ufa certyfikatowi, postępuj zgodnie z sugestiami specyficznymi dla danej platformy.If the browser is still not trusting the certificate, follow the platform-specific suggestions that follow.

Zaufać certyfikatowi platformy DockerDocker - certificate not trusted

  • Usuń folder C:\Users { User} \AppData\Roaming\ASP.NET\Https .Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • Wyczyść rozwiązanie.Clean the solution. Usuń foldery bin i obj .Delete the bin and obj folders.
  • Uruchom ponownie narzędzie programistyczne.Restart the development tool. Na przykład Visual Studio, Visual Studio Code lub Visual Studio dla komputerów Mac.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows-certyfikat niezaufanyWindows - certificate not trusted

  • Sprawdź certyfikaty w magazynie certyfikatów.Check the certificates in the certificate store. Powinien istnieć localhost certyfikat o ASP.NET Core HTTPS development certificate przyjaznej nazwie w obszarze Current User > Personal > Certificates i Current User > Trusted root certification authorities > CertificatesThere should be a localhost certificate with the ASP.NET Core HTTPS development certificate friendly name both under Current User > Personal > Certificates and Current User > Trusted root certification authorities > Certificates
  • Usuń wszystkie znalezione certyfikaty zarówno z prywatnych, jak i zaufanych głównych urzędów certyfikacji.Remove all the found certificates from both Personal and Trusted root certification authorities. Nie usuwaj IIS Express certyfikatu localhost.Do not remove the IIS Express localhost certificate.
  • Uruchom następujące polecenia:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zamknij wszystkie otwarte wystąpienia przeglądarki.Close any browser instances open. Otwórz nowe okno przeglądarki do aplikacji.Open a new browser window to app.

OS X — certyfikat niezaufanyOS X - certificate not trusted

  • Otwórz dostęp do łańcucha kluczy.Open KeyChain Access.
  • Wybierz system łańcucha kluczy.Select the System keychain.
  • Sprawdź obecność certyfikatu localhost.Check for the presence of a localhost certificate.
  • Sprawdź, czy zawiera + symbol na ikonie, aby wskazać, że jest on zaufany dla wszystkich użytkowników.Check that it contains a + symbol on the icon to indicate it's trusted for all users.
  • Usuń certyfikat z łańcucha kluczy systemu.Remove the certificate from the system keychain.
  • Uruchom następujące polecenia:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Zamknij wszystkie otwarte wystąpienia przeglądarki.Close any browser instances open. Otwórz nowe okno przeglądarki do aplikacji.Open a new browser window to app.

Aby rozwiązać problemy z certyfikatami w programie Visual Studio, zobacz błąd protokołu HTTPS przy użyciu IIS Express (#16892 dotnet/AspNetCore) .See HTTPS Error using IIS Express (dotnet/AspNetCore #16892) for troubleshooting certificate issues with Visual Studio.

IIS Express certyfikat SSL używany z programem Visual StudioIIS Express SSL certificate used with Visual Studio

Aby rozwiązać problemy z certyfikatem IIS Express, wybierz pozycję napraw w Instalatorze programu Visual Studio.To fix problems with the IIS Express certificate, select Repair from the Visual Studio installer. Aby uzyskać więcej informacji, zobacz ten problemw serwisie GitHub.For more information, see this GitHub issue.

Błąd certyfikatu Firefox SEC_ERROR_INADEQUATE_KEY_USAGEFirefox SEC_ERROR_INADEQUATE_KEY_USAGE certificate error

Przeglądarka Firefox używa własnego magazynu certyfikatów i w związku z tym nie ufa IIS Express lub certyfikatów deweloperów Kestrel .The Firefox browser uses it's own certificate store, and therefore doesn't trust the IIS Express or Kestrel developer certificates.

Aby użyć programu Firefox z IIS Express lub Kestrel, ustaw security.enterprise_roots.enabled = trueTo use Firefox with IIS Express or Kestrel, set security.enterprise_roots.enabled = true

  1. Wprowadź about:config w przeglądarce Firefox.Enter about:config in the FireFox browser.
  2. Wybierz pozycję Zaakceptuj ryzyko i Kontynuuj , jeśli akceptujesz ryzyko.Select Accept the Risk and Continue if you accept the risk.
  3. Wybierz pozycję Pokaż wszystkoSelect Show All
  4. Zbiór security.enterprise_roots.enabled = trueSet security.enterprise_roots.enabled = true
  5. Zamknij i uruchom ponownie przeglądarkę FirefoxExit and restart Firefox

Aby uzyskać więcej informacji, zobacz Konfigurowanie urzędów certyfikacji w programie Firefox.For more information, see Setting Up Certificate Authorities (CAs) in Firefox.

Dodatkowe informacjeAdditional information