Azure.Security.KeyVault.Certificates 4.6.0

前缀已预留
dotnet add package Azure.Security.KeyVault.Certificates --version 4.6.0                
NuGet\Install-Package Azure.Security.KeyVault.Certificates -Version 4.6.0                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用 NuGet 模块的 Install-Package 版本。
<PackageReference Include="Azure.Security.KeyVault.Certificates" Version="4.6.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件以引用包。
paket add Azure.Security.KeyVault.Certificates --version 4.6.0                
#r "nuget: Azure.Security.KeyVault.Certificates, 4.6.0"                
#r 指令可以在 F# Interactive 和 Polyglot Notebooks 中使用。将其复制到交互式工具或脚本的源代码中,以引用包。
// Install Azure.Security.KeyVault.Certificates as a Cake Addin
#addin nuget:?package=Azure.Security.KeyVault.Certificates&version=4.6.0

// Install Azure.Security.KeyVault.Certificates as a Cake Tool
#tool nuget:?package=Azure.Security.KeyVault.Certificates&version=4.6.0                

.NET 的 Azure 密钥保管库证书客户端库

Azure 密钥保管库是一种云服务,它提供了在整个云应用程序中使用证书的安全存储和自动管理。可以在 Azure 密钥保管库中保持多个证书,以及相同证书的多个版本。保管库中的每个证书都关联有一个策略,该策略控制证书的颁发和有效期,以及当证书临近到期时应执行的操作。

Azure 密钥保管库证书客户端库允许以编程方式管理证书,提供了创建、更新、列出和删除证书、策略、颁发者和联系人等方法。该库还支持管理挂起的证书操作和管理删除的证书。

源代码 | 包(NuGet) | API参考文档 | 产品文档 | 示例 | 迁移指南

入门指南

安装包

使用 NuGet 安装 .NET 的 Azure Key Vault 证书客户端库

dotnet add package Azure.Security.KeyVault.Certificates

先决条件

  • 一个 Azure订阅
  • 一个现有的 Azure Key Vault。如果您需要创建 Azure Key Vault,可以使用 Azure 门户或 Azure CLI
  • 使用 RBAC(推荐)或 访问控制授权对现有 Azure Key Vault 的访问。

如果您使用 Azure CLI,请将 <your-resource-group-name><your-key-vault-name> 替换为您自己的唯一名称

az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>

客户端认证

为了与 Azure Key Vault 服务交互,您需要创建 CertificateClient 类的一个实例。您需要一个 保管库 URL(您可以在门户中看到为“DNS名称”),以及用于实例化客户端对象的凭据。

下面显示的示例使用了一个 DefaultAzureCredential,这适用于大多数场景,包括本地开发和生产环境。此外,我们建议在生产环境中使用托管标识进行认证。您可以在 Azure Identity 文档中找到有关不同认证方式和相应的凭证类型的更多信息。

要使用下面的 DefaultAzureCredential 提供器或 Azure SDK 提供的其他凭证提供器,您必须先安装 Azure.Identity 包

dotnet add package Azure.Identity
创建 CertificateClient

实例化一个 DefaultAzureCredential 并将其传递给客户端。如果多个客户端将使用相同的身份进行认证,则可以使用相同的令牌凭证实例。

// Create a new certificate client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new CertificateClient(vaultUri: new Uri(vaultUrl), credential: new DefaultAzureCredential());

关键概念

KeyVaultCertificate

KeyVaultCertificate 是 Azure Key Vault 中的基本资源。您将使用证书来加密和验证加密或签名后的数据。

CertificateClient

通过 CertificateClient,您可以从保管库获取证书,创建新的证书和现有证书的新版本,更新证书元数据,以及删除证书。您还可以管理证书发行者、联系人和证书的管理策略。以下示例中进行了说明。

线程安全

我们保证所有客户端实例方法都是线程安全的,彼此独立(《指南》)。这确保了在多线程中的重新使用客户端实例总是安全的。

其他概念

