Applicare HTTPS in ASP.NET CoreEnforce HTTPS in ASP.NET Core

Di Rick AndersonBy Rick Anderson

Questo documento illustra come:This document shows how to:

  • Richiedi HTTPS per tutte le richieste.Require HTTPS for all requests.
  • Reindirizzare tutte le richieste HTTP a HTTPS.Redirect all HTTP requests to HTTPS.

Nessuna API può impedire a un client di inviare dati sensibili alla prima richiesta.No API can prevent a client from sending sensitive data on the first request.

Avviso

Progetti APIAPI projects

Non usare RequireHttpsAttribute su API Web che ricevono informazioni riservate.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute USA i codici di stato HTTP per reindirizzare i browser da HTTP a HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. I client API potrebbero non comprendere o obbedire ai reindirizzamenti da HTTP a HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Tali client possono inviare informazioni tramite HTTP.Such clients may send information over HTTP. Le API Web devono:Web APIs should either:

  • Non è in ascolto su HTTP.Not listen on HTTP.
  • Chiudere la connessione con il codice di stato 400 (richiesta non valida) e non soddisfare la richiesta.Close the connection with status code 400 (Bad Request) and not serve the request.

HSTS e progetti APIHSTS and API projects

I progetti API predefiniti non includono HSTS perché HSTS è in genere un'istruzione solo del browser.The default API projects don't include HSTS because HSTS is generally a browser only instruction. Altri chiamanti, ad esempio le applicazioni per telefoni o desktop, non rispettano l'istruzione.Other callers, such as phone or desktop apps, do not obey the instruction. Anche all'interno dei browser, una singola chiamata autenticata a un'API su HTTP presenta rischi per le reti non sicure.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. L'approccio sicuro consiste nel configurare i progetti API in modo che ascoltino e rispondono solo tramite HTTPS.The secure approach is to configure API projects to only listen to and respond over HTTPS.

Avviso

Progetti APIAPI projects

Non usare RequireHttpsAttribute su API Web che ricevono informazioni riservate.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute USA i codici di stato HTTP per reindirizzare i browser da HTTP a HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. I client API potrebbero non comprendere o obbedire ai reindirizzamenti da HTTP a HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Tali client possono inviare informazioni tramite HTTP.Such clients may send information over HTTP. Le API Web devono:Web APIs should either:

  • Non è in ascolto su HTTP.Not listen on HTTP.
  • Chiudere la connessione con il codice di stato 400 (richiesta non valida) e non soddisfare la richiesta.Close the connection with status code 400 (Bad Request) and not serve the request.

Richiedere HTTPSRequire HTTPS

Si consiglia di usare le app Web ASP.NET Core di produzione:We recommend that production ASP.NET Core web apps use:

  • Middleware di reindirizzamento HTTPS (UseHttpsRedirection) per reindirizzare le richieste HTTP a HTTPS.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • HSTS middleware (UseHsts) per inviare intestazioni HTTP Strict Transport Security Protocol (HSTS) ai client.HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

Nota

Le app distribuite in una configurazione di proxy inverso consentono al proxy di gestire la sicurezza della connessione (HTTPS).Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). Se il proxy gestisce anche il reindirizzamento HTTPS, non è necessario usare il middleware di reindirizzamento HTTPS.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. Se il server proxy gestisce anche la scrittura delle intestazioni HSTS, ad esempio il supporto nativo di HSTS in IIS 10,0 (1709) o versioni successive, il middleware HSTS non è richiesto dall'app.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. Per altre informazioni, vedere rifiutare esplicitamente HTTPS/HSTS durante la creazione del progetto.For more information, see Opt-out of HTTPS/HSTS on project creation.

UseHttpsRedirectionUseHttpsRedirection

Il codice seguente chiama UseHttpsRedirection nella 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();
}

Il codice evidenziato precedente:The preceding highlighted code:

