ASP.NET Core에서 HTTPS 적용Enforce HTTPS in ASP.NET Core

작성자: Rick AndersonBy Rick Anderson

이 문서에서는 다음과 같은 내용을 살펴봅니다.This document shows how to:

  • 모든 요청에 대해 HTTPS를 요구 합니다.Require HTTPS for all requests.
  • 모든 HTTP 요청을 HTTPS로 리디렉션합니다.Redirect all HTTP requests to HTTPS.

API가 없으면 클라이언트가 첫 번째 요청에서 중요 한 데이터를 전송 하지 못할 수 있습니다.No API can prevent a client from sending sensitive data on the first request.

경고

API 프로젝트API projects

중요 한 정보를 수신 하는 웹 Api에 RequireHttpsAttribute 를 사용 하지 마세요.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute은 HTTP 상태 코드를 사용 하 여 HTTP에서 HTTPS로 브라우저를 리디렉션합니다.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API 클라이언트는 HTTP에서 HTTPS로의 리디렉션을 인식 하거나 준수 하지 않을 수 있습니다.API clients may not understand or obey redirects from HTTP to HTTPS. 이러한 클라이언트는 HTTP를 통해 정보를 보낼 수 있습니다.Such clients may send information over HTTP. 웹 Api는 다음 중 하나를 수행 해야 합니다.Web APIs should either:

  • HTTP에서 수신 하지 않습니다.Not listen on HTTP.
  • 상태 코드 400 (잘못 된 요청)이 포함 된 연결을 닫고 요청을 제공 하지 않습니다.Close the connection with status code 400 (Bad Request) and not serve the request.

HSTS 및 API 프로젝트HSTS and API projects

HSTS는 일반적으로 브라우저 전용 명령 이므로 기본 API 프로젝트는 Hsts 를 포함 하지 않습니다.The default API projects don't include HSTS because HSTS is generally a browser only instruction. 전화 또는 데스크톱 앱과 같은 다른 호출자는 지침을 따르지 않습니다 .Other callers, such as phone or desktop apps, do not obey the instruction. 브라우저 내 에서도 HTTP를 통한 API에 대 한 인증 된 단일 호출은 안전 하지 않은 네트워크에서 위험이 있습니다.Even within browsers, a single authenticated call to an API over HTTP has risks on insecure networks. 안전한 방법은 HTTPS를 통해서만 수신 대기 하 고 응답 하도록 API 프로젝트를 구성 하는 것입니다.The secure approach is to configure API projects to only listen to and respond over HTTPS.

경고

API 프로젝트API projects

중요 한 정보를 수신 하는 웹 Api에 RequireHttpsAttribute 를 사용 하지 마세요.Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute은 HTTP 상태 코드를 사용 하 여 HTTP에서 HTTPS로 브라우저를 리디렉션합니다.RequireHttpsAttribute uses HTTP status codes to redirect browsers from HTTP to HTTPS. API 클라이언트는 HTTP에서 HTTPS로의 리디렉션을 인식 하거나 준수 하지 않을 수 있습니다.API clients may not understand or obey redirects from HTTP to HTTPS. 이러한 클라이언트는 HTTP를 통해 정보를 보낼 수 있습니다.Such clients may send information over HTTP. 웹 Api는 다음 중 하나를 수행 해야 합니다.Web APIs should either:

  • HTTP에서 수신 하지 않습니다.Not listen on HTTP.
  • 상태 코드 400 (잘못 된 요청)이 포함 된 연결을 닫고 요청을 제공 하지 않습니다.Close the connection with status code 400 (Bad Request) and not serve the request.

HTTPS 필요Require HTTPS

프로덕션 ASP.NET Core 웹 앱을 사용 하는 것이 좋습니다.We recommend that production ASP.NET Core web apps use:

  • Https 리디렉션 미들웨어 (UseHttpsRedirection)-HTTP 요청을 HTTPS로 리디렉션합니다.HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • 클라이언트에 HSTS (HTTP Strict Transport Security Protocol) 헤더를 전송 하는 HSTS 미들웨어 (Usehsts)HSTS Middleware (UseHsts) to send HTTP Strict Transport Security Protocol (HSTS) headers to clients.

참고

