使用純JavaScript 簽署PDF
挑戰:
使用WebCrypto API 對PDF 文件進行數位簽章提出了挑戰,因為當前的API不允許直接存取金鑰儲存或本地加密
解決方案:
要規避此限制,建議:
-
建立PDF 的雜湊: 產生PDF 檔案的雜湊值,而不是將整個文件傳送到瀏覽器。
-
利用瀏覽器擴充: 安裝瀏覽器擴展,例如Signer.Digital 來存取本機金鑰庫(例如Windows 憑證庫或Linux 上的PKCS#11 ) ).
-
簽署哈希:使用擴充程式的API使用從本機金鑰庫取得的私鑰對雜湊 PDF 進行簽署。
-
接收簽章:瀏覽器擴充功能將以適當的格式傳回簽章(例如 PKCS7)。
-
將簽章插入 PDF: 在伺服器端,使用適當的函式庫(或由Signer.Digital)將簽章重新註入原始 PDF 檔案中。
Signer.Digital 擴充功能:
Signer.Digital 瀏覽器擴充功能提供了必要的執行簽署流程的功能如下:
- 函數:
SignerDigital.signPdfHash(hash, certThumbPrint, hashingAlgo)-
參數:
- 哈希: Base64 編碼字串中 PDF的雜湊值
- certThumbPrint:用於簽署的憑證指紋
- hashingAlgo:用於對 PDF 進行雜湊處理的演算法(例如, "SHA256")
範例:
// Assuming hash is a Base64-encoded PDF hash
SignerDigital.signPdfHash(hash, $("#CertThumbPrint").val(), "SHA-256")
.then(
function (signDataResp) {
// Send signDataResp (contains Base64 PKCS7 signature) to server
},
function (errmsg) {
// Handle error
}
);
登入後複製
註:
私鑰儲存在本機的憑證設定中瀏覽器。 將來,隨著 WebCrypto API 的進步,直接存取金鑰儲存可能成為可能,從而無需瀏覽器擴充功能。
以上是如何在沒有直接金鑰存取的情況下使用 JavaScript 對 PDF 進行數位簽章?的詳細內容。更多資訊請關注PHP中文網其他相關文章!