È consigliabile usare reindirizzamenti temporanei anziché reindirizzamenti permanenti.We recommend using temporary redirects rather than permanent redirects. La memorizzazione nella cache dei collegamenti può causare un comportamento instabile negli ambienti di sviluppo.Link caching can cause unstable behavior in development environments. Se si preferisce inviare un codice di stato di reindirizzamento permanente quando l'app si trova in un ambiente non di sviluppo, vedere la sezione configurare reindirizzamenti permanenti in produzione .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. È consigliabile usare HSTS per segnalare ai client che solo le richieste di risorse protette devono essere inviate all'app (solo nell'ambiente di produzione).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

Configurazione portaPort configuration

Una porta deve essere disponibile affinché il middleware reindirizzi una richiesta non sicura a HTTPS.A port must be available for the middleware to redirect an insecure request to HTTPS. Se non è disponibile alcuna porta:If no port is available:

  • Il reindirizzamento a HTTPS non viene eseguito.Redirection to HTTPS doesn't occur.
  • Il middleware registra l'avviso "Impossibile determinare la porta HTTPS per il reindirizzamento".The middleware logs the warning "Failed to determine the https port for redirect."

Specificare la porta HTTPS usando uno degli approcci seguenti:Specify the HTTPS port using any of the following approaches:

  • Impostare l' impostazione hosthttps_port:Set the https_port host setting:

    • Nella configurazione host.In host configuration.

    • Impostando la variabile di ambiente ASPNETCORE_HTTPS_PORT.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Aggiungendo una voce di primo livello in 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": "*"
      }
      
  • Indicare una porta con lo schema protetto usando la variabile di ambiente ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. La variabile di ambiente configura il server.The environment variable configures the server. Il middleware individua indirettamente la porta HTTPS tramite IServerAddressesFeature.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Questo approccio non funziona nelle distribuzioni di proxy inverso.This approach doesn't work in reverse proxy deployments.

  • Impostare l' impostazione hosthttps_port:Set the https_port host setting:

    • Nella configurazione host.In host configuration.

    • Impostando la variabile di ambiente ASPNETCORE_HTTPS_PORT.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Aggiungendo una voce di primo livello in appSettings. JSON:By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Indicare una porta con lo schema protetto usando la variabile di ambiente ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. La variabile di ambiente configura il server.The environment variable configures the server. Il middleware individua indirettamente la porta HTTPS tramite IServerAddressesFeature.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Questo approccio non funziona nelle distribuzioni di proxy inverso.This approach doesn't work in reverse proxy deployments.

  • In sviluppo impostare un URL HTTPS in launchsettings. JSON.In development, set an HTTPS URL in launchsettings.json. Abilitare HTTPS quando viene usato IIS Express.Enable HTTPS when IIS Express is used.

  • Configurare un endpoint URL HTTPS per una distribuzione perimetrale pubblica del server gheppio o del server http. sys .Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. L'app usa solo una porta HTTPS .Only one HTTPS port is used by the app. Il middleware individua la porta tramite IServerAddressesFeature.The middleware discovers the port via IServerAddressesFeature.

Nota

Quando un'app viene eseguita in una configurazione di proxy inverso, IServerAddressesFeature non è disponibile.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. Impostare la porta usando uno degli altri approcci descritti in questa sezione.Set the port using one of the other approaches described in this section.

Distribuzioni EdgeEdge deployments

Quando gheppio o HTTP. sys viene usato come server perimetrale pubblico, gheppio o HTTP. sys deve essere configurato in modo da essere in ascolto su entrambi:When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • La porta protetta in cui viene reindirizzato il client, in genere 443 in produzione e 5001 in fase di sviluppo.The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • Porta non sicura, in genere 80 in produzione e 5000 in fase di sviluppo.The insecure port (typically, 80 in production and 5000 in development).

Per consentire all'app di ricevere una richiesta non sicura e reindirizzare il client alla porta protetta, la porta non protetta deve essere accessibile dal client.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.

Per ulteriori informazioni, vedere la pagina relativa alla configurazione dell'endpoint gheppio o Implementazione del server Web HTTP.sys in ASP.NET Core.For more information, see Kestrel endpoint configuration or Implementazione del server Web HTTP.sys in ASP.NET Core.

Scenari di distribuzioneDeployment scenarios

Qualsiasi firewall tra il client e il server deve avere anche porte di comunicazione aperte per il traffico.Any firewall between the client and server must also have communication ports open for traffic.

