Assinatura Digital do ICPEdu com Carimbo utilizando Okular

Igor Machado
6 min readOct 10, 2023

Algum tempo atrás, o post “Assinatura Digital do ICPEdu em PDF no GNU Linux” mostrou como utilizar o sistema de certificado de assinatura digital ICP-Edu da Rede Nacional de Ensino e Pesquisa (RNP) no GNU Linux. Para entender melhor os objetivos do ICP-Edu e o procedimento básico de obtenção de certificados digitais no escopo de instituições de ensino e pesquisa brasileiras, recomendo que leia o post anterior antes de avançar nesse aqui. Esse post também chega em um contexto de popularização do uso de assinaturas digitais do Gov.Br, então para usos mais cotidianos de assinatura digital como Pessoa Física, eu recomendo o uso do Assinador ITI com Gov.Br. Finalmente, esse post traz complementos ao post anterior, explorando a capacidade de gerar Carimbos visuais junto com assinatura criptográfica em versões recentes do software Okular.

Para motivação, já adianto uma figura de assinatura digital em PDF com carimbo com Okular (utilizando a logo livre do Tux). Cobri de vermelho detalhes pessoais mais sensíveis da assinatura criptográfica gerada, como CPF.

Recapitularemos brevemente o processo de obtenção de certificados digitais no ICP-Edu, dado que alguns links podem ter se modificado desde o último post. O processo de criação de certificados é basicamente igual, somente na etapa de baixar a cadeia de certificados é que notei alguma diferença nas telas. O link novo parece ser: https://repositorio.icpedu.rnp.br/public/home

Baixando cadeia de certificados para AC Raiz e AC Pessoas no site do ICP-Edu RNP

Utilizando a base NSS

A base de certificados recomendada para o GNU Linux continua sendo o Mozilla Firefox, devido à “herança” do serviço de segurança do Netscape, chamado Network Security Services (NSS). No Ubuntu, já existe uma instância própria do NSS (através do pacote libnss3), então caso não queira utilizar o Firefox como banco de dados criptográfico, basta procurar a base localcert9.db (localizada na pasta de usuário /home/SEU_USUARIO/.pki/nssdb/). Uma mudança recente no Ubuntu trouxe o Firefox encapsulado no Snap, para fins de segurança, então a localização atual da base está em /home/SEU_USUARIO/snap/firefox/common/.mozilla/firefox/RANDOMXXXXXX.default/cert9.db. Particularmente, tenho defendido um grau ainda maior de isolamento de Firefox através da tecnologia Docker em modo rootless, então para um nível maior de isolamento e segurança (e também MUITO mais trabalho de configuração), recomendo esse tutorial (somente para usuários avançados de Linux!): https://github.com/igormcoelho/firefox-gpu-rootless-docker/

Sendo assim, basta escolher alguma estratégia de segurança da base NSS, seja local, seja com Firefox via Snap ou via Docker rootless, a partir desse ponto já assumimos que você encontrou alguma base cert9.db para uso.

Instalando o Okular no GNU Linux via flatpak

Para assinatura digital com carimbo em PDF, será necessário instalar uma versão recente do software Okular.

Pacote Okular no flathub: https://flathub.org/apps/org.kde.okular

Assim como no último tutorial, deixo os comandos de instalação via flatpak e flathub, mas com atenção à tentativa de configurar a linguagem português (para maiores detalhes, releia o último tutorial!):

$ flatpak uninstall org.kde.okular
$ flatpak config --set languages 'pt;en'
$ flatpak --user config --set languages 'pt;en'
$ flatpak install flathub org.kde.okular
Instalando Okular via flathub no GNU Linux (terminal bash)

Ainda assim, sigo com dificuldades na configuração do idioma português no Okular, o que prejudica um pouco o processo de assinatura digital, já que o texto gerado na assinatura ficará em inglês. Infelizmente, não consegui até o momento alternativa que resolvesse esse problema (se conseguir, me avise por favor!). Talvez isso se deva ao fato do meu sistema em si estar em inglês, não sei ao certo, mas o pacote de Locale do Okular aparentemente suporta /pt e /en (através do comandos):

$ locale -a
$ flatpak info org.kde.okular.Locale
# saída deve indicar suporte a /pt e /en

O importante nesse ponto, para suporte a Carimbo, é ter uma versão razoavelmente nova do Okular, dado que a versão de sistema 21.12.3 suporta assinaturas, mas não carimbos, então consegui fazer funcionar somente na versão 23.08.1:

