Pular para o conteúdo principal

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​

  1. Crie um PadesTimestamper e informe a ele uma autoridade de carimbo de tempo.
  2. Defina o PDF e o caminho do arquivo de saída.
  3. Chame stamp(), que executa o comando stamp-pdf do 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_file para 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:

BibliotecaPDF de entradaArquivo de saídaCarimbo
Node.jssetPdfFromPath(path) (devolve uma Promise)setOutputFilePath(path)stamp() (devolve uma Promise)
JavasetPdf(path)setOutputFilePath(path)stamp()
PHPsetPdfFromPath($path)setOutputFile($path)stamp()
Pythonset_pdf_from_path(path)propriedade output_file_pathstamp()

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-pdf faz 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​

Ver em Markdown