Impor HTTPS no ASP.NET CoreEnforce HTTPS in ASP.NET Core

De Rick AndersonBy Rick Anderson

Este documento mostra como:This document shows how to:

  • Exigir HTTPS para todas as solicitações.Require HTTPS for all requests.
  • Redirecione todas as solicitações HTTP para HTTPS.Redirect all HTTP requests to HTTPS.

Nenhuma API pode impedir que um cliente envie dados confidenciais na primeira solicitação.No API can prevent a client from sending sensitive data on the first request.

Aviso

Projetos de APIAPI projects

Não use RequireHttpsAttribute em APIs Web que recebem informações confidenciais.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute usa códigos de status HTTP para redirecionar navegadores de HTTP para HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Os clientes de API podem não entender nem obedecer redirecionamentos de HTTP para HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Esses clientes podem enviar informações por HTTP.Such clients may send information over HTTP. As APIs Web devem:Web APIs should either:

  • Não escutar em HTTP.Not listen on HTTP.
  • Feche a conexão com o código de status 400 (Solicitação Ruim) e não atender à solicitação.Close the connection with status code 400 (Bad Request) and not serve the request.

Projetos de API e HSTSHSTS and API projects

Os projetos de API padrão não incluem HSTS porque o HSTS geralmente é uma instrução somente do navegador.The default API projects don't include HSTS because HSTS is generally a browser only instruction. Outros chamadores, como aplicativos de telefone ou área de trabalho, não obedecem à instrução.Other callers, such as phone or desktop apps, do not obey the instruction. Mesmo em navegadores, uma única chamada autenticada para uma API por HTTP tem riscos em redes inseguras.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. A abordagem segura é configurar projetos de API para apenas escutar e responder por HTTPS.The secure approach is to configure API projects to only listen to and respond over HTTPS.

Aviso

Projetos de APIAPI projects

Não use RequireHttpsAttribute em APIs Web que recebam informações confidenciais.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute usa códigos de status HTTP para redirecionar os navegadores de HTTP para HTTPS.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. Os clientes de API podem não entender ou obedecer a redirecionamentos de HTTP para HTTPS.API clients may not understand or obey redirects from HTTP to HTTPS. Esses clientes podem enviar informações por HTTP.Such clients may send information over HTTP. As APIs da Web devem ser:Web APIs should either:

  • Não escutar em HTTP.Not listen on HTTP.
  • Feche a conexão com o código de status 400 (solicitação inválida) e não atenda à solicitação.Close the connection with status code 400 (Bad Request) and not serve the request.

Solicitar HTTPSRequire HTTPS

É recomendável que a produção ASP.NET Core aplicativos Web usem:We recommend that production ASP.NET Core web apps use:

  • Middleware de redirecionamento de HTTPS ( UseHttpsRedirection ) para redirecionar solicitações HTTP para https.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • Middleware HSTS (UseHsts) para enviar cabeçalhos HSTS (protocolo de segurança de transporte estrito) http para clientes.HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

Observação

Os aplicativos implantados em uma configuração de proxy reverso permitem que o proxy manipule a segurança de conexão (HTTPS).Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). Se o proxy também tratar o redirecionamento de HTTPS, não será necessário usar o middleware de redirecionamento de HTTPS.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. Se o servidor proxy também tratar da gravação de cabeçalhos HSTS (por exemplo, suporte a HSTS nativo no IIS 10,0 (1709) ou posterior), o middleware HSTS não será exigido pelo aplicativo.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. Para obter mais informações, consulte recusar https/HSTS na criação do projeto.For more information, see Opt-out of HTTPS/HSTS on project creation.

UseHttpsRedirectionUseHttpsRedirection

O código a seguir chama UseHttpsRedirection a Startup classe: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();
}

O código realçado anterior:The preceding highlighted code:

