介绍
PDF 文件在各个行业中至关重要,通过数字签名确保其真实性和完整性是一种关键的安全措施。数字签名提供法律有效性并保护文档免受篡改。本详细指南将指导您通过创建安全的 PDF 数字签名服务来实现 .NET PDF 签名,该服务使用 Azure Key Vault 和 GroupDocs.Signature for .NET。
电子文档签名对转向无纸化工作流程的企业变得越来越重要。GroupDocs.Signature for .NET 提供了一个强大的 C# PDF 数字签名解决方案,满足各种监管框架下的数字签名合规要求。无论您是新手还是希望增强现有实现,本教程都涵盖了您需要了解的所有内容。
Azure Key Vault 是一种基于云的密钥管理服务,允许安全存储和管理加密密钥和证书。GroupDocs.Signature for .NET 是一个强大、安全的 PDF 签名 API,使开发人员能够以编程方式将数字签名应用于 PDF 文件。通过集成这些技术,您可以构建一个强大且高效的 PDF 数字签名服务。
我们将探索的最强大功能之一是自定义哈希签名,它为您的签名工作流程提供了极大的灵活性。这种方法允许您将外部签名设备(如硬件安全模块(HSM)、智能卡或其他加密设备)连接到您的应用程序。使用自定义哈希签名,开发人员可以编写自己的签名服务,这些服务可以与专有系统、遗留基础设施或专用安全硬件接口,同时保持与 GroupDocs.Signature 框架的兼容性。这使其成为具有特定安全要求或现有加密基础设施投资的组织的理想解决方案。
🔐 创建 Azure 密钥保管库和证书
让我们从设置 Azure Key Vault 和生成证书开始。
步骤 1:配置密钥保管库
使用 Azure 门户 创建一个新的 Azure Key Vault 资源。有关详细说明,请参阅此 快速入门指南。
💡如果您没有活动的 Azure 订阅,可以注册一个 1 个月的免费试用版来开始。
步骤 2:生成或导入您的证书
密钥保管库运行后,导航到其仪表板,选择 Certificates 选项卡,然后单击 Generate/Import 以添加您的证书。

步骤 3: 在 Method of Certificate Creation 字段中,选择 Generate 以自动创建新证书。对于本示例,我们选择 Self-signed certificate 作为证书颁发机构类型。

注意: 如果您更喜欢使用现有证书,可以选择 Import 从本地设备加载一个。

步骤 4: 然后,转到 Advanced Policy Configuration 并将 Private Key Export 选项设置为 No。

步骤 5: 最后,单击 Create。证书现在将添加到您的密钥保管库。
要查看其详细信息,只需单击证书即可打开其属性。

⚙️ 注册应用程序以启用对 Azure Key Vault 的访问
要允许 Web API 访问 Azure Key Vault,您需要在 Azure Active Directory 中注册它:
步骤 1: 导航到 Azure Active Directory,选择 App registrations,然后单击 New registration。

步骤 2: 输入您的应用程序名称并注册。

注册后,您将收到关键详细信息——复制 Client ID 和 Tenant ID 以在应用程序中使用。

步骤 3: 接下来,从侧菜单中选择 API Permissions,然后单击 Add Permission。选择 Azure Key Vault,选择 Full Access,然后通过单击 Add Permissions 完成流程。

步骤 4: 选择 Certificate & secrets,然后单击 New client secret 以创建新的秘密密钥。复制此密钥以从 .NET 应用程序访问它。

🔐 将访问策略分配给 Azure Key Vault
在前面的步骤中,我们创建并注册了应用程序。现在,我们需要授予新注册的应用程序访问 Azure Key Vault 的权限:
步骤 1: 导航到 Azure Key Vault,选择 Access Policies,然后单击 Create。

步骤 2: 选择必要的权限,然后单击 Next。

步骤 3: 在此窗口中,选择我们之前注册的应用程序 GroupDocs.Signature.Service,然后单击 Create。


应用程序现在将出现在 Access Policies 部分。