역방향 프록시 구성에 배포 된 앱을 통해 프록시가 연결 보안 (HTTPS)을 처리할 수 있습니다.Apps deployed in a reverse proxy configuration allow the proxy to handle connection security (HTTPS). 프록시가 HTTPS 리디렉션을 처리 하는 경우에는 HTTPS 리디렉션 미들웨어를 사용할 필요가 없습니다.If the proxy also handles HTTPS redirection, there's no need to use HTTPS Redirection Middleware. 또한 프록시 서버에서 HSTS 헤더 쓰기를 처리 하는 경우 (예: IIS 10.0 (1709) 이상에서 기본 hsts 지원) 앱에 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. 자세한 내용은 프로젝트를 만들 때 HTTPS/HSTS 옵트아웃 (Opt out)을 참조 하세요.For more information, see Opt-out of HTTPS/HSTS on project creation.

UseHttpsRedirectionUseHttpsRedirection

다음 코드는 Startup 클래스에서 UseHttpsRedirection을 호출 합니다.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();
}

앞에서 강조 표시 된 코드:The preceding highlighted code:

영구 리디렉션이 아닌 임시 리디렉션을 사용 하는 것이 좋습니다.We recommend using temporary redirects rather than permanent redirects. 링크 캐싱은 개발 환경에서 불안정 한 동작을 일으킬 수 있습니다.Link caching can cause unstable behavior in development environments. 앱이 개발 환경에 있지 않은 경우 영구 리디렉션 상태 코드를 보내려면 프로덕션에서 영구 리디렉션 구성 섹션을 참조 하세요.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. Hsts 를 사용 하 여 보안 리소스 요청만 앱에 전송 되어야 한다는 것을 클라이언트에 알리는 것이 좋습니다 (프로덕션 환경 에서만).We recommend using HSTS to signal to clients that only secure resource requests should be sent to the app (only in production).

포트 구성Port configuration

미들웨어가 안전 하지 않은 요청을 HTTPS로 리디렉션하는 데 포트를 사용할 수 있어야 합니다.A port must be available for the middleware to redirect an insecure request to HTTPS. 포트를 사용할 수 없는 경우:If no port is available:

  • HTTPS로의 리디렉션이 발생 하지 않습니다.Redirection to HTTPS doesn't occur.
  • 미들웨어는 "리디렉션을 위한 https 포트를 결정 하지 못했습니다." 경고를 기록 합니다.The middleware logs the warning "Failed to determine the https port for redirect."

다음 방법 중 하나를 사용 하 여 HTTPS 포트를 지정 합니다.Specify the HTTPS port using any of the following approaches:

  • @No__t-0 호스트 설정을설정 합니다.Set the https_port host setting:

    • 호스트 구성에서.In host configuration.

    • @No__t-0 환경 변수를 설정 합니다.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • 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": "*"
      }
      
  • ASPNETCORE_URLS 환경 변수를 사용 하 여 보안 체계가 있는 포트를 표시 합니다.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. 환경 변수는 서버를 구성 합니다.The environment variable configures the server. 미들웨어는 IServerAddressesFeature을 통해 HTTPS 포트를 간접적으로 검색 합니다.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. 이 방법은 역방향 프록시 배포에서 작동 하지 않습니다.This approach doesn't work in reverse proxy deployments.

  • @No__t-0 호스트 설정을설정 합니다.Set the https_port host setting:

    • 호스트 구성에서.In host configuration.

    • @No__t-0 환경 변수를 설정 합니다.By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • Appsettings에서 최상위 항목을 추가 합니다. json:By adding a top-level entry in appsettings.json:

      {
          "https_port": 443,
          "Logging": {
              "LogLevel": {
                  "Default": "Warning"
              }
          },
          "AllowedHosts": "*"
      }
      
  • ASPNETCORE_URLS 환경 변수를 사용 하 여 보안 체계가 있는 포트를 표시 합니다.Indicate a port with the secure scheme using the ASPNETCORE_URLS environment variable. 환경 변수는 서버를 구성 합니다.The environment variable configures the server. 미들웨어는 IServerAddressesFeature을 통해 HTTPS 포트를 간접적으로 검색 합니다.The middleware indirectly discovers the HTTPS port via IServerAddressesFeature. 이 방법은 역방향 프록시 배포에서 작동 하지 않습니다.This approach doesn't work in reverse proxy deployments.

  • 개발에서 launchsettings. json에 HTTPS URL을 설정 합니다.In development, set an HTTPS URL in launchsettings.json. IIS Express 사용 하는 경우 HTTPS를 사용 하도록 설정 합니다.Enable HTTPS when IIS Express is used.

  • Kestrel 서버 또는 http.sys 서버의 공용에 지 배포에 대 한 HTTPS URL 끝점을 구성 합니다.Configure an HTTPS URL endpoint for a public-facing edge deployment of Kestrel server or HTTP.sys server. 앱에서 HTTPS 포트 를 하나만 사용 합니다.Only one HTTPS port is used by the app. 미들웨어는 IServerAddressesFeature을 통해 포트를 검색 합니다.The middleware discovers the port via IServerAddressesFeature.