É recomendável usar redirecionamentos temporários em vez de redirecionamentos permanentes.We recommend using temporary redirects rather than permanent redirects. O cache de link pode causar um comportamento instável em ambientes de desenvolvimento.Link caching can cause unstable behavior in development environments. Se você preferir enviar um código de status de redirecionamento permanente quando o aplicativo estiver em um ambiente de não desenvolvimento, consulte a seção Configurar redirecionamentos permanentes em produção.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. É recomendável usar o HSTS para sinalizar aos clientes que apenas solicitações de recursos seguras devem ser enviadas para o aplicativo (somente em produção).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

Configuração de portasPort configuration

Uma porta deve estar disponível para o middleware redirecionar uma solicitação insegura para HTTPS.A port must be available for the middleware to redirect an insecure request to HTTPS. Se nenhuma porta estiver disponível:If no port is available:

  • O redirecionamento para HTTPS não ocorre.Redirection to HTTPS doesn't occur.
  • O middleware registra o aviso "Falha ao determinar a porta https para redirecionamento".The middleware logs the warning "Failed to determine the https port for redirect."

Especifique a porta HTTPS usando qualquer uma das seguintes abordagens:Specify the HTTPS port using any of the following approaches:

  • De acordo com https_port a configuração do host:Set the https_port host setting:

    • Na configuração do host.In host configuration.

    • Definindo a ASPNETCORE_HTTPS_PORT variável de ambiente.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Adicionando uma entrada de nível superior em 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": "*"
      }
      
  • Indique uma porta com o esquema seguro usando a variável ASPNETCORE_URLS ambiente .Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. A variável de ambiente configura o servidor.The environment variable configures the server. O middleware descobre indiretamente a porta HTTPS por meio de IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Essa abordagem não funciona em implantações de proxy reverso.This approach doesn't work in reverse proxy deployments.

  • De acordo com https_port a configuração do host:Set the https_port host setting:

    • Na configuração do host.In host configuration.

    • Definindo a ASPNETCORE_HTTPS_PORT variável de ambiente.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Adicionando uma entrada de nível superior em appsettings.json :By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • Indique uma porta com o esquema seguro usando a variável de ambiente ASPNETCORE_URLS.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. A variável de ambiente configura o servidor.The environment variable configures the server. O middleware descobre indiretamente a porta HTTPS via IServerAddressesFeature .The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. Essa abordagem não funciona em implantações de proxy reverso.This approach doesn't work in reverse proxy deployments.

  • Em desenvolvimento, defina uma URL HTTPS no launchsettings.jsem.In development, set an HTTPS URL in launchsettings.json. Habilite HTTPS quando IIS Express for usado.Enable HTTPS when IIS Express is used.

  • Configure um ponto de extremidade de URL HTTPS para uma implantação de borda voltada para o público do Kestrel servidor ou do HTTP.sys Server.Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. Somente uma porta https é usada pelo aplicativo.Only one HTTPS port is used by the app. O middleware descobre a porta por meio de IServerAddressesFeature .The middleware discovers the port via IServerAddressesFeature.

Observação

Quando um aplicativo é executado em uma configuração de proxy reverso, o IServerAddressesFeature não está disponível.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. Defina a porta usando uma das outras abordagens descritas nesta seção.Set the port using one of the other approaches described in this section.

Implantações do EdgeEdge deployments

Quando Kestrel ou HTTP.sys é usado como um servidor de borda voltado ao público Kestrel ou HTTP.sys deve ser configurado para escutar em ambos:When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • A porta segura em que o cliente é redirecionado (normalmente, 443 em produção e 5001 em desenvolvimento).The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • A porta insegura (normalmente, 80 em produção e 5000 em desenvolvimento).The insecure port (typically, 80 in production and 5000 in development).

A porta insegura deve ser acessível pelo cliente para que o aplicativo receba uma solicitação insegura e redirecione o cliente para a porta segura.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.

Para obter mais informações, consulte Kestrel configuração do ponto de extremidade ou Implementação do servidor Web HTTP.sys no ASP.NET Core .For more information, see Kestrel endpoint configuration or Implementação do servidor Web HTTP.sys no ASP.NET Core.

Cenários de implantaçãoDeployment scenarios

Qualquer firewall entre o cliente e o servidor também deve ter portas de comunicação abertas para tráfego.Any firewall between the client and server must also have communication ports open for traffic.