📑 如何使用 Azure Key Vault 与 GroupDocs.Signature for .NET PDF 签名
本详细指南解释了如何使用 GroupDocs.Signature API 在 .NET 中使用自定义哈希签名签署 PDF 文档,该签名利用 Azure Key Vault。我们将把过程分解为清晰的步骤——从配置您的 C# 环境到实现一个满足数字签名合规要求的自定义哈希签名器。
安全 PDF 签名的自定义哈希实现概述
自定义哈希签名方法为在 .NET 应用程序中实现电子文档签名提供了极大的灵活性。以下是我们将涵盖的内容:
- 设置您的 .NET 应用程序以与 GroupDocs.Signature 进行 PDF 数字签名
- 配置专业的数字签名选项,并进行适当的证书管理
- 实现自定义哈希签名机制以获得最大的灵活性
- 集成 Azure Key Vault 以安全地检索公共证书并签署文档
- 在整个实现过程中遵循安全最佳实践
有关更多背景信息,请参阅 GroupDocs.Signature 文档 中关于使用自定义哈希进行数字签名的部分。
🚀 .NET PDF 应用程序的自定义哈希签名的好处
在深入实现之前,了解自定义哈希签名在数字签名技术中代表了显著进步的原因非常重要:
- 与外部签名设备集成:自定义哈希签名使您能够无缝连接到硬件安全模块(HSM)、智能卡、生物识别设备和其他专用加密硬件,这些硬件您的组织可能已经在使用。
- 企业解决方案的灵活架构:组织可以编写自己的签名服务,这些服务可以与现有基础设施、遗留系统或专有签名解决方案接口,同时保持与 GroupDocs.Signature 的兼容性。
- 增强的安全合规性:通过将哈希生成与实际签名过程分开,您可以更好地控制加密操作,从而帮助满足严格的监管要求,如 eIDAS、ESIGN 法案和行业特定的合规标准。
- 支持基于云的密钥管理:与 Azure Key Vault 集成允许证书在 Microsoft 的受认证安全基础设施中安全存储和管理,而不是在本地机器上。
- 签名过程自定义:实现自定义批准工作流、多方签名序列或超出标准数字签名实现的专用验证规则。
步骤 1. 配置 C# PDF 数字签名环境
从在 C# 应用程序中定义文件路径并初始化 GroupDocs.Signature 对象开始。在本示例中,我们指定源 PDF 文件和签名文档的输出位置。
public static void SignDocument()
{
// 定义源文档和输出文档的路径
string sampleFilePath = "sample.pdf";
string sampleOutputFilePath = "signed.pdf";
using (Signature signature = new Signature(sampleFilePath))
{
// 代码继续在下一步...
}
}
📌注释:
此步骤创建一个新的 Signature
实例,该实例加载您要签名的 PDF 文档,为 .NET 应用程序中的安全 PDF 签名奠定基础。
步骤 2. 配置数字签名选项
接下来,设置您的数字签名选项。这些选项包括证书详细信息、视觉外观和哈希算法。自定义哈希签名将在稍后插入。
// 初始化数字签名选项
DigitalSignOptions options = new DigitalSignOptions()
{
Signature = new DigitalSignature(),
Password = "1234567890", // 证书密码
Reason = "Sign", // 签名原因
Contact = "JohnSmith", // 联系信息
Location = "Office1", // 签名位置
AllPages = true, // 在所有页面上应用签名
Width = 80,
Height = 60,
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = new Padding() { Bottom = 10, Right = 10 },
HashAlgorithm = HashAlgorithm.Sha256 // 指定 SHA-256 用于哈希
};
📌注释:
配置基本的数字签名属性,如外观、定位和哈希,以确保您的电子文档签名符合专业标准。
安全注意事项: 在生产中,避免硬编码敏感值(如密码);相反,使用与数字签名合规要求一致的安全配置方法。
步骤 3. 实现自定义哈希签名
现在,将您的自定义哈希签名器分配给选项。此自定义签名器实现 ICustomSignHash
接口,并将用于使用 Azure Key Vault 或任何其他外部签名设备签署哈希。
var azureSigner = new AzureSigner();
options.CustomSignHash = azureSigner;
options.Signature.Certificate = azureSigner.GetPublicCertificateFromAzureStorage();
📌注释:
在此处创建 AzureSigner
的实例。其 CustomSignHash
方法将在签名过程中被调用,并且它还从 Azure Key Vault 检索公共证书。
步骤 4. 签署文档
最后,调用 Sign
方法以使用您的自定义哈希签名实现生成签名 PDF 文档。
signature.Sign(sampleOutputFilePath, options);
📌注释:
此方法使用先前配置的选项(包括您的自定义哈希签名器)将数字签名应用于文档。生成的 PDF 将包含一个可以使用标准 PDF 阅读器或以编程方式使用 GroupDocs.Signature 的验证功能进行验证的加密安全签名。
步骤 5. Azure 证书签名的详细实现
以下是使用 Azure Key Vault 进行 Azure 证书签名的完整实现。此类演示了专业的 Azure 证书签名做法,通过检索 Azure 凭据、获取公共证书并安全地签署文档哈希。
public class AzureSigner : ICustomSignHash
{
public byte[] CustomSignHash(byte[] hash, HashAlgorithm hashAlgorithm,
SignatureContext signatureContext)
{
// 将签名操作委托给 Azure
return SignWithAzure(hash);
}
private static byte[] SignWithAzure(byte[] signableHash)
{
// 检索 Azure 凭据
var credential = GetAzureSecretCredential();
// 指定您的 Key Vault 证书密钥标识符
var certificateKeyId =
"https://groupdocskeyvault.vault.azure.net/keys/GroupDocsSignatureCertificate/>";
CryptographyClient client =
new CryptographyClient(new Uri(certificateKeyId), credential);
// 使用 RS256 签署哈希
var result = client.Sign(SignatureAlgorithm.RS256, signableHash);
return result.Signature;
}
static ClientSecretCredential GetAzureSecretCredential()
{
// 提供您的 Azure AD 租户、客户端和秘密详细信息
string tenantId = "your tenant id";
string clientId = "your client id";
string secret = "your secret";
ClientSecretCredential credential =
new ClientSecretCredential(tenantId, clientId, secret);
return credential;
}
public X509Certificate2 GetPublicCertificateFromAzureStorage()
{
// 定义 Key Vault URI
string vaultUri = "https://groupdocskeyvault.vault.azure.net/>";
var credential = GetAzureSecretCredential();
X509Certificate2 pubCertificate =
GetPublicCertificateFromAzureStorage(credential, vaultUri);
return pubCertificate;
}
static X509Certificate2 GetPublicCertificateFromAzureStorage(
ClientSecretCredential credential, string uri)
{
// 为 Key Vault 创建证书客户端
CertificateClient certificateClient =
new CertificateClient(new Uri(uri), credential);
// 检索包含公钥的证书
KeyVaultCertificateWithPolicy certificate =
certificateClient.GetCertificateAsync("GroupDocsSignatureCertificate").Result;
return new X509Certificate2(certificate.Cer);
}
}
📌注释:
- Azure 凭据: GetAzureSecretCredential 方法使用您的租户 ID、客户端 ID 和秘密创建凭据。安全注意事项:确保您以安全的方式存储这些凭据(例如,使用 Azure Key Vault 或安全配置存储),以维护 .NET PDF 签名实现的完整性。
- 使用 Azure 签署: SignWithAzure 方法使用 Azure SDK 的 CryptographyClient 使用存储在 Azure Key Vault 中的证书签署哈希,演示了遵循数字签名合规最佳实践的专业证书管理方法。
- 公共证书检索: 该方法连接到您的 Azure Key Vault 并检索用于签名验证的证书,确保您的电子文档签名可以适当验证。
步骤 6. PDF 数字签名的 Azure Key Vault 实现步骤
要将 Azure Key Vault 与您的自定义签名服务集成,请按照以下步骤操作:
- 设置 Azure Key Vault:
- 创建 Azure Key Vault 实例。
- 将签名证书上传到 Key Vault。
- 为您的应用程序配置访问策略。
- 配置 Azure 凭据:
- 在 Azure Active Directory 中注册您的应用程序。
- 检索租户 ID、客户端 ID 和客户端秘密。
- 创建用于访问 Key Vault 的
ClientSecretCredential
。
- 检索证书:
- 使用
CertificateClient
从 Azure Key Vault 获取包含公钥的证书。 - 此证书用于验证数字签名。
- 使用
- 实现自定义签名:
- 使用 Azure SDK 的
CryptographyClient
签署文档哈希。 - 指定适当的签名算法(例如,RS256)。
- 使用 Azure SDK 的
📌注释:
每个步骤都至关重要,以确保您的签名过程是安全的,并且敏感密钥在云中保护,同时为实现专用要求提供灵活性。
🧩 扩展您的自定义签名实现
GroupDocs.Signature 的自定义哈希签名方法的美妙之处在于您可以将其适应几乎任何外部签名设备或服务。以下是您可能扩展此实现的示例:
- 硬件安全模块(HSMs):实现一个与物理 HSM 通信的自定义签名器,以获得最大的安全性。
- 智能卡集成:创建一个与智能卡读卡器接口的签名器,适用于需要物理身份验证的企业环境。
- 生物识别身份验证:构建一个需要指纹或面部识别才能授权签名创建的签名服务。
- 多方批准:实现一个自定义签名工作流,其中多个方必须批准才能应用最终签名。
- 云服务提供商:将示例适配以与 AWS KMS、Google Cloud KMS 或其他云密钥管理服务一起使用。
通过通过 ICustomSignHash
接口实现自己的签名服务,您可以完全控制加密操作,同时利用 GroupDocs.Signature for .NET 的强大文档处理功能。
✨ 关于电子文档签名的最终思考
本指南演示了如何将 GroupDocs.Signature 与 Azure Key Vault 集成,以安全地为 PDF 文件创建符合电子文档签名的签名。通过这种方法创建的电子文档签名符合行业标准的真实性和完整性。通过遵循本分步方法并遵循安全最佳实践(例如安全凭据处理),您可以在 .NET 应用程序中实现一个强大的数字签名解决方案,该解决方案可以在整个文档工作流中使用。
有关更多详细信息和高级方案,请参阅 官方文档。
获取免费试用
您可以通过下载并安装我们 发布下载网站 上的最新版本来免费试用 GroupDocs.Signature APIs。
您还可以获取临时许可证以在没有任何限制的情况下测试库的所有功能。前往 临时许可页面 申请临时许可证。
🔗 另请参阅
有关更多信息和其他资源,您可能会发现以下链接有用: