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

機密情報を受け取る Web Api ではRequireHttpsAttribute を使用しないでください。Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute はブラウザーを HTTP から HTTPS へリダイレクトするために HTTP ステータス コードを使用します。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. Web 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

機密情報を受け取る Web Api ではRequireHttpsAttribute を使用しないでください。Do not use RequireHttpsAttribute on Web APIs that receive sensitive information. RequireHttpsAttribute はブラウザーを HTTP から HTTPS へリダイレクトするために HTTP ステータス コードを使用します。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. Web 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

Web アプリの運用 ASP.NET Core では次のものを使用することをお勧めします。We recommend that production ASP.NET Core web apps use:

  • HTTP 要求を HTTPS にリダイレクトする HTTPS リダイレクトミドルウェア (UseHttpsRedirection)。HTTPS Redirection Middleware (UseHttpsRedirection) to redirect HTTP requests to HTTPS.
  • HSTS ミドルウェア (Usehsts) を介して、HTTP Strict Transport Security Protocol (hsts) ヘッダーをクライアントに送信します。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 のオプトアウト」を参照してください。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:

  • https_portホスト設定を設定します。Set the https_port host setting:

    • ホスト構成。In host configuration.

    • ASPNETCORE_HTTPS_PORT 環境変数を設定します。By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • 次のようにして、 appsettingsにトップレベルのエントリを追加します。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.

  • https_portホスト設定を設定します。Set the https_port host setting:

    • ホスト構成。In host configuration.

    • ASPNETCORE_HTTPS_PORT 環境変数を設定します。By setting the ASPNETCORE_HTTPS_PORT environment variable.

    • 次のようにして、 appsettingsにトップレベルのエントリを追加します。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 ポートは1つだけです。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 Web サーバーの実装」を参照してください。For more information, see Kestrel endpoint configuration or ASP.NET Core での HTTP.sys Web サーバーの実装.

展開シナリオ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 にデプロイする場合は、 「チュートリアル: 既存のカスタム 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;
    });
}

AddHttpsRedirection の呼び出しは、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 Strict Transport Security Protocol (HSTS)HTTP Strict Transport Security Protocol (HSTS)

Owaspでは、 HTTP Strict Transport Security (hsts)は、応答ヘッダーを使用して web アプリによって指定されるオプトインセキュリティ拡張機能です。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 ポリシーを確立するには、少なくとも1つの 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. 次のコードは、アプリが開発モードでない場合に UseHsts を呼び出します。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();
}

HSTS の設定はブラウザーによって非常にキャッシュ可能であるため、UseHsts は開発で推奨されていません。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 メソッドのいずれかを使用して、初期のHstsOptionsを小さい値に設定します。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 に戻す必要がある場合に備えて、値を時間から1日以内に設定します。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;
    });
}
  • Strict-Transport-Security ヘッダーのプリロードパラメーターを設定します。Sets the preload parameter of the Strict-Transport-Security header. プリロードはRFC hsts 仕様の一部ではありませんが、web ブラウザーでは、新規インストール時に 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.
  • 厳密な-Transport-Security ヘッダーの最長有効期間パラメーターを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 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コマンドから生成された Web アプリでは、 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 をオプトアウトできます。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 をオプトアウトするには、次のようにします。To opt-out of HTTPS/HSTS:

[HTTPS 用に構成] チェックボックスをオフにします。Uncheck the Configure for HTTPS check box.

HTTPS 用に構成 チェックボックスがオフになっている新しい ASP.NET Core Web アプリケーション ダイアログボックスが表示されます。

HTTPS 用に構成 チェックボックスがオフになっている新しい ASP.NET Core Web アプリケーション ダイアログボックスが表示されます。

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.

Windows Subsystem for Linux からの HTTPS 証明書を信頼するTrust HTTPS certificate from Windows Subsystem for Linux

Windows Subsystem for Linux (WSL) は、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. ASP.NET Core HTTPS 開発証明書はKestrelによって使用されます。The ASP.NET Core HTTPS development certificate is used by Kestrel.

すべてのプラットフォーム-信頼されていない証明書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{USER} \AppData\Roaming\ASP.NET\Httpsフォルダーを削除します。Delete the C:\Users{USER}\AppData\Roaming\ASP.NET\Https folder.
  • ソリューションをクリーンアップします。Clean the solution. bin フォルダーと obj フォルダーを削除します。Delete the bin and obj folders.
  • 開発ツールを再起動します。Restart the development tool. たとえば、Visual Studio、Visual Studio Code、Visual Studio for Mac などです。For example, Visual Studio, Visual Studio Code, or Visual Studio for Mac.

Windows-信頼されていない証明書Windows - certificate not trusted

  • 証明書ストア内の証明書を確認します。Check the certificates in the certificate store. Current User > Personal > Certificates との両方に、ASP.NET Core HTTPS development certificate フレンドリ名を持つ localhost 証明書が存在する必要があり 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
  • 個人証明書と信頼されたルート証明機関の両方から、検出されたすべての証明書を削除します。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.

Visual Studio での証明書の問題のトラブルシューティングについては、 IIS Express (aspnet/AspNetCore #16892) を使用した HTTPS エラーを参照してください。See HTTPS Error using IIS Express (aspnet/AspNetCore #16892) for troubleshooting certificate issues with Visual Studio.

IIS Express Visual Studio で使用される SSL 証明書IIS Express SSL certificate used with Visual Studio

IIS Express 証明書の問題を解決するには、Visual Studio インストーラーで [修復] を選択します。To fix problems with the IIS Express certificate, select Repair from the Visual Studio installer.

追加情報Additional information