Versão do Okular com suporte a assinatura digital e também suporte a carimbo

Para configurar sua assinatura digital no Okular, basta importar seu arquivo .p12 para a base cert9.db através do Firefox (como detalhado no tutorial anterior), e depois apontá-la no Okular em: Settings -> Configure Backends -> PDF -> Custom (e indique o caminho da PASTA que contém sua base cert9.db):

Caminho da pasta com cert9.db na configuração de NSS para o Okular

Pronto! Agora já podemos fazer um carimbo visual e utilizá-lo em assinatura digital criptográfica!

Criando um carimbo

Algo que levou bastante tempo foi a concepção de um modelo de carimbo que fosse razoavelmente bom para fins práticos, ou seja, que incluísse informações básicas relevantes, como CARGO, número de SIAPE (para funcionários públicos), uma versão visual da assinatura e também algum carimbo institucional. Isso é desafiador, dado que o Okular no momento não permite personalizar fontes, textos de assinatura, e nem o posicionamento dos textos…

Apresento então um modelo, que pode ser completamente modificado (utilizando o GIMP) dependendo das normas da instituição, apenas para motivação (arquivos 2023-modelo-assinatura-carimbo.xcf e 2023-modelo-assinatura-carimbo.png):

Modelo de carimbo em formato PNG e XCF (GIMP)

Como softwares proprietários de assinatura digital (como Adobe) tipicamente colocam suas logomarcas, tomei a liberdade de incluir a logomarca do Linux, conhecida como o pinguim Tux, que tem licença de domínio-público CC0, mas que foi feita por Larry Ewing e vetorizada Garrett LeSage: https://github.com/garrett/Tux

Na prática, recomendo que se utilize algum tipo de logomarca mais representativa, como uma institucional. O posicionamento dos campos de CARGO, INSTITUIÇÃO e SIAPE também podem ser modificados, mas tome cuidado para que exista um espaço no meio, para informações colocadas pela assinatura do Okular, e também deixe a logomarca com algum grau de transparência, para que apareça ao fundo das informações de quem assinou o documento. Acho que uma assinatura “manual” também tem seu valor (pelo menos histórico), então também deixei um espaço para que se coloque uma assinatura própria. Novamente, nada disso é estritamente necessário, dado que uma assinatura digital criptográfica já tem valor legal com ou sem carimbo, mas o carimbo pode ser interessante dar mais informações, como cargo, etc, de uma forma visual e rápida.

Testando a sua assinatura com carimbo

Para testar a assinatura, criei um modelo em PDF para assinatura digital com carimbo, e algo interessante é justo testar mais de uma assinatura, dado que qualquer alteração em um PDF após a primeira assinatura leva à destruição da assinatura anterior. Então, caso o processo seja feito corretamente, ambas assinaturas irão se apresentar como válidas, incluindo os respectivos carimbos.

Veja o arquivo 2023-Documento-Teste-Assinatura-Carimbo.pdf para fazer o seu próprio teste!

Para assinar no Okular, clique em Tools -> Digitally Sign, depois marque um espaço suficiente para a assinatura com carimbo, e finalmente, preencha os campos de Reason (motivo) e Location (local). Particularmente, acho interessante usar o campo Reason para incluir o cargo, e o campo location para a cidade. Note que o certificado digital já deve estar importado (na etapa de Configure Backends) para que a opção Digitally Sign esteja funcional!

Incluindo assinatura digital com carimbo em um PDF com Okular

O resultado final do documento após duas assinaturas com tamanhos distintos pode ser visualizado em: 2023-Documento-Teste-Assinatura-Carimbo-assinado.pdf

Observe que ambas assinaturas com carimbo são criptograficamente válidas. Repare na importância de ter um bom espaço para que a assinatura com carimbo fique completamente legível.

Palavras finais

Espero que esse tutorial tenha sido útil, no intuito de popularizar e facilitar o uso de assinaturas digitais com carimbo com software livre, em contexto de instituições de ensino e pesquisa.

P.S.: Acredito que seja possível utilizar o Okular também no Windows ou MacOS/OSX, embora não tenha tido tempo para detalhar isso antes de (finalmente) liberar esse tutorial para o público. Caso consiga, compartilhe, e boa sorte!

Igor Machado Coelho é professor no Instituto de Computação da Universidade Federal Fluminense

--

--