Se as solicitações forem encaminhadas em uma configuração de proxy reverso, use o middleware de cabeçalhos encaminhados antes de chamar o middleware de redirecionamento de HTTPS.If requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. O middleware de cabeçalhos encaminhados atualiza o Request.Scheme , usando o X-Forwarded-Proto cabeçalho.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. O middleware permite que os URIs de redirecionamento e outras políticas de segurança funcionem corretamente.The middleware permits redirect URIs and other security policies to work correctly. Quando o Middleware de Headers Encaminhados não é usado, o aplicativo de back-end pode não receber o esquema correto e terminar em um loop de redirecionamento.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. Uma mensagem de erro comum do usuário final é que ocorreram muitos redirecionamentos.A common end user error message is that too many redirects have occurred.

Ao implantar no Serviço de Aplicativo do Azure, siga as diretrizes em Tutorial: Vincular um certificado SSL personalizado existente aos Aplicativos Web do Azure.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

OpçõesOptions

O código realçado a seguir chama AddHttpsRedirection para configurar opções de 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 = (int) HttpStatusCode.TemporaryRedirect;
        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 = (int) HttpStatusCode.TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}

Chamar AddHttpsRedirection só é necessário para alterar os valores de ou HttpsPort RedirectStatusCode .Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

O código realçado anterior:The preceding highlighted code:

Configurar redirecionamentos permanentes na produçãoConfigure permanent redirects in production

O middleware usa como padrão enviar um Status307TemporaryRedirect com todos os redirecionamentos.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. Se você preferir enviar um código de status de redirecionamento permanente quando o aplicativo estiver em um ambiente de não desenvolvimento, wrap a configuração de opções de middleware em uma verificação condicional para um ambiente que não seja de desenvolvimento.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.

Ao configurar serviços no 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 = (int) HttpStatusCode.PermanentRedirect;
            options.HttpsPort = 443;
        });
    }
}

Ao configurar serviços no 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 = (int) HttpStatusCode.MovedPermanently;
            options.HttpsPort = 443;
        });
    }
}

Abordagem alternativa de middleware de redirecionamento HTTPSHTTPS Redirection Middleware alternative approach

Uma alternativa ao uso do Middleware de Redirecionamento HTTPS ( UseHttpsRedirection ) é usar o Middleware de Reescrita de URL ( AddRedirectToHttps ).An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttps também pode definir o código de status e a porta quando o redirecionamento é executado.AddRedirectToHttps can also set the status code and port when the redirect is executed. Para obter mais informações, consulte Middleware de reescrita de URL.For more information, see URL Rewriting Middleware.

Ao redirecionar para HTTPS sem o requisito de regras de redirecionamento adicionais, é recomendável usar o Middleware de Redirecionamento HTTPS ( UseHttpsRedirection ) descrito neste tópico.When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

Protocolo de segurança de transporte estrito HTTP (HSTS)HTTP Strict Transport Security Protocol (HSTS)

Por OWASP, o HSTS (segurança de transporte estrito) http é um aprimoramento de segurança opcional que é especificado por um aplicativo Web por meio do uso de um cabeçalho de resposta.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 um navegador que dá suporte a HSTS recebe este cabeçalho:When a browser that supports HSTS receives this header:

  • O navegador armazena a configuração para o domínio que impede o envio de qualquer comunicação via HTTP.The browser stores configuration for the domain that prevents sending any communication over HTTP. O navegador força toda a comunicação por HTTPS.The browser forces all communication over HTTPS.
  • O navegador impede que o usuário use certificados não confiáveis ou inválidos.The browser prevents the user from using untrusted or invalid certificates. O navegador desabilita as solicitações que permitem que um usuário confie temporariamente em um certificado.The browser disables prompts that allow a user to temporarily trust such a certificate.

