Carimbo de tempo em PDF - PKI Express
O PKI Express pode adicionar um carimbo de tempo a um PDF, o que prova que o arquivo existia, tal como está, naquele momento. Os
samples adicionam um carimbo de tempo de documento com a classe PadesTimestamper, usando a autoridade de carimbo de tempo do Rest PKI.
Isso exige o PKI Express 1.7.0 ou posterior, que acrescentou o comando stamp-pdf.
O código é Python, dos samples do PKI Suite, com o pacote pkiexpress (1.10.4); o
sample em Node.js faz o mesmo.
Fluxo
- Crie um
PadesTimestampere informe a ele uma autoridade de carimbo de tempo. - Defina o PDF e o caminho do arquivo de saída.
- Chame
stamp(), que executa o comandostamp-pdfdo PKI Express e grava o PDF com carimbo de tempo no caminho de saída.
stamper = PadesTimestamper()
set_pki_defaults(stamper)
stamper.set_pdf_from_path(join(current_app.config['APPDATA_FOLDER'],
file_id))
create_app_data() # Guarantees that "app_data" folder exists.
output_file = '%s.pdf' % str(uuid.uuid4())
output_file_path = join(current_app.config['APPDATA_FOLDER'], output_file)
stamper.output_file_path = output_file_path
stamper.stamp()
- Em vez de um caminho de saída, você pode definir
overwrite_original_filepara aplicar o carimbo no próprio PDF. - O PDF também pode ser informado em bytes (
set_pdf_from_raw) ou em Base64 (set_pdf_from_base64). stamp()não devolve nada: leia o resultado do arquivo de saída.
A classe tem o mesmo nome nas outras bibliotecas cliente; os métodos mudam:
| Biblioteca | PDF de entrada | Arquivo de saída | Carimbo |
|---|---|---|---|
| Node.js | setPdfFromPath(path) (devolve uma Promise) | setOutputFilePath(path) | stamp() (devolve uma Promise) |
| Java | setPdf(path) | setOutputFilePath(path) | stamp() |
| PHP | setPdfFromPath($path) | setOutputFile($path) | stamp() |
| Python | set_pdf_from_path(path) | propriedade output_file_path | stamp() |
Uma representação visual do carimbo de tempo está disponível no PKI Express 1.18.0 e posteriores, por setVisualRepresentation nas
bibliotecas Node.js, Java (1.23.1) e PHP.
A autoridade de carimbo de tempo
Os samples definem a autoridade de carimbo de tempo em uma função auxiliar por onde passam todos os operadores. Eles usam a autoridade de carimbo de tempo do Rest PKI, autenticada com o token de acesso do Rest PKI, e só a definem quando há um token configurado:
if current_app.config['REST_PKI_ACCESS_TOKEN'] is not None:
authority = TimestampAuthority('https://pki.rest/tsp/a402df41-8559-47b2-a05c-be555bf66310')
authority.set_oauth_token_authentication(current_app.config['REST_PKI_ACCESS_TOKEN'])
operator.timestamp_authority = authority
- Para obter um token de acesso do Rest PKI, veja Solicitando carimbos de tempo ao Rest PKI.
- Outras autoridades de carimbo de tempo podem autenticar com usuário e senha (
set_basic_authentication) ou com um certificado cliente SSL, identificado pelo thumbprint (set_ssl_authentication; Java:setSSLThumbprint). Veja Configurando uma autoridade de carimbo de tempo para a versão em PHP. - A biblioteca Python envia um timeout da requisição de carimbo de tempo (
request_timeout, padrão 15), e a biblioteca Node.js sempre envia 15; as duas exigem o PKI Express 1.12.2, que acrescentou esse timeout. TODO(docs): a unidade do timeout da requisição de carimbo de tempo. - TODO(docs): o que o
stamp-pdffaz quando não há autoridade de carimbo de tempo definida (os samples só definem uma quando há um token do Rest PKI configurado).
Erros
Se a autoridade de carimbo de tempo falhar, o PKI Express devolve o código 30 (TimestampAuthorityNotAvailable); o código 32
(TimestampOptionsRequired) indica que nenhum endereço de autoridade de carimbo de tempo foi informado. Veja os
códigos de retorno.
Veja também
- Validar assinaturas, para inspecionar o arquivo com carimbo de tempo
- Referência rápida do PKI Express
- Rest PKI Core, cujo serviço em nuvem também aplica carimbos de tempo em PDFs