참고

앱이 역방향 프록시 구성에서 실행 되는 경우 IServerAddressesFeature을 사용할 수 없습니다.When an app is run in a reverse proxy configuration, IServerAddressesFeature isn't available. 이 섹션에 설명 된 다른 방법 중 하나를 사용 하 여 포트를 설정 합니다.Set the port using one of the other approaches described in this section.

Edge 배포Edge deployments

Kestrel 또는 HTTP.SYS를 공용에 지 서버로 사용 하는 경우 Kestrel 또는 HTTP.SYS를 모두 수신 하도록 구성 해야 합니다.When Kestrel or HTTP.sys is used as a public-facing edge server, Kestrel or HTTP.sys must be configured to listen on both:

  • 클라이언트가 리디렉션되는 보안 포트 (일반적으로 프로덕션의 경우 443, 개발 중인 경우 5001)The secure port where the client is redirected (typically, 443 in production and 5001 in development).
  • 안전 하지 않은 포트 (일반적으로 프로덕션의 경우 80, 개발에서 5000)The insecure port (typically, 80 in production and 5000 in development).

응용 프로그램이 안전 하지 않은 요청을 받고 클라이언트를 보안 포트로 리디렉션하도록 클라이언트에서 보안 되지 않은 포트에 액세스할 수 있어야 합니다.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.

자세한 내용은 Kestrel 끝점 구성 또는 ASP.NET Core에서 HTTP.sys 웹 서버 구현을 참조 하세요.For more information, see Kestrel endpoint configuration or ASP.NET Core에서 HTTP.sys 웹 서버 구현.

배포 시나리오Deployment scenarios

클라이언트와 서버 간의 모든 방화벽에는 트래픽에 대 한 통신 포트도 열려 있어야 합니다.Any firewall between the client and server must also have communication ports open for traffic.

역방향 프록시 구성에서 요청을 전달 하는 경우 HTTPS 리디렉션 미들웨어를 호출 하기 전에 전달 된 헤더 미들웨어 를 사용 합니다.If requests are forwarded in a reverse proxy configuration, use Forwarded Headers Middleware before calling HTTPS Redirection Middleware. 전달 된 헤더 미들웨어는 X-Forwarded-Proto 헤더를 사용 하 여 Request.Scheme을 업데이트 합니다.Forwarded Headers Middleware updates the Request.Scheme, using the X-Forwarded-Proto header. 미들웨어는 리디렉션 Uri 및 기타 보안 정책이 제대로 작동 하도록 허용 합니다.The middleware permits redirect URIs and other security policies to work correctly. 전달 된 헤더 미들웨어를 사용 하지 않는 경우 백엔드 앱은 올바른 체계를 수신 하지 않고 리디렉션 루프에서 종료 될 수 있습니다.When Forwarded Headers Middleware isn't used, the backend app might not receive the correct scheme and end up in a redirect loop. 일반적인 최종 사용자 오류 메시지는 너무 많은 리디렉션이 발생 한 것입니다.A common end user error message is that too many redirects have occurred.

Azure App Service에 배포 하는 경우 Tutorial의 지침을 따르세요. 기존 사용자 지정 SSL 인증서를 Azure Web Apps에 바인딩을 참조하세요.When deploying to Azure App Service, follow the guidance in Tutorial: Bind an existing custom SSL certificate to Azure Web Apps.

변수Options

다음 강조 표시 된 코드는 AddHttpsRedirection 을 호출 하 여 미들웨어 옵션을 구성 합니다.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;
    });
}

@No__t-0을 호출 하는 것은 HttpsPort 또는 RedirectStatusCode의 값을 변경 하는 데만 필요 합니다.Calling AddHttpsRedirection is only necessary to change the values of HttpsPort or RedirectStatusCode.

앞에서 강조 표시 된 코드:The preceding highlighted code:

프로덕션 환경에서 영구 리디렉션 구성Configure permanent redirects in production

미들웨어는 기본적으로 모든 리디렉션을 사용 하 여 Status307TemporaryRedirect 를 보냅니다.The middleware defaults to sending a Status307TemporaryRedirect with all redirects. 앱이 개발 환경에 있지 않은 경우 영구 리디렉션 상태 코드를 보내려면 비 개발 환경에 대 한 조건부 검사에서 미들웨어 옵션 구성을 래핑합니다.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.

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;
        });
    }
}

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;
        });
    }
}

