Appliquer HTTPS dans ASP.NET CoreEnforce HTTPS in ASP.NET Core

Par Rick AndersonBy Rick Anderson

Ce document montre comment :This document shows how to:

  • Exiger le protocole HTTPs pour toutes les demandes.Require HTTPS for all requests.
  • Redirige toutes les requêtes HTTP vers HTTPS.Redirect all HTTP requests to HTTPS.

Aucune API ne peut empêcher un client d’envoyer des données sensibles à la première demande.No API can prevent a client from sending sensitive data on the first request.

Avertissement

Projets d’APIAPI projects

Ne pas utiliser RequireHttpsAttribute sur les API web qui reçoivent des informations sensibles.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute utilise les codes d’état HTTP pour rediriger les navigateurs de HTTP vers HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Les clients d’API ne peuvent pas comprendre ou obéir aux règles de redirection HTTP vers HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Ces clients peuvent envoyer des informations sur HTTP.Such clients may send information over HTTP. Les API web doivent soit :Web APIs should either:

  • Ne pas écouter sur HTTP.Not listen on HTTP.
  • Fermer la connexion avec le code d’état 400 (demande incorrecte) et ne pas servir la demande.Close the connection with status code 400 (Bad Request) and not serve the request.

Projets HSTS et APIHSTS and API projects

Les projets d’API par défaut n’incluent pas HSTS , car HSTS est généralement une instruction de navigateur uniquement.The default API projects don't include HSTS because HSTS is generally a browser only instruction. Les autres appelants, tels que les applications de bureau ou de téléphone, ne respectent pas l’instruction.Other callers, such as phone or desktop apps, do not obey the instruction. Même dans les navigateurs, un seul appel authentifié à une API sur HTTP présente des risques sur les réseaux non sécurisés.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. L’approche sécurisée consiste à configurer des projets d’API pour écouter et répondre uniquement au protocole HTTPs.The secure approach is to configure API projects to only listen to and respond over HTTPS.

Avertissement

Projets d’APIAPI projects

Ne pas utiliser RequireHttpsAttribute sur les API web qui reçoivent des informations sensibles.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute utilise les codes d’état HTTP pour rediriger les navigateurs de HTTP vers HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Les clients d’API ne peuvent pas comprendre ou obéir aux règles de redirection HTTP vers HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Ces clients peuvent envoyer des informations sur HTTP.Such clients may send information over HTTP. Les API web doivent soit :Web APIs should either:

  • Ne pas écouter sur HTTP.Not listen on HTTP.
  • Fermer la connexion avec le code d’état 400 (demande incorrecte) et ne pas servir la demande.Close the connection with status code 400 (Bad Request) and not serve the request.

Exiger HTTPSRequire HTTPS

Nous vous recommandons d’utiliser les applications Web de production ASP.NET Core :We recommend that production ASP.NET Core web apps use:

  • Intergiciel (middleware) de redirection HTTPs (UseHttpsRedirection) pour rediriger les requêtes HTTP vers HTTPs.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • Intergiciel (middleware) HSTS (UseHsts) pour envoyer des en-têtes HSTS (protocole de sécurité de transport strict) aux clients.HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

Notes

Les applications déployées dans une configuration de proxy inverse autorisent le proxy à gérer la sécurité de la connexion (HTTPs).Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). Si le proxy gère également la redirection HTTPs, il n’est pas nécessaire d’utiliser l’intergiciel (middleware) de redirection HTTPs.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. Si le serveur proxy gère également l’écriture d’en-têtes HSTS (par exemple, la prise en charge native de HSTS dans IIS 10,0 (1709) ou version ultérieure), l’application ne nécessite pas d’intergiciel HSTS.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. Pour plus d’informations, consultez opt-out de https/HSTS lors de la création du projet.For more information, see Opt-out of HTTPS/HSTS on project creation.

UseHttpsRedirectionUseHttpsRedirection

Le code suivant appelle UseHttpsRedirection dans la classe Startup :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();
}

Code mis en surbrillance précédent :The preceding highlighted code:

Nous vous recommandons d’utiliser des redirections temporaires plutôt que des redirections permanentes.We recommend using temporary redirects rather than permanent redirects. La mise en cache des liens peut provoquer un comportement instable dans les environnements de développement.Link caching can cause unstable behavior in development environments. Si vous préférez envoyer un code d’état de redirection permanent lorsque l’application se trouve dans un environnement de non-développement, consultez la section configurer des redirections permanentes en 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. Nous vous recommandons d’utiliser HSTS pour signaler aux clients que seules les demandes de ressources sécurisées doivent être envoyées à l’application (uniquement en production).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

