Сертификат Kestrel Secure HTTPS X509 от KeyVault - PullRequest
0 голосов
/ 30 октября 2018

Я хочу защитить свой API с помощью сертификата pfx, который я сохранил в своем KeyVault, однако по некоторым причинам это, похоже, не работает так, как я ожидал. Если на моей машине установлен сертификат, он работает отлично. Мне было интересно, возможно ли сохранить сертификат в KeyVault, а затем защитить его таким образом, а не искать в хранилище сертификатов.

Сценарий: у меня есть .NET Core Web API, который общается с KeyVault. Это KeyVault содержит мой сертификат PFX, который при загрузке запрашивал мой пароль. Так что в этот момент все выглядит хорошо.

У меня есть следующий код для получения и применения сертификата:

            var client = new KeyVaultClient(new KeyVaultCredential(GetToken));
            var cert = client.GetCertificateAsync("https://somekeyvaultsomewhere.vault.azure.net/", "my_tls_cert").Result;
            var certificate = new X509Certificate2(cert.Cer);

            var host = new WebHostBuilder()
                .UseKestrel(options =>
                {
                    const int PortNumber = 5001;
                    options.Listen(
                        new IPEndPoint(IPAddress.Any, PortNumber),
                        listenOptions =>
                        {
                            listenOptions.KestrelServerOptions.AddServerHeader = false;
                            listenOptions.UseHttps(certificate);
                        });
                })
                .CaptureStartupErrors(true)
                .UseStartup<Startup>()
                .Build();

            host.Run();

Я ожидаю, что смогу использовать мой API через https и через порт 5001. Вместо этого я не получаю ответа (сайт не может быть достигнут).

Кажется, что все работает, но ничего не может ударить.

enter image description here

Возможно ли это сделать?

Использованных пакетов:

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="2.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Https" Version="2.1.3" />
    <PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" Version="2.1.3" />
  </ItemGroup>

1 Ответ

0 голосов
/ 30 октября 2018

Я думаю, это потому, что загруженный вами сертификат - это не полный сертификат, а только открытый ключ. Отсутствие закрытого ключа не позволит завершить рукопожатие SSL. Вы можете загрузить весь сертификат как секрет, а затем преобразовать его в объект X509Certificate2. Я объяснил в этом сообщении в блоге:

https://azidentity.azurewebsites.net/post/2018/07/03/azure-key-vault-certificates-are-secrets

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...