Como o HSTS é imposto pelo cliente, ele tem algumas limitações:Because HSTS is enforced by the client, it has some limitations:

  • O cliente deve dar suporte a HSTS.The client must support HSTS.
  • HSTS requer pelo menos uma solicitação HTTPS bem-sucedida para estabelecer a política HSTS.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • O aplicativo deve verificar cada solicitação HTTP e redirecionar ou rejeitar a solicitação HTTP.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.NET Core 2,1 e posterior implementa HSTS com o UseHsts método de extensão.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. O código a seguir chama UseHsts quando o aplicativo não está no modo de desenvolvimento: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ão é recomendado no desenvolvimento porque as configurações de HSTS são altamente armazenáveis em cache pelos navegadores.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. Por padrão, UseHsts o exclui o endereço de loopback local.By default, UseHsts excludes the local loopback address.

Para ambientes de produção que estão implementando HTTPS pela primeira vez, defina o HstsOptions inicial. MaxAge como um valor pequeno usando um dos TimeSpan métodos.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. Defina o valor de horas para não mais do que um único dia, caso precise reverter a infraestrutura HTTPS para HTTP.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. Depois que você estiver confiante na sustentabilidade da configuração de HTTPS, aumente o valor de HSTS max-age ; um valor comumente usado é de um ano.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

O seguinte código: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 = (int) HttpStatusCode.TemporaryRedirect;
        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 = (int) HttpStatusCode.TemporaryRedirect;
        options.HttpsPort = 5001;
    });
}
  • Define o parâmetro PreLoad do Strict-Transport-Security cabeçalho.Sets the preload parameter of the Strict-Transport-Security header. Pré-carregar não faz parte da especificação RFC HSTS, mas tem suporte de navegadores da Web para pré-carregar HSTS sites na nova instalação.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. Para obter mais informações, confira https://hstspreload.org/.For more information, see https://hstspreload.org/.
  • Habilita includeSubDomain, que aplica a política HSTS a subdomínios de host.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • Define explicitamente o max-age parâmetro do Strict-Transport-Security header como 60 dias.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. Se não estiver definido, o padrão será 30 dias.If not set, defaults to 30 days. Para obter mais informações, consulte a diretiva max-age.For more information, see the max-age directive.
  • Adiciona example.com à lista de hosts a excluir.Adds example.com to the list of hosts to exclude.

UseHsts exclui os seguintes hosts de loopback:UseHsts excludes the following loopback hosts:

  • localhost : o endereço de loopback IPv4.localhost : The IPv4 loopback address.
  • 127.0.0.1 : o endereço de loopback IPv4.127.0.0.1 : The IPv4 loopback address.
  • [::1] : o endereço de loopback IPv6.[::1] : The IPv6 loopback address.

Opt-out de HTTPS/HSTS na criação do projetoOpt-out of HTTPS/HSTS on project creation

Em alguns cenários de serviço de back-back em que a segurança de conexão é tratada na borda pública da rede, a configuração da segurança de conexão em cada nó não é necessária.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. Os aplicativos Web gerados com os modelos no Visual Studio ou no comando dotnet new habilitam o redirecionamento HTTPS e o HSTS.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. Para implantações que não exigem esses cenários, você pode optar por HTTPS/HSTS quando o aplicativo é criado com base no modelo.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

Para ressutar HTTPS/HSTS:To opt-out of HTTPS/HSTS:

Desmarque a caixa de seleção Configurar para HTTPS.Uncheck the Configure for HTTPS checkbox.

Novo ASP.NET caixa de diálogo Aplicativo Web Principal mostrando a caixa de seleção Configurar para HTTPS não selecionado.

Novo ASP.NET caixa de diálogo Aplicativo Web Principal mostrando a caixa de seleção Configurar para HTTPS não selecionado.

Confiar no certificado ASP.NET de desenvolvimento HTTPS do ASP.NET Core no Windows e no macOSTrust the ASP.NET Core HTTPS development certificate on Windows and macOS

Para o navegador Firefox, consulte a próxima seção.For the Firefox browser, see the next section.

O SDK do .NET Core inclui um certificado de desenvolvimento HTTPS.The .NET Core SDK includes an HTTPS development certificate. O certificado é instalado como parte da experiência de primeira execução.The certificate is installed as part of the first-run experience. Por exemplo, dotnet --info produz uma variação da seguinte saída: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.