Se le richieste vengono inviate in una configurazione del proxy inverso, usare il middleware delle intestazioni inoltro prima di chiamare il middleware di reindirizzamento HTTPS.If requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. Il middleware intestazioni inoltri aggiorna il Request.Scheme usando l'intestazione X-Forwarded-Proto.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. Il middleware consente l'uso corretto degli URI di reindirizzamento e di altri criteri di sicurezza.The middleware permits redirect URIs and other security policies to work correctly. Quando il middleware delle intestazioni inoltrate non viene usato, l'app back-end potrebbe non ricevere lo schema corretto e finire in un ciclo di reindirizzamento.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. Un messaggio di errore dell'utente finale comune è che si sono verificati troppi reindirizzamenti.A common end user error message is that too many redirects have occurred.

Quando si esegue la distribuzione nel servizio app Azure, seguire le istruzioni riportate in Tutorial: Associare un certificato SSL personalizzato esistente ad App Web di Azure.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

OpzioniOptions

Il codice evidenziato seguente chiama AddHttpsRedirection per configurare le opzioni del middleware: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;
    });
}

La chiamata a AddHttpsRedirection è necessaria solo per modificare i valori di HttpsPort o RedirectStatusCode.Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

Il codice evidenziato precedente:The preceding highlighted code:

Configurare reindirizzamenti permanenti nell'ambiente di produzioneConfigure permanent redirects in production

Per impostazione predefinita, il middleware Invia un Status307TemporaryRedirect con tutti i reindirizzamenti.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. Se si preferisce inviare un codice di stato di reindirizzamento permanente quando l'app si trova in un ambiente non di sviluppo, eseguire il wrapping della configurazione delle opzioni middleware in un controllo condizionale per un ambiente non di sviluppo.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.

Quando si configurano i servizi 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;
        });
    }
}

Quando si configurano i servizi 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;
        });
    }
}

Approccio alternativo del middleware di reindirizzamento HTTPSHTTPS Redirection Middleware alternative approach

Un'alternativa all'utilizzo del middleware di reindirizzamento HTTPS (UseHttpsRedirection) consiste nell'utilizzo del middleware di riscrittura URL (AddRedirectToHttps).An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttps può inoltre impostare il codice di stato e la porta quando viene eseguito il reindirizzamento.AddRedirectToHttps can also set the status code and port when the redirect is executed. Per altre informazioni, vedere middleware riscrittura URL.For more information, see URL Rewriting Middleware.

Quando si reindirizza a HTTPS senza la necessità di regole di reindirizzamento aggiuntive, è consigliabile usare il middleware di reindirizzamento HTTPS (UseHttpsRedirection) descritto in questo argomento.When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

Protocollo di sicurezza del trasporto HTTP Strict (HSTS)HTTP Strict Transport Security Protocol (HSTS)

Per OWASP, http Strict Transport Security (HSTS) è un miglioramento della sicurezza esplicito che viene specificato da un'app Web tramite l'uso di un'intestazione di risposta.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. Quando un browser che supporta HSTS riceve questa intestazione:When a browser that supports HSTS receives this header:

  • Il browser archivia la configurazione per il dominio che impedisce l'invio di comunicazioni tramite HTTP.The browser stores configuration for the domain that prevents sending any communication over HTTP. Il browser forza tutte le comunicazioni su HTTPS.The browser forces all communication over HTTPS.
  • Il browser impedisce all'utente di usare certificati non attendibili o non validi.The browser prevents the user from using untrusted or invalid certificates. Il browser Disabilita i prompt che consentono a un utente di considerare temporaneamente attendibile tale certificato.The browser disables prompts that allow a user to temporarily trust such a certificate.

