验证签名
检查已签名的 PDF,包括签名是否覆盖整个文件。
这款工具完全在你的浏览器中运行。文件从不上传,你可以在浏览器的网络标签中亲自验证这一点。 亲自验证:打开浏览器的网络标签观察。你会看到一个查询你是否还有剩余任务的小请求,只包含工具名称和一段哈希,绝不会包含文件。
这款工具的作用
This checks the digital signatures inside a PDF and writes a report. It asks four separate questions and never collapses them into one tick: does the signature cover the whole file, does the digest still match, does the signature verify against the certificate embedded with it, and is that certificate one you should trust. The last is answered honestly - there is no trust store here, so the report says not checked.
Whenever a signed document matters and you did not produce it: an invoice that claims to be signed, a contract returned by a counterparty, a certificate sent as proof of something. It is also worth running on your own output, to see what the recipient's reader will report.
工作原理
- Drop the signed PDF onto this page.
- Leave certificate details on to see the subject, the issuer, the validity dates and the serial number in the report.
- Press Verify signature. A document with no signature field says so plainly and points you at Digital signature, rather than reporting a failure.
- Read the report. Each signature gets its own section, and every line is marked ok, information, warning or danger.
- Keep the report as a web page, or switch the format to JSON under advanced options if something else is going to read it.
The check most verifiers skip is whether the signature covers the whole file. A PDF signature covers only the byte ranges named in its /ByteRange array, so a forged document can carry a perfectly valid signature over the first two pages and an appended third page that nobody signed. A verifier that asks only whether the CMS validates reports that as signed and intact, which is why it is the first line of this report.
Certificate trusted: not checked is the honest answer, and it is deliberate. Deciding whether a certificate belongs to whoever it names requires a trust store and, for revocation, a call to the issuer - and this tool ships no trust store and contacts no issuer. So the report shows the subject, the issuer and the validity window and asks you to compare them against what you expected.
Read the four lines together rather than looking for a verdict. Covers the whole document and document unchanged tell you the bytes are as they were signed; signature verifies tells you the private key matching the embedded certificate produced it. An expired certificate is a warning rather than a failure, because a signature made before expiry stays valid - though without a timestamp nothing proves when it was made.
A document signed with a picture of a signature has nothing here to check, and the report says no signature field rather than pretending otherwise. That is not evidence of anything wrong - most everyday signing is done that way - but the file carries no evidence of its own integrity, and no tool can supply that afterwards.
这款工具做不到的事
- There is no trust store and no network access, so the report cannot say whether a certificate belongs to whoever it names.
- Revocation is not checked. A certificate revoked after it was issued verifies here exactly like one that was not.
- Timestamp tokens are not validated, so any signing time shown is the signer's claim rather than evidence.
- A drawn or scanned signature image carries nothing cryptographic to check; only certificate-based signatures produce a report.
常见问题
- 这到底检查什么?
- 四件事,分别报告:签名覆盖的字节范围是否覆盖整个文件、文档的摘要是否仍然一致、CMS 签名能否对随其嵌入的证书验证通过,以及那份证书说了什么。每一项都有自己的行和严重程度,因为把它们并成一个结论,正是让一个坏签名显得没问题的原因。
- 它为什么说证书不受信任?
- 它说的是「未检查」,这是另一种说法。检查信任意味着把证书和一批机构的库比对,并向颁发者询问它有没有被吊销,而这两件事都需要这个工具不会用到的网络。请把主体和颁发者和你所预期的比一比。
- 签名没有覆盖整份文档是什么意思?
- 意思是文件的一部分落在签名覆盖的字节范围之外——签名施加之后又追加了内容。对前面部分的签名可以完美验证,而追加的部分并未被签名。无论签名对其余部分说了什么,都请把范围之外的一切当作未经验证。
- PDF 页面上有签名,报告却说没有。为什么?
- 因为那是一张图片,不是签名。手写签名的图像只是普通的页面内容,背后没有任何密码学的东西,所以没有可验证的对象。对多数文书来说这没问题,但那份文件无法告诉你它在签名之后是否被改动过。
- 验证时文档会被上传吗?
- 不会。验证在你浏览器的 Web Worker 里运行,也不会联系任何证书颁发机构——这也是为什么信任被留作未回答、而不是被断言。你下载的报告是在你自己的机器上生成的。