Erzwingen von HTTPS in ASP.net CoreEnforce HTTPS in ASP.NET Core

Von Rick AndersonBy Rick Anderson

Dieses Dokument zeigt Folgendes:This document shows how to:

  • Erfordert HTTPS für alle Anforderungen.Require HTTPS for all requests.
  • Leitet alle HTTP-Anforderungen an HTTPS um.Redirect all HTTP requests to HTTPS.

Eine API kann verhindern, dass ein Client sensible Daten bei der ersten Anforderung sendet.No API can prevent a client from sending sensitive data on the first request.

Warnung

API-ProjekteAPI projects

Verwenden Sie nicht "Requirements httpsattribute " für Web-APIs, die vertrauliche Informationen erhalten.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttributeverwendet HTTP-Statuscodes, um Browser von http zu HTTPS umzuleiten.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API-Clients können Umleitungen von http zu HTTPS nicht verstehen oder darauf verweisen.API clients may not understand or obey redirects from HTTP to HTTPS. Diese Clients senden möglicherweise Informationen über http.Such clients may send information over HTTP. Web-APIs sollten folgende Aktionen ausführen:Web APIs should either:

  • Nicht an http lauschen.Not listen on HTTP.
  • Schließen Sie die Verbindung mit dem Statuscode 400 (ungültige Anforderung), und verarbeiten Sie die Anforderung nicht.Close the connection with status code 400 (Bad Request) and not serve the request.

Hsts-und API-ProjekteHSTS and API projects

Die Standard-API-Projekte enthalten keine hsts , da hsts im Allgemeinen eine reine Browser Anweisung ist.The default API projects don't include HSTS because HSTS is generally a browser only instruction. Andere Aufrufer, z. b. Telefon-oder Desktop-Apps, gehorchen nicht der Anweisung.Other callers, such as phone or desktop apps, do not obey the instruction. Auch innerhalb von Browsern hat ein einzelner authentifizierter API-API-Rückruf Risiken für unsichere Netzwerke.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. Der sichere Ansatz besteht darin, API-Projekte so zu konfigurieren, dass Sie nur über HTTPS lauschen und darauf reagieren.The secure approach is to configure API projects to only listen to and respond over HTTPS.

Warnung

API-ProjekteAPI projects

Verwenden Sie nicht "Requirements httpsattribute " für Web-APIs, die vertrauliche Informationen erhalten.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttributeverwendet HTTP-Statuscodes, um Browser von http zu HTTPS umzuleiten.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API-Clients können Umleitungen von http zu HTTPS nicht verstehen oder darauf verweisen.API clients may not understand or obey redirects from HTTP to HTTPS. Diese Clients senden möglicherweise Informationen über http.Such clients may send information over HTTP. Web-APIs sollten folgende Aktionen ausführen:Web APIs should either:

  • Nicht an http lauschen.Not listen on HTTP.
  • Schließen Sie die Verbindung mit dem Statuscode 400 (ungültige Anforderung), und verarbeiten Sie die Anforderung nicht.Close the connection with status code 400 (Bad Request) and not serve the request.

Erzwingen von HTTPSRequire HTTPS

Es wird empfohlen, dass die Web-Apps für die Produktion ASP.net Core:We recommend that production ASP.NET Core web apps use:

  • HTTPS-Umleitungs Middleware ( UseHttpsRedirection ) zum Umleiten von HTTP-Anforderungen an HTTPS.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • Hsts-Middleware (usehsts) zum Senden von http-hsts-Headern (Strict Transport Security Protocol) an Clients.HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

Hinweis

Apps, die in einer Reverseproxykonfiguration bereitgestellt werden, ermöglichen dem Proxy das Verarbeiten der Verbindungssicherheit (HTTPS)Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). Wenn der Proxy auch die HTTPS-Umleitung verarbeitet, muss keine HTTPS-Umleitungs Middleware verwendet werden.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. Wenn der Proxy Server auch das Schreiben von hsts-Headern verarbeitet (z. b. System eigene hsts-Unterstützung in IIS 10,0 (1709) oderhöher), ist hsts-Middleware für die APP nicht erforderlich.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. Weitere Informationen finden Sie unter Ablehnen von HTTPS/hsts bei der Projekt Erstellung.For more information, see Opt-out of HTTPS/HSTS on project creation.