Poiché HSTS viene applicato dal client, presenta alcune limitazioni:Because HSTS is enforced by the client it has some limitations:

  • Il client deve supportare HSTS.The client must support HSTS.
  • HSTS richiede almeno una richiesta HTTPS corretta per stabilire il criterio HSTS.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • L'applicazione deve controllare ogni richiesta HTTP e reindirizzare o rifiutare la richiesta HTTP.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.NET Core 2,1 e versioni successive implementa HSTS con il metodo di estensione UseHsts.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. Il codice seguente chiama UseHsts quando l'app non è in modalità di sviluppo: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 non è consigliato per lo sviluppo poiché le impostazioni HSTS sono altamente memorizzabili nella cache dai browser.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. Per impostazione predefinita, UseHsts esclude l'indirizzo di loopback locale.By default, UseHsts excludes the local loopback address.

Per gli ambienti di produzione che implementano HTTPS per la prima volta, impostare il valore iniziale HstsOptions. MaxAge su un valore ridotto utilizzando uno dei metodi 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. Impostare il valore da ore a non più di un singolo giorno nel caso in cui sia necessario ripristinare l'infrastruttura HTTPS su HTTP.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. Quando si è certi della sostenibilità della configurazione HTTPS, aumentare il valore di HSTS max-age; un valore di uso comune è di un anno.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

Il codice seguente: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;
    });
}
  • Imposta il parametro preload dell'intestazione Strict-Transport-Security.Sets the preload parameter of the Strict-Transport-Security header. Il precaricamento non fa parte della specifica RFC HSTS, ma è supportato dai Web browser per precaricare i siti HSTS in una nuova installazione.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. Per altre informazioni, vedere https://hstspreload.org/.See https://hstspreload.org/ for more information.
  • Abilita includeSubDomain, che applica il criterio HSTS ai sottodomini host.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • Imposta in modo esplicito il parametro max-age dell'intestazione Strict-Transport-Security su 60 giorni.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. Se non è impostato, il valore predefinito è 30 giorni.If not set, defaults to 30 days. Per ulteriori informazioni, vedere la direttiva max-age .See the max-age directive for more information.
  • Aggiunge example.com all'elenco di host da escludere.Adds example.com to the list of hosts to exclude.

UseHsts esclude gli host di loopback seguenti:UseHsts excludes the following loopback hosts:

  • localhost : Indirizzo di loopback IPv4.localhost : The IPv4 loopback address.
  • 127.0.0.1 : Indirizzo di loopback IPv4.127.0.0.1 : The IPv4 loopback address.
  • [::1] : Indirizzo di loopback IPv6.[::1] : The IPv6 loopback address.

Rifiutare esplicitamente il protocollo HTTPS/HSTS durante la creazione del progettoOpt-out of HTTPS/HSTS on project creation

In alcuni scenari di servizi back-end in cui la sicurezza della connessione viene gestita al bordo pubblico della rete, non è necessario configurare la sicurezza della connessione in ogni nodo.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. Le app Web generate dai modelli in Visual Studio o dal comando DotNet New abilitano il reindirizzamento HTTPS e HSTS.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. Per le distribuzioni che non richiedono questi scenari, è possibile rifiutare esplicitamente HTTPS/HSTS quando l'app viene creata dal modello.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

Per rifiutare esplicitamente il protocollo HTTPS/HSTS:To opt-out of HTTPS/HSTS:

Deselezionare la casella di controllo Configura per HTTPS .Uncheck the Configure for HTTPS check box.

Finestra di dialogo nuova applicazione Web ASP.NET Core che mostra la casella di controllo Configura per HTTPS deselezionata.

Finestra di dialogo nuova applicazione Web ASP.NET Core che mostra la casella di controllo Configura per HTTPS deselezionata.

Considera attendibile il certificato di sviluppo HTTPS ASP.NET Core in Windows e macOSTrust the ASP.NET Core HTTPS development certificate on Windows and macOS

Il .NET Core SDK include un certificato di sviluppo HTTPS.The .NET Core SDK includes an HTTPS development certificate. Il certificato viene installato come parte dell'esperienza di prima esecuzione.The certificate is installed as part of the first-run experience. Ad esempio, dotnet --info produce un output simile al seguente: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'installazione di .NET Core SDK include l'installazione del certificato di sviluppo HTTPS ASP.NET Core nell'archivio certificati utente locale.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. Il certificato è stato installato, ma non è attendibile.The certificate has been installed, but it's not trusted. Per considerare attendibile il certificato, eseguire il passaggio unico per eseguire lo strumento DotNet dev-certs:To trust the certificate perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