Instalar o SDK do .NET Core instala o certificado de desenvolvimento HTTPS do ASP.NET Core no repositório de certificados do usuário local.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. O certificado foi instalado, mas não é confiável.The certificate has been installed, but it's not trusted. Para confiar no certificado, execute a etapa única para executar a dev-certs ferramenta dotnet:To trust the certificate, perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

O comando a seguir fornece ajuda para a ferramenta dev-certs:The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Confiar no certificado HTTPS com o Firefox para evitar SEC_ERROR_INADEQUATE_KEY_USAGE erroTrust the HTTPS certificate with Firefox to prevent SEC_ERROR_INADEQUATE_KEY_USAGE error

O navegador Firefox usa seu próprio repositório de certificados e, portanto, não confia no IIS Express ou nos Kestrel certificados de desenvolvedor.The Firefox browser uses it's own certificate store, and therefore doesn't trust the IIS Express or Kestrel developer certificates.

Há duas abordagens para confiar no certificado HTTPS com o Firefox, criar um arquivo de política ou configurá-lo com o navegador FireFox.There are two approaches to trusting the HTTPS certificate with Firefox, create a policy file or configure with the FireFox browser. Configurar com o navegador cria o arquivo de política, portanto, as duas abordagens são equivalentes.Configuring with the browser creates the policy file, so the two approaches are equivalent.

Criar um arquivo de política para confiar no certificado HTTPS com o FirefoxCreate a policy file to trust HTTPS certificate with Firefox

Criar um arquivo de política em:Create a policy file at:

Adicione o JSON a seguir ao arquivo de política do Firefox:Add the following JSON to the Firefox policy file:

{
  "policies": {
    "Certificates": {
      "ImportEnterpriseRoots": true
    }
  }
}

O arquivo de política anterior torna os certificados de confiança do Firefox dos certificados confiáveis no repositório de certificados do Windows.The preceding policy file makes Firefox trust certificates from the trusted certificates in the Windows certificate store. A próxima seção fornece uma abordagem alternativa para criar o arquivo de política anterior comprar usando o navegador Firefox.The next section provides an alternative approach to create the preceding policy file buy using the Firefox browser.

Configurar a confiança do certificado HTTPS usando o navegador FirefoxConfigure trust of HTTPS certificate using Firefox browser

Defina security.enterprise_roots.enabled = true usando as seguintes instruções:Set security.enterprise_roots.enabled = true using the following instructions:

  1. Insira about:config no navegador Firefox.Enter about:config in the FireFox browser.
  2. Selecione aceitar o risco e continuar se você aceitar o risco.Select Accept the Risk and Continue if you accept the risk.
  3. Selecione Mostrar tudoSelect Show All
  4. Definição security.enterprise_roots.enabled = trueSet security.enterprise_roots.enabled = true
  5. Sair e reiniciar o FirefoxExit and restart Firefox

Para obter mais informações, consulte Configurando autoridades de certificação (CAs) no Firefox e o arquivo mozilla/policy-templates/README.For more information, see Setting Up Certificate Authorities (CAs) in Firefox and the mozilla/policy-templates/README file.

Como configurar um certificado de desenvolvedor para o DockerHow to set up a developer certificate for Docker

Consulte este problema do GitHub.See this GitHub issue.

Confiar no Ubuntu no certificado para comunicação serviço a serviçoUbuntu trust the certificate for service-to-service communication

  1. Instale o OpenSSL 1.1.1h ou posterior.Install OpenSSL 1.1.1h or later. Consulte sua distribuição para obter instruções sobre como atualizar o OpenSSL.See your distribution for instructions on how to update OpenSSL.

  2. Execute os seguintes comandos:Run the following commands:

    sudo dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    sudo update-ca-certificates
    

O caminho no comando anterior é específico para o Ubuntu.The path in the preceding command is specific for Ubuntu. Para outras distribuições, selecione um caminho apropriado ou use o caminho para as Autoridades de Certificação (CAs).For other distributions, select an appropriate path or use the path for the Certificate Authorities (CAs).

