介紹
PDF 文件在各行各業中至關重要,通過數位簽名確保其真實性和完整性是一項關鍵的安全措施。數位簽名提供法律效力並保護文件免受篡改。本指南將引導您實現 .NET PDF 簽名,通過創建安全的 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 數位簽名服務。
我們將探索的最強大功能之一是自定義哈希簽名,這為您的簽名工作流程提供了極大的靈活性。這種方法允許您將外部簽名設備(如硬件安全模組(HSMs)、智能卡或其他加密設備)連接到您的應用程序。使用自定義哈希簽名,開發人員可以編寫自己的簽名服務,與專有系統、遺留基礎設施或專用安全硬件接口,同時與 GroupDocs.Signature 框架保持兼容。這使其成為具有特定安全要求或現有加密基礎設施投資的組織的理想解決方案。
🔐 創建 Azure 密鑰保管庫和証書
讓我們從設置 Azure Key Vault 和生成証書開始。
步驟 1:佈署密鑰保管庫
使用 Azure 門戶 創建新的 Azure Key Vault 資源。有關詳細說明,請參閱此 快速入門指南。
💡如果您沒有活動的 Azure 訂閱,可以註冊一個月的免費試用來開始。
步驟 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 應用程序的自定義哈希簽名優勢
在深入實現之前,了解自定義哈希簽名為什麼代表數位簽名技術的重大進步是很重要的:
- 與外部簽名設備集成:自定義哈希簽名使您能夠無縫連接硬件安全模組(HSMs)、智能卡、生物識別設備和其他專用加密硬件,您的組織可能已經使用。
- 企業解決方案的靈活架構:組織可以編寫自己的簽名服務,與現有基礎設施、遺留系統或專有簽名解決方案接口,同時與 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 和客戶端秘密。
- 創建一個
ClientSecretCredential以訪問 Key Vault。
- 檢索証書:
- 使用
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 API。
您還可以獲取臨時許可證,以便在沒有任何限制的情況下測試庫的所有功能。前往 臨時許可頁面 申請臨時許可。
🔗 另請參閱
有關更多信息和其他資源,您可能會發現以下鏈接有用: