IronPDF 操作指南 使用 HSM 簽署 PDF 如何使用 HSM 透過 C# 進行 PDF簽名 Curtis Chau 更新:2026年1月20日 下載 IronPDF NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English IronPDF透過 PKCS#11 API 使用硬體安全模組 (HSM) 實現安全的 PDF 簽名,私鑰永遠不會離開實體設備,為需要防篡改數位簽名的關鍵任務應用程式提供銀行級安全性。 快速入門:使用 C# 中的 HSM 對 PDF 進行簽名 透過NuGet安裝IronPDF :Install-Package IronPdf 設定您的 HSM 設備(或使用 SoftHSM 進行測試) 使用您的 HSM 憑證建立 UsbPkcs11HsmSigner: 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf PM > Install-Package IronPdf 複製並運行這段程式碼。 var hsmSigner = new UsbPkcs11HsmSigner(libraryPath, pin, tokenLabel, keyLabel); 部署到您的生產環境進行測試 今天就在您的專案中開始使用免費試用IronPDF Free 30 Day Trial 產生 PDF 檔案並簽名: var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>"); pdf.SignAndSave("signed.pdf", hsmSigner); var pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>"); pdf.SignAndSave("signed.pdf", hsmSigner); Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document</h1>") pdf.SignAndSave("signed.pdf", hsmSigner) $vbLabelText $csharpLabel 在 PDF 檢視器中驗證簽名 在許多應用程式中,為 PDF 文件添加簽名是一項常見需求。 然而,關鍵任務型應用需要更高的安全性,金鑰不能被竄改。 使用 .pfx 文件進行正常的簽名操作就像擁有一把家裡的萬能鑰匙一樣。 應用程式將密鑰載入到記憶體中以簽署文件。 如果電腦系統遭到入侵,金鑰可能會被偷。 更安全的替代方案是使用硬體安全模組(HSM)。 使用 HSM(例如 USB 令牌)時,私鑰在裝置內部生成,無法離開裝置。 這個過程就像把文件帶到銀行一樣。 該應用程式提供一個 PIN 碼,HSM 將文件帶入保險庫,用鑰匙蓋章,然後返回蓋章後的文件。 鑰匙永遠不會離開金庫。 這樣可以提供額外的安全性,因為金鑰無法被複製或被盜。 如何使用 HSM 對 PDF 進行數位簽名 下載IronPDF C# 庫,用於使用 HSM 對 PDF 進行簽署。 匯入您現有的 HSM 或使用其他函式庫對其進行模擬。 建立一個新的`UsbPkcs11HsmSigner`對象 使用`SignAndSave`對 PDF 進行簽名並儲存。 使用 PDF 檢視器驗證 PDF 輸出和憑證。 如何使用 HSM 對 PDF 檔案進行簽名? 使用 HSM 進行簽名通常需要一個實體設備,例如 USB 令牌,應用程式需要與該設備進行互動。 IronPDF與這些操作相容,因為該程式庫和標準 HSM 都使用 PKCS#11 作為通用 API。 為了演示目的,本指南使用模擬 HSM 而不是實體 HSM。 在生產環境或即時測試環境中,不應使用此模擬。 請改用您實際的 HSM。 對於生產環境,除了 HSM 簽章之外,還可以考慮實施額外的PDF 安全功能,例如密碼保護和權限控制,以實現全面的文件保護。 要執行此模擬,您必須先安裝SoftHSM 、 OpenSSL和OpenSC以產生必要的金鑰和令牌。 有關使用 SoftHSM 的更多信息,請參閱其公開的GitHub存儲庫。 在實施 HSM 簽章之前,請確保已正確安裝IronPDF並配置了用於生產環境的授權金鑰。 首先,根據 HTML 字串建立 PDF 檔案。 在下面的範例中,我們定義了模擬 SoftHSM 的路徑和憑證。 這包括提供您建立的 SoftHSM .dll 庫檔案和 .crt 憑證檔案的絕對路徑。 接下來,指定輸出路徑,在本例中為 output.pdf。 定義三個字串:hsmPin 和 hsmKeyLabel。 這些字串區分大小寫,並且必須與您使用 SoftHSM 產生令牌和憑證時建立的憑證完全相符。 之後,初始化 UsbPkcs11HsmSigner 對象,並將 SoftHSM 庫路徑、PIN 碼、令牌標籤和金鑰標籤作為參數傳遞。 此外,建立 PdfSignatureImage 以將已簽署的視覺表示新增至文件中。 最後,呼叫 SignAndSave,它使用 hsmSigner 對文件進行簽名並將其保存到指定的輸出路徑。 HSM 簽章代碼是什麼樣的? :path=/static-assets/pdf/content-code-examples/how-to/signing-with-hsm.cs using IronPdf; using IronPdf.Signing; using IronSoftware.Pdfium.Signing; using System.Drawing; ChromePdfRenderer renderer = new ChromePdfRenderer(); PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Testing</h1>"); // Define Paths and Credentials string softhsmLibraryPath = @"D:\SoftHSM2\lib\softhsm2-x64.dll"; // These MUST match what you created string hsmTokenLabel = "MyTestToken"; string hsmPin = "123456"; string hsmKeyLabel = "my-key"; // The label for the key *inside* the token // Create the HsmSigner object. UsbPkcs11HsmSigner hsmSigner = new UsbPkcs11HsmSigner( softhsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel ); // Create the Signature Image string signatureImagePath = "IronSoftware.png"; PdfSignatureImage sigImage = new PdfSignatureImage(signatureImagePath, 0, new Rectangle(50, 50, 150, 150)); // Sign PDF with HSM pdf.SignAndSave("signedWithHSM.pdf", hsmSigner); Imports IronPdf Imports IronPdf.Signing Imports IronSoftware.Pdfium.Signing Imports System.Drawing Dim renderer As New ChromePdfRenderer() Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Testing</h1>") ' Define Paths and Credentials Dim softhsmLibraryPath As String = "D:\SoftHSM2\lib\softhsm2-x64.dll" ' These MUST match what you created Dim hsmTokenLabel As String = "MyTestToken" Dim hsmPin As String = "123456" Dim hsmKeyLabel As String = "my-key" ' The label for the key *inside* the token ' Create the HsmSigner object. Dim hsmSigner As New UsbPkcs11HsmSigner(softhsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel) ' Create the Signature Image Dim signatureImagePath As String = "IronSoftware.png" Dim sigImage As New PdfSignatureImage(signatureImagePath, 0, New Rectangle(50, 50, 150, 150)) ' Sign PDF with HSM pdf.SignAndSave("signedWithHSM.pdf", hsmSigner) $vbLabelText $csharpLabel UsbPkcs11HsmSigner 也接受兩個可選參數:digestAlgorithm 和 signingAlgorithm。 預設情況下,它們設定為 SHA256 和 RSA。 使用不同的 HSM 配置 不同的HSM設備可能需要特定的配置。 以下範例展示如何使用自訂演算法配置簽名器並處理多個簽名: // Configure with custom algorithms var customHsmSigner = new UsbPkcs11HsmSigner( hsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel, digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512, signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA ); // Apply signature with custom location and reason var signatureOptions = new SignatureOptions { SignerName = "Corporate Signing Authority", Location = "Company Headquarters", Reason = "Contract Approval" }; // Load existing PDF for signing var existingPdf = PdfDocument.FromFile("contract.pdf"); existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions); // Configure with custom algorithms var customHsmSigner = new UsbPkcs11HsmSigner( hsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel, digestAlgorithm: IronPdf.Signing.DigestAlgorithm.SHA512, signingAlgorithm: IronPdf.Signing.SigningAlgorithm.RSA ); // Apply signature with custom location and reason var signatureOptions = new SignatureOptions { SignerName = "Corporate Signing Authority", Location = "Company Headquarters", Reason = "Contract Approval" }; // Load existing PDF for signing var existingPdf = PdfDocument.FromFile("contract.pdf"); existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions); Imports IronPdf ' Configure with custom algorithms Dim customHsmSigner As New UsbPkcs11HsmSigner( hsmLibraryPath, hsmPin, hsmTokenLabel, hsmKeyLabel, digestAlgorithm:=IronPdf.Signing.DigestAlgorithm.SHA512, signingAlgorithm:=IronPdf.Signing.SigningAlgorithm.RSA ) ' Apply signature with custom location and reason Dim signatureOptions As New SignatureOptions With { .SignerName = "Corporate Signing Authority", .Location = "Company Headquarters", .Reason = "Contract Approval" } ' Load existing PDF for signing Dim existingPdf As PdfDocument = PdfDocument.FromFile("contract.pdf") existingPdf.SignAndSave("contract-signed.pdf", customHsmSigner, signatureOptions) $vbLabelText $csharpLabel 當處理需要特定合規標準的數位簽章範例,或需要添加元資料來追蹤簽章詳細資料時,此方法特別有用。 常見的HSM設定問題有哪些? 如果在執行程式碼範例時遇到以下錯誤,請依照下列故障排除步驟進行偵錯和驗證您的配置。 如需有關數位簽章問題的更多協助,請參閱我們的數位簽章故障排除指南。 當程式找不到 SoftHSM 設定文件,或.NET應用程式以 32 位元進程運行而 SoftHSM 庫為 64 位元時,通常會發生 CKR_GENERAL_ERROR 錯誤。 更改平台目標 導致此錯誤的常見原因是架構不符。 您的 C# 應用程式必須以 64 位元進程運行,才能與 64 位元 SoftHSM 程式庫相符 (softhsm2-x64.dll)。 在 Visual Studio 專案屬性中,將平台目標從"Any CPU"或"x86"變更為 x64,以確保相容性。 設定環境變數 另一個常見原因是程式在 SoftHSM 中找不到 .conf 檔案。 您必須透過設定係統範圍的環境變數來告訴庫在哪裡尋找。 建立一個名為 SOFTHSM2_CONF 的新變量,並將其值設為設定檔的完整路徑(例如,D:\SoftHSM2\etc\softhsm2.conf)。 更改完成後,請記得重新啟動 Visual Studio。 此外,您還可以透過新增以下程式碼行來驗證變數是否已找到: Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}"); Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable("SOFTHSM2_CONF")}"); Console.WriteLine($"Verifying variable: {Environment.GetEnvironmentVariable(""SOFTHSM2_CONF"")}") $vbLabelText $csharpLabel 如果控制台輸出為空,則表示程式找不到該環境變數。 您必須進行設置,重新啟動 Visual Studio 或計算機,然後重試。 生產環境 HSM 部署最佳實踐 在生產環境中部署經 HSM 簽署的 PDF 檔案時,請考慮以下額外的安全措施: 1.審計日誌:對所有 HSM 操作實施全面的日誌記錄,以確保合規性並追蹤存取情況 2.證書管理:根據貴組織的安全策略定期更新和輪調證書。 3.備份程序:為 HSM 設定建立適當的備份和復原程序 4.效能最佳化:監控簽章效能並對常用憑證實施快取策略 這些做法是標準PDF 簽名工作流程的補充,可確保您的文件安全基礎架構保持穩健並符合業界標準。 常見問題解答 什麼是 HSM 簽署,它與一般的 PDF 簽署有何不同? IronPDF 的 HSM(硬體安全模組)簽署提供銀行等級的安全性,私密金鑰永遠不會離開實體裝置。一般的 .pfx 檔案簽章會將金鑰載入記憶體,如果電腦受到攻擊,金鑰就會外洩;HSM 簽章則不同,會將私密金鑰鎖定在硬體裝置中,使其無法複製或竊取。 如何在 C# 中為 PDF 配置 HSM 簽署? 若要使用 IronPDF 配置 HSM 簽署,首先透過 NuGet 以「Install-Package IronPDF」安裝函式庫,然後以您的 HSM 認證(包括函式庫路徑、PIN、令牌標籤和金鑰標籤)建立 UsbPkcs11HsmSigner 物件。最後,使用 SignAndSave 方法簽署 PDF 文件。 使用 HSM 進行 PDF 簽名有哪些安全性優點? 使用 IronPDF 的 HSM 可提供防篡改數位簽章,是關鍵任務應用程式的理想選擇。這個過程就像是將文件帶到銀行保險庫一樣 - 應用程式提供 PIN,HSM 在內部簽署文件,並在不洩露私密金鑰的情況下傳回已簽署的文件,確保文件不會被複製或竊取。 我可以在沒有實體裝置的情況下測試 HSM 簽章嗎? 是的,IronPDF 允許您使用 SoftHSM 之類的函式庫模擬 HSM 簽署,用於開發和測試目的。但是,對於生產環境,您必須使用實際的實體 HSM 裝置,才能確保適當的安全性。 IronPDF 使用何種 API 標準進行 HSM 通訊? IronPDF 使用 PKCS#11 API 標準進行 HSM 通訊,確保與標準 HSM 裝置相容。此通用 API 可讓 IronPDF 與各種 HSM 硬體令牌和安全模組進行無縫互動。 如何驗證我的 PDF 已成功使用 HSM 簽署? 使用 IronPDF 的 HSM 功能簽署 PDF 之後,您可以在任何標準的 PDF 檢視器中開啟已簽署的 PDF 來驗證簽章。查看器將顯示數位簽章資訊,並確認文件的真實性和完整性。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 準備好開始了嗎? Nuget 下載 18,120,209 | 版本: 2026.4 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:18,120,209 查看許可證 還在捲動嗎? 想要快速證明? PM > Install-Package IronPdf 執行範例 觀看您的 HTML 變成 PDF。 免費 NuGet 下載 總下載量:18,120,209 查看許可證