Confiar no certificado HTTPS no LinuxTrust HTTPS certificate on Linux

Estabelecer confiança é específico do navegador.Establishing trust is browser specific. As seções a seguir fornecem instruções para os navegadores Chromium Edge e Chrome e para Firefox.The following sections provide instructions for the Chromium browsers Edge and Chrome and for Firefox.

Confiar no certificado HTTPS no Linux usando o Edge ou o ChromeTrust HTTPS certificate on Linux using Edge or Chrome

Para navegadores chromium no Linux:For chromium browsers on Linux:

  • Instale o libnss3-tools para sua distribuição.Install the libnss3-tools for your distribution.

  • Crie ou verifique $HOME/.pki/nssdb se a pasta existe no computador.Create or verify the $HOME/.pki/nssdb folder exists on the machine.

  • Exporte o certificado com o seguinte comando:Export the certificate with the following command:

    dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    O caminho no comando anterior é específico para o Ubuntu.The path in the preceding command is specific for Ubuntu. Para outras distribuições, selecione um caminho apropriado ou use o caminho para as Autoridades de Certificação (CAs).For other distributions, select an appropriate path or use the path for the Certificate Authorities (CAs).

  • Execute os seguintes comandos:Run the following commands:

    certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n localhost -i /usr/local/share/ca-certificates/  aspnet/https.crt
    certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n localhost -i /usr/local/share/ca-certificates/  aspnet/https.crt
    
  • Saia e reinicie o navegador.Exit and restart the browser.

Confiar no certificado com o Firefox no LinuxTrust the certificate with Firefox on Linux

  • Exporte o certificado com o seguinte comando:Export the certificate with the following command:

    dotnet dev-certs https -ep /usr/local/share/ca-certificates/aspnet/https.crt --format PEM
    

    O caminho no comando anterior é específico para o Ubuntu.The path in the preceding command is specific for Ubuntu. Para outras distribuições, selecione um caminho apropriado ou use o caminho para as autoridades de certificação (CAs).For other distributions, select an appropriate path or use the path for the Certificate Authorities (CAs).

  • Crie um arquivo JSON /usr/lib/firefox/distribution/policies.json com o seguinte conteúdo:Create a JSON file at /usr/lib/firefox/distribution/policies.json with the following contents:

    {
        "policies": {
            "Certificates": {
                "Install": [
                    "/usr/local/share/ca-certificates/aspnet/https.crt"
                ]
            }
        }
    }
    

Consulte Configurar a confiança do certificado HTTPS usando o navegador Firefox neste documento para obter uma maneira alternativa de configurar o arquivo de política usando o navegador.See Configure trust of HTTPS certificate using Firefox browser in this document for an alternative way to configure the policy file using the browser.

Confiar no certificado com Fedora 34Trust the certificate with Fedora 34

Consulte este comentário do GitHub.See this GitHub comment.

Confiar no certificado HTTPS do subsistema do Windows para LinuxTrust HTTPS certificate from Windows Subsystem for Linux

O subsistema do Windows para Linux (WSL) gera um certificado de desenvolvimento assinado por HTTPS.The Windows Subsystem for Linux (WSL) generates an HTTPS self-signed development certificate. Para configurar o repositório de certificados do Windows para confiar no certificado WSL:To configure the Windows certificate store to trust the WSL certificate:

  • Exporte o certificado do desenvolvedor para um arquivo no Windows:Export the developer certificate to a file on Windows:

    dotnet dev-certs https -ep C:\<<path-to-folder>>\aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$
    

    Onde $CREDENTIAL_PLACEHOLDER$ é uma senha.Where $CREDENTIAL_PLACEHOLDER$ is a password.

  • Em uma janela WSL, importe o certificado exportado na instância WSL:In a WSL window, import the exported certificate on the WSL instance:

    dotnet dev-certs https --clean --import /mnt/c/<<path-to-folder>>/aspnetcore.pfx -p $CREDENTIAL_PLACEHOLDER$
    