HTTPS 리디렉션 미들웨어 대체 방법HTTPS Redirection Middleware alternative approach

HTTPS 리디렉션 미들웨어 (UseHttpsRedirection)를 사용 하는 대신 URL 재작성 미들웨어 (AddRedirectToHttps)를 사용할 수 있습니다.An alternative to using HTTPS Redirection Middleware (UseHttpsRedirection) is to use URL Rewriting Middleware (AddRedirectToHttps). AddRedirectToHttps은 리디렉션이 실행 될 때 상태 코드 및 포트를 설정할 수도 있습니다.AddRedirectToHttps can also set the status code and port when the redirect is executed. 자세한 내용은 URL 재작성 미들웨어를 참조 하세요.For more information, see URL Rewriting Middleware.

추가 리디렉션 규칙을 요구 하지 않고 HTTPS로 리디렉션하는 경우이 항목에서 설명 하는 HTTPS 리디렉션 미들웨어 (UseHttpsRedirection)를 사용 하는 것이 좋습니다.When redirecting to HTTPS without the requirement for additional redirect rules, we recommend using HTTPS Redirection Middleware (UseHttpsRedirection) described in this topic.

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

OWASP에 따라 hsts (HTTP Strict Transport security) 는 응답 헤더를 사용 하 여 웹 앱에서 지정 하는 옵트인 (opt in) 보안 기능입니다.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. HSTS를 지 원하는 브라우저가 이 헤더를 수신 하는 경우:When a browser that supports HSTS receives this header:

  • 브라우저는 HTTP를 통한 통신 전송을 방지 하는 도메인에 대 한 구성을 저장 합니다.The browser stores configuration for the domain that prevents sending any communication over HTTP. 브라우저는 HTTPS를 통한 모든 통신을 강제로 수행 합니다.The browser forces all communication over HTTPS.
  • 브라우저는 사용자가 신뢰할 수 없거나 유효 하지 않은 인증서를 사용 하지 못하도록 합니다.The browser prevents the user from using untrusted or invalid certificates. 브라우저는 사용자가 이러한 인증서를 일시적으로 신뢰할 수 있도록 하는 프롬프트를 사용 하지 않도록 설정 합니다.The browser disables prompts that allow a user to temporarily trust such a certificate.

HSTS는 클라이언트에 의해 적용 되므로 다음과 같은 몇 가지 제한 사항이 있습니다.Because HSTS is enforced by the client it has some limitations:

  • 클라이언트는 HSTS를 지원 해야 합니다.The client must support HSTS.
  • HSTS는 HSTS 정책을 설정 하기 위해 하나 이상의 성공한 HTTPS 요청이 필요 합니다.HSTS requires at least one successful HTTPS request to establish the HSTS policy.
  • 응용 프로그램은 모든 HTTP 요청을 확인 하 고 HTTP 요청을 리디렉션하거나 거부 해야 합니다.The application must check every HTTP request and redirect or reject the HTTP request.

ASP.NET Core 2.1 이상에서는 UseHsts 확장 메서드를 사용 하 여 HSTS를 구현 합니다.ASP.NET Core 2.1 and later implements HSTS with the UseHsts extension method. 다음 코드는 앱이 개발 모드가아닐 때 @no__t를 호출 합니다.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은 브라우저에서 HSTS 설정을 캐시할 수 있으므로 개발에 권장 되지 않습니다.UseHsts isn't recommended in development because the HSTS settings are highly cacheable by browsers. 기본적으로 UseHsts은 로컬 루프백 주소를 제외 합니다.By default, UseHsts excludes the local loopback address.

처음으로 HTTPS를 구현 하는 프로덕션 환경의 경우 TimeSpan 방법 중 하나를 사용 하 여 초기 MaxAge 을 작은 값으로 설정 합니다.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. HTTPS 인프라를 HTTP로 되돌려야 하는 경우에는 값을 하루에 한 번 이상으로 설정 해야 합니다.Set the value from hours to no more than a single day in case you need to revert the HTTPS infrastructure to HTTP. HTTPS 구성의 유지 가능성을 확신 하는 경우 HSTS 최대 기간 값을 늘립니다. 일반적으로 사용 되는 값은 1 년입니다.After you're confident in the sustainability of the HTTPS configuration, increase the HSTS max-age value; a commonly used value is one year.

