What this is about
The hash chain proves a document as long as you ask CRMS. But a PDF leaves CRMS and is sent on, printed, filed. The seal travels with it: it is an electronic signature inside the PDF itself. Every PDF program that shows signatures can see whether the file was changed since it was sealed.
A seal does not sign in the name of a person but in the name of the organization that issued the document. That is why it is called a seal and not a signature.
The seal modes
| internal | none | |
|---|---|---|
| Final PDFs | are sealed | stay unsealed |
| Needs | CODAMAI_CRMS_SEAL_KEYSTORE and the timestamp authority | nothing |
| Seal check reports | intact, or the problem it found | always seal-missing |
| In the hub | sealMode: INTERNAL | sealMode: NONE |
The mode is set in CODAMAI_CRMS_SEAL_MODE. Any value other than internal or none makes the start fail. With internal, the start also fails if CODAMAI_CRMS_SEAL_KEYSTORE is missing. How you set the mode in the hub is described in The CRMS module in the hub.
When it is sealed
| Mode | Format | Seal mode | Is it sealed? |
|---|---|---|---|
PREVIEW or TRANSIENT | – | – | no |
FINAL | not PDF (DOCX, XLSX, CSV, HTML …) | – | no, the evidence is the hash chain |
FINAL | none | no | |
FINAL | internal | yes |
If sealing fails, there is no document but 500 document-seal-failed.
How the seal is built
- Standard: PAdES, level B-T. PAdES is the European standard for signatures in PDF files. B-T means: the signature carries a timestamp.
- Key: from
CODAMAI_CRMS_SEAL_KEYSTORE, PKCS#12 with the whole certificate chain, Base64 encoded, password inCODAMAI_CRMS_SEAL_KEYSTORE_PASSWORD. The certificate comes from a certificate authority of the installation itself. - Timestamp: over the signature value, from the same timestamp authority that also anchors the journals. See Timestamps and anchors.
- No signing time of its own: PAdES forbids the attribute
signing-time. The trusted time is the timestamp’s. - After the PDF/A conversion: the seal is written as an incremental update at the end of the file. The bytes before it stay unchanged, and PDF/A-3a and PDF/UA stay valid.
- Invisible: the seal has no visible field on the page.
Because the seal is applied before storing, the revision’s content hash covers the sealed file.
What the seal check finds
-
CRMSPresentDoes the PDF carry a seal?↳ no
seal-missing -
CRMSReadableCan the file and the signature be read?↳ no
seal-unreadable -
CRMSTo the endDoes the last seal cover the file up to the last byte?↳ no
seal-signature-invalid– something was appended -
CRMSSignatureIs the signature correct, and does the certificate come from the configured certificate authority?↳ no
seal-signature-invalid -
CRMSSigning timeIs the forbidden attribute
signing-timeabsent?↳ noseal-signing-time-present -
CRMSTimestampIs the signature's timestamp valid?↳ no
seal-timestamp-invalid - Seal intact, with the time of the timestamp