Files
bentopdf/docs/zh-TW/tools/validate-signature-pdf.md
T

100 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 驗證簽章
description: 驗證 PDF 檔案中的數位簽章。檢查憑證有效性、簽署者身分、文件完整性與信任鏈狀態。
---
# 驗證簽章
上傳已簽署的 PDF,此工具會擷取每個數位簽章、識別簽署者、檢查憑證有效性,並回報文件在簽署後是否遭到修改。您也可以提供受信任的憑證來驗證簽章鏈。
## 運作方式
1. 上傳已簽署的 PDF 檔案。驗證會自動開始。
2. 工具會顯示摘要:找到的簽章數量,以及其中有幾個有效。
3. 每個簽章都有一張詳細資訊卡,顯示簽署者名稱、簽發者、日期與狀態。
4. 可選擇上傳**受信任的憑證**(.pem、.crt、.cer、.der),以特定信任錨點驗證簽章。重新驗證會自動執行。
## 檢查項目
### 簽章解析
此工具會從 PDF 擷取 PKCS#7 簽章物件、解碼 ASN.1 結構,並取出簽署者的 X.509 憑證以及簽章中內嵌的任何憑證鏈。
### 憑證有效性
- **到期**:憑證目前是否在有效日期範圍內?
- **自簽偵測**:憑證是否由其自身簽發?
- **信任鏈**:提供受信任憑證時,簽署者的憑證鏈是否能追溯到該憑證?
### 密碼學驗證
- 此工具會重建簽章 `/ByteRange` 涵蓋的位元組,以簽署者宣告的演算法計算雜湊,並將結果與簽章內的 `messageDigest` 屬性比對。
- 接著將已簽署屬性重新序列化為 DER SET,並以簽署者憑證的公鑰驗證簽章。
- **只有在上述所有檢查都通過時,簽章才會被回報為有效。** 如果 PDF 位元組在簽署後遭到修改,或內嵌簽章與簽署者的金鑰不符,狀態會顯示「無效:密碼學驗證失敗」並附上具體原因。
#### 支援的簽章演算法
| 演算法 | 驗證方式 |
| ----------------------- | ------------------------------------------------------------------------------------ |
| RSA (PKCS#1 v1.5) | node-forge `publicKey.verify`,並以 Web Crypto 作為備援 |
| RSA-PSS (RSASSA-PSS) | Web Crypto `verify({name: 'RSA-PSS', saltLength})` |
| ECDSA P-256/P-384/P-521 | 將 DER 簽章轉換為 IEEE P1363 格式後,使用 Web Crypto `verify({name: 'ECDSA', hash})` |
如果簽章使用此清單以外的演算法(例如 Ed25519、SM2,或使用罕見摘要 OID 的 RSA),資訊卡會以黃色顯示 **「未驗證:不支援的簽章演算法」**,並附上具體的 OID 或原因。這是刻意設計的三種狀態區分:
- **有效**:簽章已透過簽署者的公鑰完成密碼學驗證。
- **無效**:驗證已執行且結果為否定(位元組已變更、金鑰不符)。
- **未驗證**:此工具無法針對該演算法執行驗證。憑證中繼資料仍會顯示,但您應將該簽章視為「未知」,並使用 Adobe Acrobat 或 `openssl cms -verify` 進行驗證。
### 不安全的摘要演算法
- 使用 **MD5 或 SHA-1** 的簽章會被判定為無效,並標示為「不安全的摘要演算法」狀態。這兩種演算法都已有公開的碰撞攻擊,因此對 SHA-1 或 MD5 雜湊所做的簽章無法保證完整性。
- SHA-224、SHA-256、SHA-384 與 SHA-512 皆可接受。
### 文件涵蓋範圍
- **完整涵蓋**:簽章涵蓋整個 PDF 檔案,表示簽署後沒有新增或變更任何位元組。
- **部分涵蓋**:簽章只涵蓋檔案的一部分。這可能表示簽署後有過修改(不一定是惡意的,增量儲存也會產生部分涵蓋)。
## 簽章詳細資訊
每張簽章資訊卡會顯示:
- **簽署者**:簽署者憑證中的一般名稱、組織與電子郵件
- **簽發者**:簽發簽署者憑證的憑證授權單位
- **簽署時間**:簽章中內嵌的時間戳記
- **有效期起 / 有效期至**:憑證的有效期間
- **原因**:簽署文件的原因(若有提供)
- **地點**:簽署的地點(若有提供)
- **涵蓋狀態**:完整或部分
- **信任標章**:受信任或不在信任鏈中(僅在提供自訂憑證時顯示)
### 技術細節
展開技術細節區塊可查看:
- 簽署者憑證的序號
- 摘要演算法(SHA-256、SHA-512 等)
- 簽章演算法(RSA with SHA-256、ECDSA with SHA-256 等)
- 無效簽章的錯誤訊息
## 使用情境
- 在會簽前驗證已數位簽署的合約
- 稽核已簽署的文件,確認未遭竄改
- 檢查憑證在文件簽署後是否已過期
- 以您組織的根憑證驗證簽章
- 檢視政府或法律文件的簽署詳細資訊
## 提示
- 自簽憑證並不代表簽章無效,而是表示無法透過受信任的第三方驗證簽署者身分。這在內部文件中很常見。
- 部分涵蓋不一定代表遭到竄改。許多 PDF 工作流程會加入增量更新(例如第二個簽章),因而產生部分涵蓋。
- 將您組織的根憑證或中繼憑證上傳為受信任的憑證,即可進行信任鏈驗證。
## 相關工具
- [數位簽章](./digital-sign-pdf):使用您自己的憑證簽署 PDF
- [平面化 PDF](./flatten-pdf):在簽署前將 PDF 平面化,以防止簽署後的修改
- [移除中繼資料](./remove-metadata):在套用簽章前清理 PDF