다음 예를 참조하십시오.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;
    });
}
  • 엄격한 전송 보안 헤더의 미리 로드 매개 변수를 설정 합니다.Sets the preload parameter of the Strict-Transport-Security header. 프리 로드는 RFC hsts 사양의일부가 아니지만 웹 브라우저가 새로 설치 시 hsts 사이트를 미리 로드 하도록 지원 합니다.Preload isn't part of the RFC HSTS specification, but is supported by web browsers to preload HSTS sites on fresh install. 자세한 내용은 https://hstspreload.org/를 참조하세요.See https://hstspreload.org/ for more information.
  • 도메인을 호스트 하는 데 HSTS 정책을 적용 하는 Includesubdomain 도메인을 사용 하도록 설정 합니다.Enables includeSubDomain, which applies the HSTS policy to Host subdomains.
  • 엄격한 전송 보안 헤더의 최대 보존 기간 매개 변수를 60 일로 명시적으로 설정 합니다.Explicitly sets the max-age parameter of the Strict-Transport-Security header to 60 days. 설정 되지 않은 경우 기본값은 30 일입니다.If not set, defaults to 30 days. 자세한 내용은 최대 사용 기간 지시문 을 참조 하십시오.See the max-age directive for more information.
  • 제외할 호스트 목록에 example.com을 추가 합니다.Adds example.com to the list of hosts to exclude.

UseHsts은 다음 루프백 호스트를 제외 합니다.UseHsts excludes the following loopback hosts:

  • localhost은: IPv4 루프백 주소입니다.localhost : The IPv4 loopback address.
  • 127.0.0.1은: IPv4 루프백 주소입니다.127.0.0.1 : The IPv4 loopback address.
  • [::1]은: IPv6 루프백 주소입니다.[::1] : The IPv6 loopback address.

프로젝트를 만들 때 HTTPS/HSTS 옵트아웃 (Opt out)Opt-out of HTTPS/HSTS on project creation

네트워크의 공용 가장자리에서 연결 보안이 처리 되는 일부 백 엔드 서비스 시나리오에서는 각 노드에서 연결 보안을 구성할 필요가 없습니다.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. Visual Studio 또는 dotnet new 명령에서 템플릿에서 생성 된 웹 앱은 HTTPS 리디렉션과 hsts를 사용 하도록 설정 합니다.Web apps that are generated from the templates in Visual Studio or from the dotnet new command enable HTTPS redirection and HSTS. 이러한 시나리오가 필요 하지 않은 배포의 경우 템플릿에서 앱을 만들 때 HTTPS/HSTS를 옵트아웃 (opt out) 할 수 있습니다.For deployments that don't require these scenarios, you can opt-out of HTTPS/HSTS when the app is created from the template.

HTTPS/HSTS를 옵트아웃 (opt out) 하려면:To opt-out of HTTPS/HSTS:

HTTPS에 대해 구성 확인란의 선택을 취소 합니다.Uncheck the Configure for HTTPS check box.

HTTPS에 대해 구성 확인란을 선택 하지 않은 새 ASP.NET Core 웹 응용 프로그램 대화 상자

HTTPS에 대해 구성 확인란을 선택 하지 않은 새 ASP.NET Core 웹 응용 프로그램 대화 상자

Windows 및 macOS에서 ASP.NET Core HTTPS 개발 인증서 신뢰Trust the ASP.NET Core HTTPS development certificate on Windows and macOS

.NET Core SDK에는 HTTPS 개발 인증서가 포함 되어 있습니다.The .NET Core SDK includes an HTTPS development certificate. 인증서는 첫 실행 환경의 일부로 설치 됩니다.The certificate is installed as part of the first-run experience. 예를 들어 dotnet --info은 다음과 유사한 출력을 생성 합니다.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.

.NET Core SDK를 설치하면 로컬 사용자 인증서 저장소에 ASP.NET Core HTTPS 개발 인증서가 설치됩니다.Installing the .NET Core SDK installs the ASP.NET Core HTTPS development certificate to the local user certificate store. 인증서가 설치 되었지만 트러스트 되지 않았습니다.The certificate has been installed, but it's not trusted. 인증서를 신뢰 하려면 1 회 단계를 수행 하 여 dotnet dev-certs 도구를 실행 합니다.To trust the certificate perform the one-time step to run the dotnet dev-certs tool:

dotnet dev-certs https --trust

다음 명령은 dev-certs 도구에 대한 도움말을 제공합니다.The following command provides help on the dev-certs tool:

dotnet dev-certs https --help