客户端选项 | 访问响应 | 长时间运行的操作 | 处理失败 | 诊断 | 模拟 | 客户端生命周期

示例

Azure.Security.KeyVault.Certificates 包支持同步和异步 API。

以下部分提供了一些使用上面创建的 client客户端 的代码片段,涵盖了 Azure Key Vault 证书服务的一些最常见任务。

同步示例

异步示例

创建证书

StartCreateCertificate 在 Azure Key Vault 中创建证书。如果已存在同名证书,则创建新版本。在创建证书时,用户可以指定控制证书生命周期的策略。如果没有指定策略,则使用默认策略。 StartCreateCertificate 操作返回一个 CertificateOperation。以下示例使用默认策略创建自签名的证书。

// Create a certificate. This starts a long running operation to create and sign the certificate.
CertificateOperation operation = client.StartCreateCertificate("MyCertificate", CertificatePolicy.Default);

// You can await the completion of the create certificate operation.
// You should run UpdateStatus in another thread or do other work like pumping messages between calls.
while (!operation.HasCompleted)
{
    Thread.Sleep(2000);

    operation.UpdateStatus();
}

KeyVaultCertificateWithPolicy certificate = operation.Value;

注意:根据证书颁发者和验证方法的不同,证书创建和签名可能需要不确定的时间。用户只有在应用程序范围内可以合理完成操作的范围内才应等待证书操作,例如使用自签名证书或具有良好响应时间的颁发者。

检索证书

GetCertificate 获取存储在 Azure Key Vault 中的证书的最新版本及其 CertificatePolicy

KeyVaultCertificateWithPolicy certificateWithPolicy = client.GetCertificate("MyCertificate");

GetCertificateVersion 获取保险库中证书的特定版本。

KeyVaultCertificate certificate = client.GetCertificateVersion(certificateWithPolicy.Name, certificateWithPolicy.Properties.Version);

更新现有证书

UpdateCertificate 更新存储在 Azure Key Vault 中的证书。

CertificateProperties certificateProperties = new CertificateProperties(certificate.Id);
certificateProperties.Tags["key1"] = "value1";

KeyVaultCertificate updated = client.UpdateCertificateProperties(certificateProperties);

列出证书

GetCertificates 在保险库中枚举证书,返回证书的选定属性。不会返回证书的敏感字段。此操作需要 certificates/list 权限。

Pageable<CertificateProperties> allCertificates = client.GetPropertiesOfCertificates();

foreach (CertificateProperties certificateProperties in allCertificates)
{
    Console.WriteLine(certificateProperties.Name);
}

删除证书

DeleteCertificate 删除存储在 Azure Key Vault 中的证书的所有版本。当 Azure Key Vault 没有启用软删除时,此操作永久删除证书。如果启用软删除,则证书将被标记为删除,并可以可选地清除或恢复,直到其计划清除日期。

DeleteCertificateOperation operation = client.StartDeleteCertificate("MyCertificate");

// You only need to wait for completion if you want to purge or recover the certificate.
// You should call `UpdateStatus` in another thread or after doing additional work like pumping messages.
while (!operation.HasCompleted)
{
    Thread.Sleep(2000);

    operation.UpdateStatus();
}

DeletedCertificate certificate = operation.Value;
client.PurgeDeletedCertificate(certificate.Name);

异步创建证书

异步 API 与其同步对应版本相同,但异步方法返回具有典型 "Async" 后缀,并返回一个 Task

此示例使用指定的可选参数在 Azure Key Vault 中创建证书。

// Create a certificate. This starts a long running operation to create and sign the certificate.
CertificateOperation operation = await client.StartCreateCertificateAsync("MyCertificate", CertificatePolicy.Default);

// You can await the completion of the create certificate operation.
KeyVaultCertificateWithPolicy certificate = await operation.WaitForCompletionAsync();

异步列出证书

列出证书不依赖于等待 GetPropertiesOfCertificatesAsync 方法,但返回一个可使用 await foreach 语句的 AsyncPageable<CertificateProperties>