UsehttpsredirectionUseHttpsRedirection

Der folgende Code ruft UseHttpsRedirection in der- Startup Klasse auf: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();
}

Der vorangehende markierte Code:The preceding highlighted code:

Es wird empfohlen, temporäre Umleitungen anstelle von permanenten Umleitungen zu verwenden.We recommend using temporary redirects rather than permanent redirects. Das Zwischenspeichern von Links kann in Entwicklungsumgebungen zu instabiles Verhalten führen.Link caching can cause unstable behavior in development environments. Wenn Sie lieber einen permanenten Umleitungs Statuscode senden möchten, wenn sich die app in einer nicht Entwicklungsumgebung befindet, finden Sie weitere Informationen im Abschnitt configure permanent Umleitungen in Production .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. Wir empfehlen die Verwendung von hsts , um Clients zu signalisieren, dass nur sichere Ressourcenanforderungen an die APP gesendet werden sollen (nur in der Produktion).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

PortkonfigurationPort configuration

Ein Port muss verfügbar sein, damit die Middleware eine unsichere Anforderung an HTTPS umleiten muss.A port must be available for the middleware to redirect an insecure request to HTTPS. Wenn kein Port verfügbar ist:If no port is available:

  • Umleitung zu HTTPS erfolgt nicht.Redirection to HTTPS doesn't occur.
  • Die Middleware protokolliert die Warnung "der HTTPS-Port für die Umleitung konnte nicht bestimmt werden".The middleware logs the warning "Failed to determine the https port for redirect."

Geben Sie den HTTPS-Port an, indem Sie einen der folgenden Ansätze verwenden:Specify the HTTPS port using any of the following approaches:

  • Festlegen der https_port Host Einstellung:Set the https_port host setting:

    • In der Host Konfiguration.In host configuration.

    • Durch Festlegen der ASPNETCORE_HTTPS_PORT Umgebungsvariable.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Indem Sie einen Eintrag der obersten Ebene in appsettings.jshinzufügen:By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Information",
                  "Microsoft": "Warning",
                  "Microsoft.Hosting.Lifetime": "Information"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Geben Sie einen Port mit dem sicheren Schema an, indem Sie die ASPNETCORE_URLS-Umgebungsvariableverwenden.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. Die Umgebungsvariable konfiguriert den Server.The environment variable configures the server. Die Middleware ermittelt indirekt den HTTPS-Port über IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Diese Vorgehensweise funktioniert nicht in reverseproxybereitstellungen.This approach doesn't work in reverse proxy deployments.

  • Festlegen der https_port Host Einstellung:Set the https_port host setting:

    • In der Host Konfiguration.In host configuration.

    • Durch Festlegen der ASPNETCORE_HTTPS_PORT Umgebungsvariable.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Indem Sie einen Eintrag der obersten Ebene in appsettings.jshinzufügen:By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Geben Sie einen Port mit dem sicheren Schema an, indem Sie die ASPNETCORE_URLS-Umgebungsvariableverwenden.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. Die Umgebungsvariable konfiguriert den Server.The environment variable configures the server. Die Middleware ermittelt indirekt den HTTPS-Port über IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Diese Vorgehensweise funktioniert nicht in reverseproxybereitstellungen.This approach doesn't work in reverse proxy deployments.

  • Legen Sie in Entwicklung in launchsettings.jseine HTTPS-URL fest.In development, set an HTTPS URL in launchsettings.json. Aktivieren Sie HTTPS, wenn IIS Express verwendet wird.Enable HTTPS when IIS Express is used.

  • Konfigurieren Sie einen HTTPS-URL-Endpunkt für eine Public-Edge-Bereitstellung von Kestrel -Server oder HTTP.sys -Server.Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. Nur ein HTTPS-Port wird von der APP verwendet.Only one HTTPS port is used by the app. Die Middleware ermittelt den Port über IServerAddressesFeature .The middleware discovers the port via IServerAddressesFeature.

Hinweis