A abordagem anterior é uma operação única por certificado e por distribuição WSL.The preceding approach is a one time operation per certificate and per WSL distribution. É mais fácil do que exportar o certificado repetidamente.It's easier than exporting the certificate over and over. Se você atualizar ou regenerar o certificado no Windows, talvez seja necessário executar os comandos anteriores novamente.If you update or regenerate the certificate on windows, you might need to run the preceding commands again.

Solucionar problemas de certificadoTroubleshoot certificate problems

Esta seção fornece ajuda quando o ASP.NET Core certificado de desenvolvimento HTTPS foi instalado e é confiável, mas você ainda tem avisos do navegador de que o certificado não é confiável.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. O certificado de desenvolvimento de ASP.NET Core HTTPS é usado pelo Kestrel .The ASP.NET Core HTTPS development certificate is used by Kestrel.

Para reparar o certificado de IIS Express, consulte este problema de StackOverflow .To repair the IIS Express certificate, see this Stackoverflow issue.

Todas as plataformas – certificado não confiávelAll platforms - certificate not trusted

Execute os seguintes comandos:Run the following commands:

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

Feche todas as instâncias do navegador abertas.Close any browser instances open. Abra uma nova janela do navegador para o aplicativo.Open a new browser window to app. A confiança do certificado é armazenada em cache por navegadores.Certificate trust is cached by browsers.

Os comandos anteriores resolvem a maioria dos problemas de confiança do navegador.The preceding commands solve most browser trust issues. Se o navegador ainda não estiver confiando no certificado, siga as sugestões específicas da plataforma a seguir.If the browser is still not trusting the certificate, follow the platform-specific suggestions that follow.

Docker – certificado não confiávelDocker - certificate not trusted

  • Exclua a pasta C:\Users { USER}\AppData\Roaming\ASP.NET\Https.Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • Limpe a solução.Clean the solution. Exclua as pastas bin e obj.Delete the bin and obj folders.
  • Reinicie a ferramenta de desenvolvimento.Restart the development tool. Por exemplo, Visual Studio, Visual Studio Code ou Visual Studio para Mac.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows – certificado não confiávelWindows - certificate not trusted

  • Verifique os certificados no armazenamento de certificados.Check the certificates in the certificate store. Deve haver um localhost certificado com o nome amigável em ASP.NET Core HTTPS development certificate 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
  • Remova todos os certificados encontrados de autoridades de certificação raiz pessoais e confiáveis.Remove all the found certificates from both Personal and Trusted root certification authorities. Não remova o certificado IIS Express localhost.Do not remove the IIS Express localhost certificate.
  • Execute os seguintes comandos:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Feche todas as instâncias do navegador abertas.Close any browser instances open. Abra uma nova janela do navegador para o aplicativo.Open a new browser window to app.

OS X – certificado não confiávelOS X - certificate not trusted

  • Abra o Acesso ao KeyChain.Open KeyChain Access.
  • Selecione o conjunto de chaves do sistema.Select the System keychain.
  • Verifique a presença de um certificado localhost.Check for the presence of a localhost certificate.
  • Verifique se ele contém um + símbolo no ícone para indicar que ele é confiável para todos os usuários.Check that it contains a + symbol on the icon to indicate it's trusted for all users.
  • Remova o certificado do conjunto de chaves do sistema.Remove the certificate from the system keychain.
  • Execute os seguintes comandos:Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

Feche todas as instâncias do navegador abertas.Close any browser instances open. Abra uma nova janela do navegador para o aplicativo.Open a new browser window to app.

Consulte erro de HTTPS usando IIS Express (dotNet/AspNetCore #16892) para solucionar problemas de certificado com o Visual Studio.See HTTPS Error using IIS Express (dotnet/AspNetCore #16892) for troubleshooting certificate issues with Visual Studio.

IIS Express certificado SSL usado com o Visual StudioIIS Express SSL certificate used with Visual Studio

Para corrigir problemas com o certificado de IIS Express, selecione reparar no instalador do Visual Studio.To fix problems with the IIS Express certificate, select Repair from the Visual Studio installer. Saiba mais neste tópico do GitHub.For more information, see this GitHub issue.

Informações adicionaisAdditional information