AsyncPageable<CertificateProperties> allCertificates = client.GetPropertiesOfCertificatesAsync();

await foreach (CertificateProperties certificateProperties in allCertificates)
{
    Console.WriteLine(certificateProperties.Name);
}

异步删除证书

在清除之前异步删除证书时,您可以在操作上等待 WaitForCompletionAsync 方法。默认情况下,它无限期循环,但您可以通过传递 CancellationToken 来取消它。

DeleteCertificateOperation operation = await client.StartDeleteCertificateAsync("MyCertificate");

// You only need to wait for completion if you want to purge or recover the certificate.
await operation.WaitForCompletionAsync();

DeletedCertificate certificate = operation.Value;
await client.PurgeDeletedCertificateAsync(certificate.Name);

故障排除

请参阅我们的故障排除指南,了解如何诊断各种故障场景的详细信息。

通用

当您使用.NET SDK与Azure Key Vault证书客户端库交互时,服务返回的错误对应于REST API请求返回的相同HTTP状态码。

例如,如果尝试检索在您的Azure Key Vault中不存在的密钥,将返回404错误,表示“未找到”。

try
{
    KeyVaultCertificateWithPolicy certificateWithPolicy = client.GetCertificate("SomeCertificate");
}
catch (RequestFailedException ex)
{
    Console.WriteLine(ex.ToString());
}

您将注意到记录了附加信息,例如操作的客户端请求ID。

Message:
    Azure.RequestFailedException : Service request failed.
    Status: 404 (Not Found)
Content:
    {"error":{"code":"CertificateNotFound","message":"Certificate not found: MyCertificate"}}

Headers:
    Cache-Control: no-cache
    Pragma: no-cache
    Server: Microsoft-IIS/10.0
    x-ms-keyvault-region: westus
    x-ms-request-id: 625f870e-10ea-41e5-8380-282e5cf768f2
    x-ms-keyvault-service-version: 1.1.0.866
    x-ms-keyvault-network-info: addr=131.107.174.199;act_addr_fam=InterNetwork;
    X-AspNet-Version: 4.0.30319
    X-Powered-By: ASP.NET
    Strict-Transport-Security: max-age=31536000;includeSubDomains
    X-Content-Type-Options: nosniff
    Date: Tue, 18 Jun 2019 16:02:11 GMT
    Content-Length: 75
    Content-Type: application/json; charset=utf-8
    Expires: -1

下一步操作

此GitHub存储库中提供了几个Azure Key Vault证书客户端库示例。这些示例提供了在使用Azure Key Vault时遇到的常见场景的示例代码。

  • Sample1_HelloWorld.md - 用于与Azure Key Vault证书交互,包括

    • 创建证书
    • 获取现有证书
    • 更新现有证书
    • 删除证书
  • Sample2_GetCertificates.md - 用于与Azure Key Vault证书交互的示例代码,包括

    • 创建证书
    • 列出Key Vault中所有证书
    • 列出指定证书的版本
    • 从Key Vault中删除证书
    • 列出Key Vault中已删除的证书

其他文档

贡献

有关构建、测试和对这些库做出贡献的详细信息,请参阅CONTRIBUTING.md

此项目欢迎贡献和建议。大多数贡献需要您同意贡献者许可协议(CLA),声明您有权并且实际上授予了我们使用您的贡献的权利。有关详细信息,请访问https://cla.microsoft.com

提交拉取请求时,CLA-bot将自动确定您是否需要提供CLA,并适当装饰PR(例如,标签、注释)。只需遵循机器人提供的说明即可。您在整个使用我们CLA的所有存储库中只需这样做一次。

本项目采用Microsoft开源行为准则。有关更多信息,请参阅行为准则常见问题解答或通过[email protected]联系以获取任何额外的问题或评论。