Wenn eine app in einer Reverseproxykonfiguration ausgeführt wird, ist IServerAddressesFeature nicht verfügbar.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. Legen Sie den Port mithilfe eines der anderen in diesem Abschnitt beschriebenen Ansätze fest.Set the port using one of the other approaches described in this section.

EdgebereitstellungenEdge deployments

Wenn Kestrel oder HTTP.sys als öffentlicher Edge-Server verwendet wird, muss Kestrel oder HTTP.sys für das lauschen an beiden Optionen konfiguriert werden:When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • Der sichere Port, an den der Client umgeleitet wird (in der Regel 443 in der Produktionsumgebung und 5001 in der Entwicklung).The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • Der unsichere Port (in der Regel 80 in der Produktionsumgebung und 5000 in der Entwicklung).The insecure port (typically, 80 in production and 5000 in development).

Der Client muss auf den unsicheren Port zugreifen können, damit die APP eine unsichere Anforderung empfängt und den Client an den sicheren Port umleitet.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.

Weitere Informationen finden Sie unter Kestrel-Endpunkt Konfiguration oder Implementierung des Http.sys-Webservers in ASP.NET Core .For more information, see Kestrel endpoint configuration or Implementierung des Http.sys-Webservers in ASP.NET Core.

BereitstellungsszenarienDeployment scenarios

Für jede Firewall zwischen dem Client und dem Server müssen auch Kommunikationsports für den Datenverkehr geöffnet sein.Any firewall between the client and server must also have communication ports open for traffic.

Wenn Anforderungen in einer Reverseproxykonfiguration weitergeleitet werden, verwenden Sie die Middleware für weitergeleitete Header , bevor Sie die HTTPS-UmleitungsIf requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. Die Middleware für weitergeleitete Header aktualisiert Request.Scheme mit dem- X-Forwarded-Proto Header.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. Die Middleware ermöglicht das ordnungsgemäße Funktionieren von Umleitungs-URIs und anderen Sicherheitsrichtlinien.The middleware permits redirect URIs and other security policies to work correctly. Wenn die Middleware für weitergeleitete Header nicht verwendet wird, empfängt die Back-End-App möglicherweise nicht das richtige Schema und befindet sich in einer Umleitungs Schleife.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. Eine gängige Fehlermeldung für den Endbenutzer besteht darin, dass zu viele Umleitungen aufgetreten sind.A common end user error message is that too many redirects have occurred.

Wenn Sie Azure App Service bereitstellen, befolgen Sie die Anweisungen im Tutorial: Binden eines vorhandenen benutzerdefinierten SSL-Zertifikats an Azure-Web-Apps.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

OptionenOptions

Der folgende markierte Code ruft addhttpsredirection auf, um Middleware-Optionen zu konfigurieren: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;
    });
}

AddHttpsRedirectionDas Aufrufen von ist nur erforderlich, um die Werte von oder zu ändern HttpsPort RedirectStatusCode .Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

Der vorangehende markierte Code:The preceding highlighted code:

Konfigurieren dauerhafter Umleitungen in der ProduktionConfigure permanent redirects in production

Die Middleware sendet standardmäßig ein Status307TemporaryRedirect -Wert mit allen Umleitungen.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. Wenn Sie lieber einen permanenten Umleitungs Statuscode senden möchten, wenn sich die app in einer nicht Entwicklungsumgebung befindet, packen Sie die middlewareoptions-Konfiguration in eine bedingte Prüfung für eine nicht Entwicklungsumgebung.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.

Beim Konfigurieren von Diensten in 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;
        });
    }
}

Beim Konfigurieren von Diensten in 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;
        });
    }
}

Alternativer Ansatz der HTTPS-Umleitungs MiddlewareHTTPS Redirection Middleware alternative approach

Eine Alternative zur Verwendung der HTTPS-Umleitungs Middleware ( UseHttpsRedirection ) ist die Verwendung der URL-Umschreib enden Middleware ( AddRedirectToHttps ).An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttpskann auch den Statuscode und den Port festlegen, wenn die Umleitung ausgeführt wird.AddRedirectToHttps can also set the status code and port when the redirect is executed. Weitere Informationen finden Sie unter URL-Umschreib Ende Middleware.For more information, see URL Rewriting Middleware.