Docker 용 개발자 인증서를 설정 하는 방법How to set up a developer certificate for Docker

GitHub 문제를 참조하세요.See this GitHub issue.

Linux 용 Windows 하위 시스템에서 HTTPS 인증서 신뢰Trust HTTPS certificate from Windows Subsystem for Linux

WSL (Linux 용 Windows 하위 시스템)은 HTTPS 자체 서명 된 인증서를 생성 합니다. WSL 인증서를 신뢰 하도록 Windows 인증서 저장소를 구성 하려면:The Windows Subsystem for Linux (WSL) generates a HTTPS self-signed cert. To configure the Windows certificate store to trust the WSL certificate:

  • 다음 명령을 실행 하 여 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>

  • WSL 창에서 다음 명령을 실행 합니다. 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

    위의 명령은 Linux에서 Windows 신뢰할 수 있는 인증서를 사용 하도록 환경 변수를 설정 합니다.The preceding command sets the environment variables so Linux uses the Windows trusted certificate.

인증서 문제 해결Troubleshoot certificate problems

이 섹션에서는 ASP.NET Core HTTPS 개발 인증서를 설치 하 고 신뢰할 수있는 경우에 대 한 도움말을 제공 하지만 인증서를 신뢰할 수 없다는 브라우저 경고가 계속 표시 됩니다.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.

모든 플랫폼-인증서를 신뢰할 수 없음All platforms - certificate not trusted

다음 명령을 실행 합니다.Run the following commands:

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

열려 있는 모든 브라우저 인스턴스를 닫습니다.Close any browser instances open. 앱에 대 한 새 브라우저 창을 엽니다.Open a new browser window to app. 인증서 신뢰는 브라우저에 의해 캐시 됩니다.Certificate trust is cached by browsers.

위의 명령은 대부분의 브라우저 트러스트 문제를 해결 합니다.The preceding commands solve most browser trust issues. 브라우저에서 아직 인증서를 신뢰 하지 않는 경우에는 다음 플랫폼 관련 제안 사항을 따르세요.If the browser is still not trusting the certificate, follow the platform specific suggestions that follow.

Docker-인증서를 신뢰할 수 없음Docker - certificate not trusted

  • C:\Users @ no__t-1USER} \AppData\Roaming\ASP.NET\Https 폴더를 삭제 합니다.Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • 솔루션을 정리 합니다.Clean the solution. binobj 폴더를 삭제합니다.Delete the bin and obj folders.
  • 개발 도구를 다시 시작 합니다.Restart the development tool. 예를 들어 Visual Studio, Visual Studio Code 또는 Mac용 Visual Studio입니다.For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows-인증서를 신뢰할 수 없음Windows - certificate not trusted

  • 인증서 저장소의 인증서를 확인 합니다.Check the certificates in the certificate store. @No__t-2 및 Current User > Trusted root certification authorities > Certificates 모두에서 ASP.NET Core HTTPS development certificate의 이름을 가진 localhost 인증서가 있어야 합니다.There 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
  • 모든 찾은 인증서를 개인 및 신뢰할 수 있는 루트 인증 기관에서 제거 합니다.Remove all the found certificates from both Personal and Trusted root certification authorities. IIS Express localhost 인증서를 제거 하지 마십시오.Do not remove the IIS Express localhost certificate.
  • 다음 명령을 실행 합니다.Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

열려 있는 모든 브라우저 인스턴스를 닫습니다.Close any browser instances open. 앱에 대 한 새 브라우저 창을 엽니다.Open a new browser window to app.

OS X-인증서를 신뢰할 수 없음OS X - certificate not trusted

  • 키 집합 액세스를 엽니다.Open KeyChain Access.
  • 시스템 키 집합을 선택 합니다.Select the System keychain.
  • Localhost 인증서가 있는지 확인 합니다.Check for the presence of a localhost certificate.
  • 모든 사용자가 신뢰할 수 있음을 나타내기 위해 아이콘에 + 기호가 포함 되어 있는지 확인 합니다.Check that it contains a + symbol on the icon to indicate its trusted for all users.
  • 시스템 키 집합에서 인증서를 제거 합니다.Remove the certificate from the system keychain.
  • 다음 명령을 실행 합니다.Run the following commands:
dotnet dev-certs https --clean
dotnet dev-certs https --trust

열려 있는 모든 브라우저 인스턴스를 닫습니다.Close any browser instances open. 앱에 대 한 새 브라우저 창을 엽니다.Open a new browser window to app.

추가 정보Additional information