Configuration du portPort configuration

Un port doit être disponible pour que l’intergiciel redirige une requête non sécurisée vers HTTPs.A port must be available for the middleware to redirect an insecure request to HTTPS. Si aucun port n’est disponible :If no port is available:

  • La redirection vers HTTPs ne se produit pas.Redirection to HTTPS doesn't occur.
  • L’intergiciel enregistre l’avertissement « échec de la détermination du port HTTPS pour la redirection ».The middleware logs the warning "Failed to determine the https port for redirect."

Spécifiez le port HTTPs à l’aide de l’une des approches suivantes :Specify the HTTPS port using any of the following approaches:

  • Définissez le paramètre d’hôtehttps_port :Set the https_port host setting:

    • Dans la configuration de l’hôte.In host configuration.

    • En définissant la variable d’environnement ASPNETCORE_HTTPS_PORT.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • En ajoutant une entrée de niveau supérieur dans 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": "*"
      }
      
  • Indiquez un port avec le schéma sécurisé à l’aide de la variable d’environnement ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. La variable d’environnement configure le serveur.The environment variable configures the server. L’intergiciel Découvre indirectement le port HTTPs via IServerAddressesFeature.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Cette approche ne fonctionne pas dans les déploiements de proxy inverse.This approach doesn't work in reverse proxy deployments.

  • Définissez le paramètre d’hôtehttps_port :Set the https_port host setting:

    • Dans la configuration de l’hôte.In host configuration.

    • En définissant la variable d’environnement ASPNETCORE_HTTPS_PORT.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • En ajoutant une entrée de niveau supérieur dans appSettings. JSON:By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Indiquez un port avec le schéma sécurisé à l’aide de la variable d’environnement ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. La variable d’environnement configure le serveur.The environment variable configures the server. L’intergiciel Découvre indirectement le port HTTPs via IServerAddressesFeature.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Cette approche ne fonctionne pas dans les déploiements de proxy inverse.This approach doesn't work in reverse proxy deployments.

  • Dans développement, définissez une URL HTTPs dans launchsettings. JSON.In development, set an HTTPS URL in launchsettings.json. Activez le protocole HTTPs lorsque IIS Express est utilisé.Enable HTTPS when IIS Express is used.

  • Configurez un point de terminaison d’URL HTTPs pour un déploiement de périphérie public d’un serveur Kestrel ou http. sys .Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. Un seul port HTTPS est utilisé par l’application.Only one HTTPS port is used by the app. L’intergiciel Découvre le port via IServerAddressesFeature.The middleware discovers the port via IServerAddressesFeature.

Notes

Quand une application est exécutée dans une configuration de proxy inverse, IServerAddressesFeature n’est pas disponible.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. Définissez le port à l’aide de l’une des autres approches décrites dans cette section.Set the port using one of the other approaches described in this section.

Déploiements de périphérieEdge deployments

Quand Kestrel ou HTTP. sys est utilisé en tant que serveur Edge public, Kestrel ou HTTP. sys doivent être configurés pour écouter les deux :When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • Le port sécurisé où le client est redirigé (en général, 443 en production et 5001 en développement).The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • Le port non sécurisé (en général, 80 en production et 5000 en développement).The insecure port (typically, 80 in production and 5000 in development).

Le port non sécurisé doit être accessible par le client afin que l’application puisse recevoir une demande non sécurisée et rediriger le client vers le port sécurisé.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.

Pour plus d’informations, consultez configuration du point de terminaison Kestrel ou Implémentation du serveur web HTTP.sys dans ASP.NET Core.For more information, see Kestrel endpoint configuration or Implémentation du serveur web HTTP.sys dans ASP.NET Core.

Scénarios de déploiementDeployment scenarios

Tout pare-feu entre le client et le serveur doit également disposer de ports de communication ouverts pour le trafic.Any firewall between the client and server must also have communication ports open for traffic.

Si les demandes sont transférées dans une configuration de proxy inverse, utilisez l' intergiciel d’en-tête transféré avant d’appeler l’intergiciel (middleware) de REdirection HTTPS.If requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. L’intergiciel (middleware) des en-têtes transférés met à jour l' Request.Schemeà l’aide de l’en-tête X-Forwarded-Proto.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. L’intergiciel permet de rediriger les URI et d’autres stratégies de sécurité pour fonctionner correctement.The middleware permits redirect URIs and other security policies to work correctly. Lorsque l’intergiciel d’en-têtes transférés n’est pas utilisé, l’application principale peut ne pas recevoir le schéma correct et se terminer dans une boucle de redirection.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. Un message d’erreur de l’utilisateur final commun est qu’un trop grand nombre de redirections se sont produites.A common end user error message is that too many redirects have occurred.

Lors du déploiement sur Azure App Service, suivez les instructions du Didacticiel : lier un certificat SSL personnalisé existant à Azure Web Apps.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

OptionsOptions

Le code en surbrillance suivant appelle AddHttpsRedirection pour configurer les options de l’intergiciel :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;
    });
}

L’appel de AddHttpsRedirection est nécessaire uniquement pour modifier les valeurs de HttpsPort ou RedirectStatusCode.Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

Code mis en surbrillance précédent :The preceding highlighted code:

Configurer des redirections permanentes en productionConfigure permanent redirects in production

Par défaut, l’intergiciel envoie un Status307TemporaryRedirect avec toutes les redirections.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. Si vous préférez envoyer un code d’état de redirection permanent lorsque l’application se trouve dans un environnement de non-développement, encapsulez la configuration des options d’intergiciel dans une vérification conditionnelle pour un environnement de non-développement.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.

Lors de la configuration des services dans 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;
        });
    }
}

Lors de la configuration des services dans 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;
        });
    }
}

Approche alternative de l’intergiciel (middleware) de redirection HTTPsHTTPS Redirection Middleware alternative approach

Une alternative à l’utilisation de l’intergiciel (middleware) de redirection HTTPs (UseHttpsRedirection) consiste à utiliser l’intergiciel (AddRedirectToHttps) de réécriture d’URL.An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttps pouvez également définir le code et le port d’état lors de l’exécution de la redirection.AddRedirectToHttps can also set the status code and port when the redirect is executed. Pour plus d’informations, consultez intergiciel (middleware) réécriture d’URL.For more information, see URL Rewriting Middleware.

Lorsque vous redirigez vers HTTPs sans avoir besoin de règles de redirection supplémentaires, nous vous recommandons d’utiliser le middleware de redirection HTTPs (UseHttpsRedirection) décrit dans cette rubrique.When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

Protocole HTTP strict transport Security (HSTS)HTTP Strict Transport Security Protocol (HSTS)

Par OWASP, http strict transport Security (HSTS) est une amélioration de sécurité qui est spécifiée par une application Web via l’utilisation d’un en-tête de réponse.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. Quand un navigateur prenant en charge HSTS reçoit cet en-tête :When a browser that supports HSTS receives this header:

  • Le navigateur stocke la configuration pour le domaine qui empêche l’envoi de toute communication sur HTTP.The browser stores configuration for the domain that prevents sending any communication over HTTP. Le navigateur force toutes les communications sur HTTPs.The browser forces all communication over HTTPS.
  • Le navigateur empêche l’utilisateur d’utiliser des certificats non approuvés ou non valides.The browser prevents the user from using untrusted or invalid certificates. Le navigateur désactive les invites qui permettent à un utilisateur d’approuver temporairement ce type de certificat.The browser disables prompts that allow a user to temporarily trust such a certificate.

Étant donné que HSTS est appliqué par le client, il présente certaines limitations :Because HSTS is enforced by the client it has some limitations:

  • Le client doit prendre en charge HSTS.The client must support HSTS.
  • HSTS nécessite au moins une demande HTTPs réussie pour établir la stratégie HSTS.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • L’application doit vérifier chaque requête HTTP et rediriger ou rejeter la requête HTTP.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.NET Core 2,1 et versions ultérieures implémentent HSTS avec la méthode d’extension UseHsts.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. Le code suivant appelle UseHsts lorsque l’application n’est pas en mode de développement: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 n’est pas recommandé dans le développement, car les paramètres HSTS sont très facilement mis en cache par les navigateurs.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. Par défaut, UseHsts exclut l’adresse de bouclage locale.By default, UseHsts excludes the local loopback address.