产品 兼容的和其他计算的目标框架版本。
.NET net5.0 已计算。 net5.0-windows 已计算。 net6.0 已计算。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 已计算。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
.NET Core netcoreapp2.0 已计算。 netcoreapp2.1 已计算。 netcoreapp2.2 已计算。 netcoreapp3.0 已计算。 netcoreapp3.1 已计算。
.NET Standard netstandard2.0 兼容。 netstandard2.1 已计算。
.NET 框架 net461 已计算。 net462 已计算。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
MonoAndroid monoandroid 已计算。
MonoMac monomac 已计算。
MonoTouch monotouch 已计算。
Tizen tizen40 已计算。 tizen60 已计算。
Xamarin.iOS xamarinios 已计算。
Xamarin.Mac xamarinmac 已计算。
Xamarin.TVOS xamarintvos 已计算。
Xamarin.WatchOS xamarinwatchos 已计算。
兼容的目标框架
包含的目标框架(在包中)
有关 目标框架.NET Standard 的更多信息。

NuGet 包 (57)

显示依赖 Azure.Security.KeyVault.Certificates 的前 5 个 NuGet 包

下载
Microsoft.Identity.Web.Certificate

此包为 MSAL.NET 带来证书管理。

Nuke.Common

C#/.NET 的无 AKE 构建系统,由 signpath.io 签署,来自仓库 'https://github.com/nuke-build/nuke',提交 '011956b31c05f14f3233f6241cd6fbe038824d71'(有关构建设置,请参阅包含的 AppVeyorSettings.json 文件)。

AspNetCore.HealthChecks.AzureKeyVault

HealthChecks.AzureKeyVault 是用于 Azure Key Vault 机密的健康检查包

Service.Extensions.KeyVault

为您的服务提供一致的配置和模式扩展。

CyberEye.Constant.Lib

包含各种常量和枚举值的包

GitHub仓库 (24)

显示依赖Azure.Security.KeyVault.Certificates的前5个最受欢迎的GitHub仓库

仓库 星级
Azure/azure-sdk-for-net
此仓库用于.NET Azure SDK的积极开发。对于SDK的使用者,我们建议访问我们的公共开发者文档https://learn.microsoft.com/dotnet/或我们的版本开发者文档https://azure.github.io/azure-sdk-for-net。
win-acme/win-acme
Windows上的简单ACME客户端(与Let's Encrypt等一起使用)
Azure/azure-powershell
Microsoft Azure PowerShell
Xabaril/AspNetCore.Diagnostics.HealthChecks
为ASP.NET Core诊断包提供的企业级健康检查
skoruba/IdentityServer4.Admin
IdentityServer4和Asp.Net Core Identity的行政管理
版本 下载 最后更新
4.6.0 5,523,350 2/15/2024
4.6.0-beta.2 5,890 11/13/2023
4.6.0-beta.1 139 11/10/2023
4.5.1 14,683,861 3/31/2023
4.5.0 400,411 3/14/2023
4.5.0-beta.1 9,568 11/9/2022
4.4.0 2,983,781 9/20/2022
4.3.0 3,700,016 3/26/2022
4.3.0-beta.4 18,302 1/13/2022
4.3.0-beta.2 12,145 10/14/2021
4.3.0-beta.1 175,666 8/11/2021
4.2.0 3,752,767 6/16/2021
4.2.0-beta.6 1,529 5/12/2021
4.2.0-beta.5 8,836 3/9/2021
4.2.0-beta.4 25,762 2/11/2021
4.2.0-beta.3 110,114 11/13/2020
4.2.0-beta.2 1,058 10/7/2020
4.2.0-beta.1 20,409 9/9/2020
4.1.0 60,072,771 8/12/2020
4.1.0-preview.1 38,983 3/10/2020
4.0.3 111,584 7/9/2020
4.0.2 1,331,418 4/4/2020
4.0.1 32,473 3/4/2020
4.0.0 107,717 1/9/2020
4.0.0-preview.8 552 12/20/2019
4.0.0-preview.7 830 12/4/2019
4.0.0-preview.6 691 11/1/2019
4.0.0-preview.5 1,184 10/8/2019
4.0.0-preview.4 460 9/11/2019