Usando token de e-CPF no GNU Linux para assinaturas digitais e serviços diversos
Com a digitalização dos processos brasileiros, se torna cada vez mais útil (e às vezes necessário) a obtenção de um CPF digital, chamado de e-CPF. O e-CPF tem propriedades criptográficas, permitindo dentre outras coisas, efetuar assinaturas digitais. Devido ao não-repúdio, uma vez assinado um documento com o e-CPF, essa assinatura é reconhecida legalmente no país como pertencente ao CPF correspondente.
O e-CPF é distribuído de duas formas: através de certificados A1 armazenados no próprio computador; e certificados A3 armazenados em mídias criptográficas como tokens (parecidos com um pendrive). Nesse artigo, discutimos o uso de tokens para e-CPF no Linux, para uso no portal web gov.br e para assinaturas digitais em PDF.
No mercado brasileiro, diversas empresas oferecem o serviço de autoridade certificadora (AC) para e-CPF, enquanto o token pode ser de diversos fabricantes. Se sua AC fornecer suporte a Linux, ótimo! Basta seguir as instruções, mas geralmente não é o caso… Então, abordaremos a configuração de tokens de duas grandes marcas, a StarSign e Safenet, com foco em sistemas GNU Linux baseados em Debian/Ubuntu.
Após a obtenção de um token, caso não saiba o modelo, pode utilizar o comando lsusb para descobrir. O token Safenet 5110 aparece como Aladdin, enquanto o StarSign aparece como G&D.
$ lsusb
Aladdin Knowledge Systems Token JC
Giesecke & Devrient GmbH
Para descobrir o modelo exato, pode ser útil instalar o pacote debian opensc, e utilizar o comando opensc-tool -n. Nesse caso, é possível visualizar o código 5110 para o Safenet e G&D para o StarSign. Curiosamente, ambos aparecem como Unsupported card (isso é normal!).
$ sudo apt install opensc
Em ambos os casos, é necessário instalar algum tipo de gerenciador para o token. Dividimos o tutorial em duas partes, para StarSign e Safenet.
Token StarSign
Conferindo o modelo no opensc:
$ opensc-tool -n
Using reader with a card: Giesecke & Devrient GmbH StarSign CUT S [.] (03200312006166) 00 00
Unsupported card
O token StarSign necessita da instalação do gerenciador Tokenadmin, bem como a biblioteca OpenSSL. O site da AC Digital fornece um arquivo Safesign_3.5.2_1804_x86_64.deb para instalação do tokenadmin (para Ubuntu 18.04). A biblioteca libssl pode ser encontrada no pacote libssl1.0.0 dos repositórios debian.
Token Safenet
Conferindo o modelo no opensc:
$ opensc-tool -n
Using reader with a card: AKS ifdh [eToken 5110 SC] 00 00
Unsupported card
O token da Safenet necessita da instalação do gerenciador SafeNet Authentication Client (SAC). O site da AC Digital fornece um pacote SafenetAuthenticationClient-9.1.7–0_amd64.deb para instalação, dentro de um arquivo compactado debian.rar.
Para interagir com o token, basta abrir a interface do aplicativo SACTools:
Pronto! Com o gerenciador aberto no sistema, você já pode usar para assinar documentos no Firefox, ou com algum assinador digital (como o Assinador do SERPRO).
Integração do token com o Firefox
Para acessar o token em páginas web, é necessária a integração com o navegador, no caso, Mozilla Firefox. É preciso que existam os arquivos .so no so sistema.
No caso do Safenet, procure por libeTPkcs11.so e libeToken.so no seu Linux (em /usr/lib ou /lib ou /usr/lib64 …). O comando locate pode ser útil também para apontar o caminho:
$ locate libeToken.so
/lib/libeToken.so.10
/lib/libeToken.so.10.0
/lib/libeToken.so.10.0.37
/usr/lib/libeToken.so
/usr/lib/libeToken.so.10
No caso do SafeSign, procure por libaetpkss.so.3.0.2528 (a numeração pode variar). O comando ls dentro de /usr/lib pode ajudar:
ls -lh /usr/lib/libaetpkss*
Após encontrar o arquivo .so correspondente ao seu token, vá para o Firefox. No Firefox, vá em Preferences -> Privacy & Security -> Security Devices, e adicione o libeToken.so com o Load.
Reinicie o Firefox e faça o teste abaixo.
Portal gov.br (testando o token)
Teste em https://contas.acesso.gov.br, clicando no link Cerificado Digital o Firefox deve abrir um pop-up solicitando a senha de desbloqueio do token.
Caso o login seja bem-sucedido, você ganhará o selo ouro de conta comprovada (na aba Privacidade do portal gov.br).
Utilizando o token com ReceitaNet e ColetaNacional
Outros serviços da Receita Federal podem exigir e-CPF, como o ColetaNacional. No caso, o serviço é distribuído no formato Java WebStart com extensão .jnlp, o que também traz certa dificuldade de uso em ambientes linux. Então, deixamos também algumas instruções para configuração do WebStart no linux, utilizando JRE da Oracle versão 8 (não pode ser OpenJDK ou OpenWebStart).
sudo mkdir /opt/jre
cd /opt/jre
# Faça download do JRE 8 (não do SDK!) para Linux64 (.tar.gz) em: https://java.com/en/download/
sudo tar -zxvf jre-8u281-linux-x64.tar.gz
sudo update-alternatives --install /usr/bin/java java /opt/jre/jre1.8.0_281/bin/java 100
sudo update-alternatives --install /usr/bin/javaws javaws /opt/jre/jre1.8.0_281/bin/javaws 100
sudo update-alternatives --config java
# Escolha opção /opt/jre/jre1.8.0_281/bin/java
sudo update-alternatives --config javaws
# Escolha opção /opt/jre/jre1.8.0_281/bin/javaws
====== testando versão java ======
java -version
# java version "1.8.0_281"
javaws
# Java(TM) Web Start 11.281.2.09-fcs
Pronto, basta abrir o ColetaNacional, baixar o arquivo ColetaNac-desktop.jnlp e conectar o token para envio de dados à Receita Federal.
====== invocando .jnlp ===========
javaws ~/Downloads/ColetaNac-desktop.jnlp
Assinatura de Documentos do Conselho Federal de Medicina (CFM)
O uso de e-CPF também permite que médicos assinem digitalmente receitas eletrônicas. Veja mais em https://prescricaoeletronica.cfm.org.br
Em um post anterior, foi discutido o uso do software livre Okular para assinaturas digitais com certificados do ICPEdu. Porém, o Okular aparentemente não oferece suporte para tokens para assinatura em PDF, portanto recomendamos a instalação do Assinador do SERPRO para Windows/Mac/Linux. Ele tem suporte completo em linux, tanto para assinaturas digitais e verificação de assinaturas em pdf, bem como carimbos de tempo e demais serviços do ICP Brasil.
Basta abrir a aplicação do assinador, escolher o arquivo PDF e a posição desejada para colocação da assinatura (a senha do token será solicitada para finalização do processo de assinatura).
Uma observação importante é que o software assinador pode lançar o seguinte erro:
PDF contains an encryption dictionary, please remove it with setAllSecurityToBeRemoved() or set a protection policy with protect()
Nesse caso, por alguma razão, o PDF vem com algum tipo de bloqueio que atrapalha o processo de assinatura (algum conflito entre tecnologias permissionadas de PDF e recursos não padronizados). Isso pode ser corrigido utilizando o site gratuito freemypdf.com, que diz claramente que o serviço só deve ser utilizado para fins lícitos. Vários tipos de proteção em PDF não são tão protetivas assim (muitas vezes bugs), enquanto outras realmente visam proteção legítima (por exemplo, contra leitura) e o site não quebra nenhum tipo de senha de proteção desse tipo.
Outra opção para resolver o problema localmente no Linux é reescrever o documento usando ghostscript (mas nesse caso, campos de edição também são perdidos, diferente do que faz o freemypdf que preserva os campos de alguma maneira):
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=%stdout% -c .setpdfwrite -f arquivo-travado.pdf > arquivo-destravado.pdf
Após o comando acima, será possível assinar o PDF normalmente (requer instalação do ghostscript localmente).
Igor Machado Coelho é professor no Instituto de Computação da Universidade Federal Fluminense (UFF), desde 2020.
André Luís Ferreira é médico formado pela Universidade Federal de Ouro Preto (UFOP).
Este tutorial só foi possível graças aos seguintes links:
- https://diadialinux.wordpress.com/2020/05/21/instalacao-do-token-safenet-5110-ubuntu-18-04/
- https://kbpdfstudio.qoppa.com/how-to-setup-usb-smart-card-hardware-pkcs11-signing-on-linux/
- https://kamarada.github.io/en/2019/06/28/using-smart-cards-on-opensuse-linux/#.YEfUCP5v_Vf
- https://herrmann.tech/pt/blog/2019/06/13/tokens-e-atribulacoes.html
- https://dtic.unipampa.edu.br/certificadosdigitais/instalando-o-token/instalando-token-starsign
- https://dtic.unipampa.edu.br/certificadosdigitais/files/2014/05/Tutorial_token_starsign_debian.pdf