【实用技能】如何使用 .NET C# 中的 Azure Key Vault 中的 PFX 证书对 PDF 文档进行签名

**++TX Text Control++**是一款功能类似于 MS Word 的文字处理控件,包括文档创建、编辑、打印、邮件合并、格式转换、拆分合并、导入导出、批量生成等功能。广泛应用于企业文档管理,网站内容发布,电子病历中病案模板创建、病历书写、修改历史、连续打印、病案归档等功能的实现。

Azure Key Vault 是 Microsoft Azure 提供的一项云服务,用于安全地存储和访问敏感信息(例如 API 密钥、密码、证书和加密密钥)。它充当管理机密和加密操作的中央保管库,为静态和传输中的数据提供强大的保护。

Azure Key Vault 为使用 PFX 证书对 PDF 文档进行签名提供了几个关键优势。最重要的是,它通过将敏感证书存储在集中、高度安全的环境中来提高安全性,从而消除了在本地设备或服务器上暴露的风险。私钥永远不会离开保管库,因为加密操作是在保管库内执行的。

这种方法简化了证书管理,并允许组织集中和简化密钥轮换、撤销和审核。 Azure Key Vault 还提供可扩展性,以无缝满足不断增长的应用程序的需求,同时保持高可用性和强大的性能。合规性是另一个主要优势,因为该服务有助于满足严格的行业标准和法规,例如 GDPR、HIPAA 和 PCI DSS,从而确保数据保护和隐私。

这些优势结合起来,提供了一种安全、可靠且经济高效的方法来管理 PDF 签名和其他加密操作的证书。

Azure Key Vault 中的 PFX 证书

本文介绍如何使用存储在 Azure Key Vault 中的 PFX 证书对 PDF 文档进行签名。以下屏幕截图显示了已上传 PFX 证书的 Azure Key Vault 门户:

Azure SDK

Azure 需要以下 NuGet 包:

将 PFX 证书上传到 Azure Key Vault

以下代码展示了将本地 PFX 文件上传到 Azure Key Vault 的一种方法,尽管本文不应重点介绍如何上传证书。如果您拥有适当的用户访问权限,也可以将证书上传到门户。

|---|-------------------------------------------------------------------------------|
| | using System; |
| | using System.Security.Cryptography.X509Certificates; |
| | using Azure.Identity; |
| | using Azure.Security.KeyVault.Certificates; |
| | |
| | string keyVaultUrl = "https://txtestvault.vault.azure.net/"; |
| | string certificateName = "txselfcert"; |
| | string password = "123"; |
| | |
| | // Create a CertificateClient using DefaultAzureCredential for authentication |
| | var credential = new DefaultAzureCredential(true); |
| | var client = new CertificateClient(new Uri(keyVaultUrl), credential); |
| | |
| | // Read the PFX file into a byte array |
| | byte[] pfxBytes = await File.ReadAllBytesAsync("certificate.pfx"); |
| | |
| | // Import the certificate into Key Vault |
| | var importOptions = new ImportCertificateOptions(certificateName, pfxBytes) |
| | { |
| | Password = password |
| | }; |
| | |
| | var importedCertificate = await client.ImportCertificateAsync(importOptions); |
| | |
| | Console.WriteLine($"Certificate '{certificateName}' imported successfully."); |

签署 PDF 文档

将 PFX 证书上传到 Azure Key Vault 后,可以使用 Azure SDK 访问该证书并签署 PDF 文档。以下代码片段演示了如何使用存储在 Azure Key Vault 中的 PFX 证书签署 PDF 文档:

|---|----------------------------------------------------------------------------------------------|
| | using System; |
| | using System.Security.Cryptography.X509Certificates; |
| | using Azure.Identity; |
| | using Azure.Security.KeyVault.Certificates; |
| | using TXTextControl; |
| | |
| | string keyVaultUrl = "https://txtestvault.vault.azure.net/"; |
| | string certificateName = "txselfcert"; |
| | |
| | // Create a CertificateClient using DefaultAzureCredential for authentication |
| | var credential = new DefaultAzureCredential(true); |
| | var client = new CertificateClient(new Uri(keyVaultUrl), credential); |
| | |
| | // Retrieve the certificate from the Azure Key Vault |
| | var certificateWithPolicy = client.GetCertificate(certificateName); |
| | byte[] pfxBytes = certificateWithPolicy.Value.Cer; // Extract the certificate's byte array |
| | |
| | // Load the certificate into an X509Certificate2 object for digital signature purposes |
| | var cert = new X509Certificate2(pfxBytes, (string)null, X509KeyStorageFlags.PersistKeySet); |
| | |
| | // Initialize TXTextControl to create and save a document with the digital signature |
| | using (var tx = new ServerTextControl()) |
| | { |
| | tx.Create(); |
| | tx.Text = "Hello, World!"; |
| | |
| | // Prepare the digital signature for the document |
| | var saveSettings = new SaveSettings |
| | { |
| | DigitalSignature = new DigitalSignature(cert, null) |
| | }; |
| | |
| | // Save the document as a PDF with the digital signature |
| | tx.Save("result.pdf", StreamType.AdobePDF, saveSettings); |
| | } |
| | |
| | Console.WriteLine("PDF saved with digital signature."); |

当您在 Acrobat Reader 中打开创建的 PDF 文档时,您可以在签名面板中看到有效的证书。

结论

使用 Azure Key Vault 存储用于 PDF 签名的 PFX 证书,为管理敏感加密操作提供了一种安全、可扩展且合规的解决方案。通过使用 Azure Key Vault,组织可以提高安全性、简化证书管理并确保符合行业标准和法规。

相关推荐
格林威30 分钟前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
向上的车轮1 小时前
熟悉C#如何转TypeScript——SDK与包引用
开发语言·typescript·c#
麦壳饼2 小时前
JekyllNet .Net 版本的Jekyll , 你博客 文档的静态生成利器 。
.net
CSharp精选营3 小时前
Dispose 不释放?C# 资源泄漏的 3 种隐蔽场景排查
c#·资源泄漏
步步为营DotNet3 小时前
.NET 11 中 ASP.NET Core 10 在分布式系统中的安全通信与性能调优
安全·asp.net·.net
unicrom_深圳市由你创科技4 小时前
LabVIEW和C#在工业控制中的应用差异是什么?
fpga开发·c#·labview
唐青枫5 小时前
C#.NET Consul + Steeltoe 深入解析:服务注册发现、健康检查与微服务接入
c#·.net
DowneyJoy5 小时前
【Unity3D补充知识点】常用数据结构分析-集合(List<T>)
数据结构·unity·c#·list
格林威6 小时前
Baumer相机铝型材表面划伤长度测量:实现损伤量化评估的 5 个关键技术,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
编码者卢布6 小时前
【Azure APIM】API导入功能报错 Unable to parse specified file.
microsoft·azure