Beim Umleiten an HTTPS ohne die Anforderung zusätzlicher Umleitungs Regeln empfiehlt sich die Verwendung der in diesem Thema beschriebenen HTTPS-Umleitungs Middleware ( UseHttpsRedirection ).When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

HTTP Strict Transport Security Protocol (hsts)HTTP Strict Transport Security Protocol (HSTS)

Pro OWASPist die http-strikte Transport Sicherheit (hsts) eine Opt-in-Sicherheits Erweiterung, die durch eine Web-App durch die Verwendung eines Antwort Headers angegeben wird.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. Wenn ein Browser, der hsts unterstützt, diesen Header empfängt:When a browser that supports HSTS receives this header:

  • Der Browser speichert die Konfiguration für die Domäne, die das Senden jeglicher Kommunikation über HTTP verhindert.The browser stores configuration for the domain that prevents sending any communication over HTTP. Der Browser erzwingt die gesamte Kommunikation über HTTPS.The browser forces all communication over HTTPS.
  • Der Browser hindert den Benutzer daran, nicht vertrauenswürdige oder ungültige Zertifikate zu verwenden.The browser prevents the user from using untrusted or invalid certificates. Der Browser deaktiviert Eingabe Aufforderungen, mit denen ein Benutzer ein solches Zertifikat vorübergehend als vertrauenswürdig einstufen kann.The browser disables prompts that allow a user to temporarily trust such a certificate.

Da hsts vom Client erzwungen wird, gelten einige Einschränkungen:Because HSTS is enforced by the client, it has some limitations:

  • Der Client muss hsts unterstützen.The client must support HSTS.
  • Hsts erfordert mindestens eine erfolgreiche HTTPS-Anforderung zum Einrichten der hsts-Richtlinie.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • Die Anwendung muss jede HTTP-Anforderung überprüfen und die HTTP-Anforderung umleiten oder ablehnen.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.net Core 2,1 und höher implementiert hsts mit der- UseHsts Erweiterungsmethode.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. Der folgende Code ruft UseHsts auf, wenn sich die APP nicht im Entwicklungsmodus befindet: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();
}

UseHstswird in der Entwicklung nicht empfohlen, da die hsts-Einstellungen durch Browser stark zwischen speicherbar sind.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. Standardmäßig UseHsts schließt die lokale Loopback Adresse aus.By default, UseHsts excludes the local loopback address.

Legen Sie für Produktionsumgebungen, die HTTPS zum ersten Mal implementieren, die anfängliche hstsoptions. MaxAge -Einstellung mithilfe einer der-Methoden auf einen kleinen Wert fest. TimeSpanFor 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. Legen Sie den Wert von Stunden auf nicht mehr als einen Tag fest, falls Sie die HTTPS-Infrastruktur auf http zurücksetzen müssen.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. Wenn Sie sicher sind, dass die Konfiguration der HTTPS-Konfiguration von der Bedeutung ist, erhöhen Sie den hsts- max-age Wert. ein häufig verwendeter Wert ist ein Jahr.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

Der folgende CodeThe 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;
    });
}
  • Legt den vorab laden-Parameter des Strict-Transport-Security Headers fest.Sets the preload parameter of the Strict-Transport-Security header. Vorab laden ist nicht Teil der RFC hsts-Spezifikation, wird aber von Webbrowsern unterstützt, um hsts-Websites bei einer Neuinstallation vorab zu laden.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. Weitere Informationen finden Sie unter https://hstspreload.org/.For more information, see https://hstspreload.org/.
  • Aktiviert includesubdomain, die die hsts-Richtlinie auf Host Unterdomänen anwendet.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • Legt den- max-age Parameter des- Strict-Transport-Security Headers explizit auf 60 Tage fest.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. Wenn nicht festgelegt, wird standardmäßig 30 Tage verwendet.If not set, defaults to 30 days. Weitere Informationen finden Sie in der max-age-Direktive.For more information, see the max-age directive.
  • Fügt example.com der Liste der auszuschließenden Hosts hinzu.Adds example.com to the list of hosts to exclude.

