【实用技能】如何使用 .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,组织可以提高安全性、简化证书管理并确保符合行业标准和法规。

相关推荐
Keith Guo11 小时前
What does OTA TAB mean?
azure
Leinwin16 小时前
Copilot Studio 实战:多模型选择、GitHub Copilot harness 计费与 Copilot Credits 额度管理
开发语言·c#
FuckPatience16 小时前
C# Winform 使用Label循环显示闪烁
开发语言·c#
念何架构之路17 小时前
OpenTelemetry核心概念
后端·目标跟踪·golang·c#·linq
开开心心就好17 小时前
电脑语音实时转文字工具,会议记录很省事
运维·服务器·前端·c#·ocr·perl·1024程序员节
波力海苔夹心脆67517 小时前
C# 固高 GTS 运动控制卡入门:伺服上下电、Jog 点动与二维插补(WinForms 实战)
服务器·开发语言·c#·运动控制·伺服电机·winforms·固高
CSharp精选营17 小时前
制造业 ERP 物料建模:主料、辅料和 BOM 到底怎么拆才稳
.net·erp·bom·制造业·物料建模
何以解忧唯有撸码1 天前
c# + YOLODotNet+OpenCVSharp 实现物品轨迹追踪
计算机视觉·c#·winform·yolov8·opencvsharp
阿松爱学习1 天前
【Unity开发】局部区域截图功能实现
unity·c#