web-dev-qa-db-ja.com

Kestrelが使用する自己署名の信頼できる証明書を見つけることができません

私は非常に基本的な自己ホスト型.NETコア2.1アプリケーションを以下の構成で使用しています。

public class Program
{
    public static void Main(string[] args)
    {
        var Host = new WebHostBuilder()
             .UseKestrel()
             .UseContentRoot(Directory.GetCurrentDirectory())
             .UseStartup<Startup>()
             .Build();

        Host.Run();
    }
}

次のような非常に典型的なシンプルなコントローラー:

   [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        // GET api/values
        [HttpGet]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        public ActionResult<string> Get(int id)
        {
            return "value";
        }

        // POST api/values
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }

        // PUT api/values/5
        [HttpPut("{id}")]
        public void Put(int id, [FromBody] string value)
        {
        }

        // DELETE api/values/5
        [HttpDelete("{id}")]
        public void Delete(int id)
        {
        }
    }

このアプリケーションは、テストしてHTTPSローカルエンドポイントポート(私の場合は44325)に移動すると、かなりうまく機能します。

https:// localhost:44325/api/values

enter image description here

これまでのところすべて良い。 IIS Expressを使用していないため、このHTTPS接続の証明書がどこから来ているのかを理解したいと思います。実際、証明書はIISに属していません。 =エクスプレス: enter image description here

拇印を検索すると、証明書ストアで上記の証明書が見つかりません。この証明書はどのように生成されますか?どこで見つけることができますか?なぜこの証明書はEdgeとchromeで機能しますが、Firefoxでは信頼されていませんか?オンザフライで生成されますか?

私の起動設定は次のとおりです。

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:55894",
      "sslPort": 44325
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "Experimental1": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "applicationUrl": "https://localhost:44325;http://localhost:55894",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

IIS Expressではなく、Experimental1プロファイルを使用しています。アプリケーションを実行すると、小さなコンソールが表示されます。

5
MHOOS

この証明書はどのように生成されますか?

.NET Core SDKは、最初にdotnet newを実行したときに証明書を生成します

https://blogs.msdn.Microsoft.com/webdev/2018/02/27/asp-net-core-2-1-https-improvements/ を参照してください

どこで見つけることができますか?

SDKはASP.NET Core HTTPS開発証明書をローカルユーザー証明書ストアにインストールします。

enter image description here

なぜこの証明書はEdgeとchromeで機能しますが、Firefoxでは信頼されていませんか?

確かに。 dotnet dev-certs https --trustを実行した後でも、Firefoxは証明書を信頼せず、「証明書は自己署名されているため信頼されていません。

それは単に Firefoxはもはや自己署名証明書を信頼しない かもしれません。私の回避策は、セキュリティ例外を追加することです。

enter image description here

10
Shaun Luttin