UseHstsschließt die folgenden Loopback Hosts aus:UseHsts excludes the following loopback hosts:

  • localhost: Die IPv4-Loopback Adresse.localhost : The IPv4 loopback address.
  • 127.0.0.1: Die IPv4-Loopback Adresse.127.0.0.1 : The IPv4 loopback address.
  • [::1]: Die IPv6-Loopback Adresse.[::1] : The IPv6 loopback address.

Ausschließen von HTTPS/hsts bei der Projekt ErstellungOpt-out of HTTPS/HSTS on project creation

In einigen Back-End-Dienst Szenarios, in denen die Verbindungssicherheit an der öffentlichen Kante des Netzwerks behandelt wird, ist die Konfiguration der Verbindungssicherheit an den einzelnen Knoten nicht erforderlich.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. Web-Apps, die aus den Vorlagen in Visual Studio oder dem dotnet New -Befehl generiert werden, ermöglichen die HTTPS-Umleitung und hsts.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. Bei bereit Stellungen, für die diese Szenarios nicht erforderlich sind, können Sie HTTPS/hsts bei der Erstellung der APP aus der Vorlage ablehnen.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

So beenden Sie HTTPS/hsts:To opt-out of HTTPS/HSTS:

Deaktivieren Sie das Kontrollkästchen für HTTPS konfigurieren .Uncheck the Configure for HTTPS check box.

Das Dialogfeld neue ASP.net Core Webanwendung mit dem Kontrollkästchen für HTTPS konfigurieren ist nicht ausgewählt.

Das Dialogfeld neue ASP.net Core Webanwendung mit dem Kontrollkästchen für HTTPS konfigurieren ist nicht ausgewählt.

Vertrauen des ASP.net Core HTTPS-Entwicklungs Zertifikats unter Windows und macOSTrust the ASP.NET Core HTTPS development certificate on Windows and macOS

Die .net Core SDK enthält ein HTTPS-Entwicklungs Zertifikat.The .NET Core SDK includes an HTTPS development certificate. Das Zertifikat wird im Rahmen der erstmaligen Durchführung installiert.The certificate is installed as part of the first-run experience. Beispielsweise dotnet --info erzeugt eine Variation der folgenden Ausgabe: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.

Durch das Installieren des ASP.NET Core SDK wird das ASP.NET Core-HTTPS-Entwicklungszertifikat im lokalen Benutzerzertifikatspeicher installiert.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. Das Zertifikat wurde installiert, aber es ist nicht vertrauenswürdig.The certificate has been installed, but it's not trusted. Um dem Zertifikat zu vertrauen, führen Sie den einmaligen Schritt aus, um das dotnet- dev-certs Tool auszuführen:To trust the certificate, perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

Der folgende Befehl stellt Hilfe zum dev-certs-Tool bereit:The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Einrichten eines Entwickler Zertifikats für dockerHow to set up a developer certificate for Docker

Weitere Informationen finden Sie im entsprechenden GitHub-Issue.See this GitHub issue.

Vertrauen des HTTPS-Zertifikats aus dem Windows-Subsystem für LinuxTrust HTTPS certificate from Windows Subsystem for Linux

Das Windows-Subsystem für Linux (WSL) generiert ein selbst signiertes HTTPS-Zertifikat. So konfigurieren Sie den Windows-Zertifikat Speicher für die Vertrauenswürdigkeit des WSL-Zertifikats:The Windows Subsystem for Linux (WSL) generates an HTTPS self-signed cert. To configure the Windows certificate store to trust the WSL certificate:

  • Führen Sie den folgenden Befehl aus, um das von WSL generierte Zertifikat zu exportieren:Run the following command to export the WSL-generated certificate:

    dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <cryptic-password>
    
  • Führen Sie in einem WSL-Fenster den folgenden Befehl aus: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
    

    Mit dem vorangehenden Befehl werden die Umgebungsvariablen festgelegt, sodass Linux das vertrauenswürdige Windows-Zertifikat verwendet.The preceding command sets the environment variables so Linux uses the Windows trusted certificate.

Beheben von Zertifikats ProblemenTroubleshoot certificate problems