Pour les environnements de production qui implémentent le protocole HTTPs pour la première fois, définissez HstsOptions. MaxAge initiale sur une valeur faible à l’aide de l’une des méthodes TimeSpan.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. Définissez la valeur des heures sur un seul jour si vous devez rétablir l’infrastructure HTTPs sur HTTP.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. Une fois que vous êtes certain de la durabilité de la configuration HTTPs, augmentez la valeur HSTS max-age. une valeur couramment utilisée est d’un an.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

L'exemple de code suivant :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;
    });
}
  • Définit le paramètre de préchargement de l’en-tête strict-transport-Security.Sets the preload parameter of the Strict-Transport-Security header. Le préchargement ne fait pas partie de la spécification RFC HSTS, mais est pris en charge par les navigateurs Web pour précharger des sites HSTS sur une nouvelle installation.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. Pour plus d’informations, consultez https://hstspreload.org/.See https://hstspreload.org/ for more information.
  • Active includeSubDomain, qui applique la stratégie HSTS pour héberger des sous-domaines.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • Définit explicitement le paramètre max-age de l’en-tête strict-transport-Security sur 60 jours.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. S’il n’est pas défini, la valeur par défaut est 30 jours.If not set, defaults to 30 days. Pour plus d’informations, consultez la directive max-age .See the max-age directive for more information.
  • Ajoute example.com à la liste des hôtes à exclure.Adds example.com to the list of hosts to exclude.

UseHsts exclut les hôtes de bouclage suivants :UseHsts excludes the following loopback hosts:

  • localhost : adresse de bouclage IPv4.localhost : The IPv4 loopback address.
  • 127.0.0.1 : adresse de bouclage IPv4.127.0.0.1 : The IPv4 loopback address.
  • [::1] : adresse de bouclage IPv6.[::1] : The IPv6 loopback address.

Désactiver HTTPs/HSTS lors de la création du projetOpt-out of HTTPS/HSTS on project creation

Dans certains scénarios de service backend où la sécurité de connexion est gérée au niveau du périmètre public du réseau, la configuration de la sécurité des connexions sur chaque nœud n’est pas obligatoire.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. Les applications Web générées à partir des modèles dans Visual Studio ou à partir de la commande dotnet New activent la redirection https et HSTS.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. Pour les déploiements qui n’ont pas besoin de ces scénarios, vous pouvez désactiver HTTPs/HSTS quand l’application est créée à partir du modèle.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

Pour désactiver HTTPs/HSTS :To opt-out of HTTPS/HSTS:

Désactivez la case à cocher configurer pour HTTPS .Uncheck the Configure for HTTPS check box.

Nouvelle boîte de dialogue d’application Web ASP.NET Core avec la case à cocher configurer pour HTTPs désélectionnée.

Nouvelle boîte de dialogue d’application Web ASP.NET Core avec la case à cocher configurer pour HTTPs désélectionnée.

Approuver le certificat de développement HTTPs ASP.NET Core sur Windows et macOSTrust the ASP.NET Core HTTPS development certificate on Windows and macOS

Le kit SDK .NET Core comprend un certificat de développement HTTPs.The .NET Core SDK includes an HTTPS development certificate. Le certificat est installé dans le cadre de la première exécution.The certificate is installed as part of the first-run experience. Par exemple, dotnet --info produit une sortie similaire à ce qui suit :For example, dotnet --info produces output similar to the following:

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.

L’installation du kit SDK .NET Core installe le certificat de développement ASP.NET Core HTTPS dans le magasin de certificats de l’utilisateur local.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. Le certificat a été installé, mais il n’est pas approuvé.The certificate has been installed, but it's not trusted. Pour faire confiance au certificat, effectuez l’étape unique pour exécuter l’outil dotnet dev-certs :To trust the certificate perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

La commande suivante fournit de l’aide sur l’outil dev-certs :The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Comment configurer un certificat de développeur pour l’arrimeurHow to set up a developer certificate for Docker

Consultez ce problème GitHub.See this GitHub issue.

Approuver le certificat HTTPs à partir du sous-système Windows pour LinuxTrust HTTPS certificate from Windows Subsystem for Linux