Il comando seguente consente di visualizzare informazioni della Guida sullo strumento dev-certs:The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Come configurare un certificato per sviluppatori per DockerHow to set up a developer certificate for Docker

Vedere il problema in GitHub.See this GitHub issue.

Considera attendibile il certificato HTTPS del sottosistema Windows per LinuxTrust HTTPS certificate from Windows Subsystem for Linux

Il sottosistema Windows per Linux (WSL) genera un certificato autofirmato HTTPS. Per configurare l'archivio certificati di Windows per considerare attendibile il certificato WSL:The Windows Subsystem for Linux (WSL) generates a HTTPS self-signed cert. To configure the Windows certificate store to trust the WSL certificate:

  • Eseguire il comando seguente per esportare il certificato generato da 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>

  • In una finestra di WSL eseguire il comando seguente: 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

    Il comando precedente imposta le variabili di ambiente in modo che Linux usi il certificato attendibile di Windows.The preceding command sets the environment variables so Linux uses the Windows trusted certificate.

Risolvere i problemi relativi ai certificatiTroubleshoot certificate problems

Questa sezione fornisce assistenza quando il certificato di sviluppo ASP.NET Core HTTPS è stato installato e considerato attendibile, ma sono ancora presenti avvisi del browser che non sono attendibili per il certificato.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.

Tutte le piattaforme-certificato non attendibileAll platforms - certificate not trusted

Eseguire i comandi seguenti:Run the following commands:

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

Chiude tutte le istanze del browser aperte.Close any browser instances open. Aprire una nuova finestra del browser per l'app.Open a new browser window to app. Il trust tra certificati viene memorizzato nella cache dai browser.Certificate trust is cached by browsers.

I comandi precedenti risolvono la maggior parte dei problemi di attendibilità del browser.The preceding commands solve most browser trust issues. Se il browser non considera ancora attendibile il certificato, attenersi ai suggerimenti specifici della piattaforma seguenti.If the browser is still not trusting the certificate, follow the platform specific suggestions that follow.

Docker: certificato non attendibileDocker - certificate not trusted

  • Eliminare la cartella C:\Users @ no__t-1user} \AppData\Roaming\ASP.NET\HttpsDelete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • Pulire la soluzione.Clean the solution. Eliminare le cartelle bin e obj.Delete the bin and obj folders.
  • Riavviare lo strumento di sviluppo.Restart the development tool. Ad esempio, Visual Studio, Visual Studio Code o Visual Studio per Mac.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows: certificato non attendibileWindows - certificate not trusted

  • Controllare i certificati nell'archivio certificati.Check the certificates in the certificate store. Deve essere presente un certificato localhost con il nome descrittivo ASP.NET Core HTTPS development certificate in Current User > Personal > Certificates e 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
  • Rimuovere tutti i certificati trovati dalle autorità di certificazione radice personali e attendibili.Remove all the found certificates from both Personal and Trusted root certification authorities. Non rimuovere il certificato localhost IIS Express.Do not remove the IIS Express localhost certificate.
  • Eseguire i comandi seguenti:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Chiude tutte le istanze del browser aperte.Close any browser instances open. Aprire una nuova finestra del browser per l'app.Open a new browser window to app.

OS X-certificato non attendibileOS X - certificate not trusted

  • Aprire l'accesso keychain.Open KeyChain Access.
  • Selezionare il keychain di sistema.Select the System keychain.
  • Verificare la presenza di un certificato localhost.Check for the presence of a localhost certificate.
  • Verificare che contenga un simbolo + sull'icona per indicare la relativa attendibilità per tutti gli utenti.Check that it contains a + symbol on the icon to indicate its trusted for all users.
  • Rimuovere il certificato dal keychain di sistema.Remove the certificate from the system keychain.
  • Eseguire i comandi seguenti:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Chiude tutte le istanze del browser aperte.Close any browser instances open. Aprire una nuova finestra del browser per l'app.Open a new browser window to app.

Informazioni aggiuntiveAdditional information