Dieser Abschnitt enthält Hilfe, wenn das ASP.net Core HTTPS-Entwicklungs Zertifikat installiert und vertrauenswürdigist, Sie jedoch weiterhin Browser Warnungen haben, dass das Zertifikat nicht vertrauenswürdig ist.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. Das ASP.net Core HTTPS-Entwicklungs Zertifikat wird von Kestrelverwendet.The ASP.NET Core HTTPS development certificate is used by Kestrel.

Alle Plattformen-Zertifikat nicht vertrauenswürdigAll platforms - certificate not trusted

Führen Sie die folgenden Befehle aus:Run the following commands:

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

Schließen Sie alle geöffneten Browser Instanzen.Close any browser instances open. Öffnen Sie ein neues Browserfenster für die app.Open a new browser window to app. Die Zertifikats Vertrauensstellung wird von Browsern zwischengespeichert.Certificate trust is cached by browsers.

Mit den obigen Befehlen werden die meisten Browser Vertrauensstellungs Probleme gelöst.The preceding commands solve most browser trust issues. Wenn der Browser dem Zertifikat immer noch nicht vertraut, befolgen Sie die folgenden plattformspezifischen Vorschläge.If the browser is still not trusting the certificate, follow the platform-specific suggestions that follow.

Docker-Zertifikat nicht vertrauenswürdigDocker - certificate not trusted

  • Löschen Sie den Ordner " c:\Users { User} \appdata\roaming\asp.net\https ".Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • Bereinigen Sie die Projekt Mappe.Clean the solution. Löschen Sie die Ordner bin und obj.Delete the bin and obj folders.
  • Starten Sie das Entwicklungs Tool neu.Restart the development tool. Beispielsweise Visual Studio, Visual Studio Code oder Visual Studio für Mac.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows-Zertifikat nicht vertrauenswürdigWindows - certificate not trusted

  • Überprüfen Sie die Zertifikate im Zertifikat Speicher.Check the certificates in the certificate store. Es muss ein localhost Zertifikat mit dem anzeigen ASP.NET Core HTTPS development certificate Amen unter Current User > Personal > Certificates und vorhanden sein.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
  • Entfernen Sie alle gefundenen Zertifikate von persönlichen und vertrauenswürdigen Stamm Zertifizierungsstellen.Remove all the found certificates from both Personal and Trusted root certification authorities. Entfernen Sie das IIS Express localhost-Zertifikat nicht .Do not remove the IIS Express localhost certificate.
  • Führen Sie die folgenden Befehle aus:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Schließen Sie alle geöffneten Browser Instanzen.Close any browser instances open. Öffnen Sie ein neues Browserfenster für die app.Open a new browser window to app.

OS X-Zertifikat nicht vertrauenswürdigOS X - certificate not trusted

  • Öffnen Sie den Keychain-Zugriff.Open KeyChain Access.
  • Wählen Sie die System Schlüsselkette aus.Select the System keychain.
  • Überprüfen Sie, ob ein localhost-Zertifikat vorhanden ist.Check for the presence of a localhost certificate.
  • Überprüfen Sie, ob es ein + Symbol auf dem Symbol enthält, um anzugeben, dass es für alle Benutzer vertrauenswürdig ist.Check that it contains a + symbol on the icon to indicate it's trusted for all users.
  • Entfernen Sie das Zertifikat aus der Keychain des Systems.Remove the certificate from the system keychain.
  • Führen Sie die folgenden Befehle aus:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Schließen Sie alle geöffneten Browser Instanzen.Close any browser instances open. Öffnen Sie ein neues Browserfenster für die app.Open a new browser window to app.

Informationen zur Behandlung von Zertifikat Problemen mit Visual Studio finden Sie unter https-Fehler mit IIS Express (dotnet/aspnetcore #16892) .See HTTPS Error using IIS Express (dotnet/AspNetCore #16892) for troubleshooting certificate issues with Visual Studio.

IIS Express SSL-Zertifikat, das mit Visual Studio verwendet wird.IIS Express SSL certificate used with Visual Studio

Um Probleme mit dem IIS Express Zertifikat zu beheben, wählen Sie im Visual Studio-Installer Reparieren aus.To fix problems with the IIS Express certificate, select Repair from the Visual Studio installer. Weitere Informationen finden Sie in diesem GitHub-Problem.For more information, see this GitHub issue.

Zusätzliche InformationenAdditional information