Le sous-système Windows pour Linux (WSL) génère un certificat auto-signé HTTPs. Pour configurer le magasin de certificats Windows de façon à ce qu’il approuve le certificat WSL :The Windows Subsystem for Linux (WSL) generates a HTTPS self-signed cert. To configure the Windows certificate store to trust the WSL certificate:

  • Exécutez la commande suivante pour exporter le certificat généré par WSL : dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <cryptic-password>Run the following command to export the WSL generated certificate: dotnet dev-certs https -ep %USERPROFILE%\.aspnet\https\aspnetapp.pfx -p <cryptic-password>

  • Dans une fenêtre WSL, exécutez la commande suivante : ASPNETCORE_Kestrel__Certificates__Default__Password="<cryptic-password>" ASPNETCORE_Kestrel__Certificates__Default__Path=/mnt/c/Users/user-name/.aspnet/https/aspnetapp.pfx dotnet watch runIn 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

    La commande précédente définit les variables d’environnement pour que Linux utilise le certificat de confiance Windows.The preceding command sets the environment variables so Linux uses the Windows trusted certificate.

Résoudre les problèmes de certificatTroubleshoot certificate problems

Cette section fournit de l’aide lorsque le certificat de développement HTTPs ASP.NET Core a été installé et approuvé, mais que vous avez encore des avertissements de navigateur indiquant que le certificat n’est pas approuvé.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. Le certificat de développement HTTPs ASP.NET Core est utilisé par Kestrel.The ASP.NET Core HTTPS development certificate is used by Kestrel.

Toutes les plateformes-certificat non approuvéAll platforms - certificate not trusted

Exécutez les commandes suivantes :Run the following commands:

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

Fermez toutes les instances de navigateur ouvertes.Close any browser instances open. Ouvrez une nouvelle fenêtre de navigateur pour l’application.Open a new browser window to app. L’approbation de certificat est mise en cache par les navigateurs.Certificate trust is cached by browsers.

Les commandes précédentes résolvent la plupart des problèmes d’approbation du navigateur.The preceding commands solve most browser trust issues. Si le navigateur n’approuve toujours pas le certificat, suivez les suggestions spécifiques à la plateforme qui suivent.If the browser is still not trusting the certificate, follow the platform specific suggestions that follow.

Dockr-certificat non approuvéDocker - certificate not trusted

  • Supprimez le dossier C:\Users{user} \AppData\Roaming\ASP.NET\Https .Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • Nettoyez la solution.Clean the solution. Supprimez les dossiers bin et obj.Delete the bin and obj folders.
  • Redémarrez l’outil de développement.Restart the development tool. Par exemple, Visual Studio, Visual Studio Code ou Visual Studio pour Mac.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows-certificat non approuvéWindows - certificate not trusted

  • Vérifiez les certificats dans le magasin de certificats.Check the certificates in the certificate store. Il doit y avoir un certificat de localhost avec le nom convivial ASP.NET Core HTTPS development certificate à la fois sous Current User > Personal > Certificates et 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
  • Supprimez tous les certificats détectés des autorités de certification racines personnelles et de confiance.Remove all the found certificates from both Personal and Trusted root certification authorities. Ne supprimez pas le certificat IIS Express localhost.Do not remove the IIS Express localhost certificate.
  • Exécutez les commandes suivantes :Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Fermez toutes les instances de navigateur ouvertes.Close any browser instances open. Ouvrez une nouvelle fenêtre de navigateur pour l’application.Open a new browser window to app.

OS X-certificat non approuvéOS X - certificate not trusted

  • Ouvrez le trousseau d’accès.Open KeyChain Access.
  • Sélectionnez le trousseau système.Select the System keychain.
  • Vérifiez la présence d’un certificat localhost.Check for the presence of a localhost certificate.
  • Vérifiez qu’il contient un symbole + sur l’icône pour indiquer son approuvé pour tous les utilisateurs.Check that it contains a + symbol on the icon to indicate its trusted for all users.
  • Supprimez le certificat du trousseau système.Remove the certificate from the system keychain.
  • Exécutez les commandes suivantes :Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Fermez toutes les instances de navigateur ouvertes.Close any browser instances open. Ouvrez une nouvelle fenêtre de navigateur pour l’application.Open a new browser window to app.

Consultez erreur HTTPS à l’aide de IIS Express (dotnet/AspNetCore #16892) pour résoudre les problèmes liés aux certificats dans Visual Studio.See HTTPS Error using IIS Express (dotnet/AspNetCore #16892) for troubleshooting certificate issues with Visual Studio.

IIS Express certificat SSL utilisé avec Visual StudioIIS Express SSL certificate used with Visual Studio

Pour résoudre les problèmes liés au certificat de IIS Express, sélectionnez réparer dans le programme d’installation de Visual Studio.To fix problems with the IIS Express certificate, select Repair from the Visual Studio installer.

Informations supplémentairesAdditional information