INTRODUÇÃORecentemente comprei (via Internet) uma certidão digital num cartório e o arquivo da certidão veio assim:
certidao.pdf.p7s Essa extensão dupla (
.pdf.p7s) indica que se trata de um arquivo no formato PDF que em seguida foi "empacotado" para um arquivo-pacote no formato P7S. Tentei abrir esse arquivo P7S com diferentes aplicativos visualizadores de arquivos PDF, mas nenhum deles foi capaz de ler esse arquivo PDF com extensão P7S. E na Internet eu também não encontrei nenhum visualizador online para esse tipo de arquivo.
Essa extensão P7S é pouco conhecida, mas imagine o seguinte: digamos que você pegue um arquivo PDF e o "empacote" como um arquivo TAR (ou ZIP, se preferir). Embora esse arquivo-pacote não requeira uma senha para ser aberto, o "empacotamento" que você aplicou fará com que esse arquivo PDF "empacotado" se torne ilegível para aplicativos visualizadores de arquivos PDF, não é mesmo? Por exemplo: se você tentar abrir um tal de
arquivo.pdf.tar ou
arquivo.pdf.zip com um visualizador de arquivos PDF, o visualizador retornará um erro.
Pois é, um arquivo P7S é essencialmente isso: ele é um arquivo (não necessariamente PDF...) que foi criptografado ("empacotado" para um formato criptográfico) e, por causa disso, o aplicativo visualizador do arquivo em sua forma original (como por exemplo um visualizador de arquivos PDF) não conseguirá mais ler o código-fonte desse arquivo e exibir para você as informações dele, justamente devido à aplicação dessa criptografia que deixou o arquivo PDF com formato P7S.
O que ocorre é que existe um formato de assinatura eletrônica – denominado
CAdES¹ – que é largamente aceito pelo mercado por ser um formato capaz de assinar digitalmente qualquer tipo de arquivo: DOC, ODT, DOCX, XLS, TXT, PPT, OTT etc. – inclusive arquivos PDF. No entanto, esse padrão de assinatura produz um arquivo de extensão
P7S que não é nem um pouco fácil de se conseguir visualizar.
A razão por que não é fácil visualizar arquivos P7S é que um visualizador desses teria de ser um aplicativo capaz de não apenas descriptografar (interpretar e descodificar) o conteúdo do arquivo P7S, mas também teria de ser capaz de mostrar o conteúdo do arquivo P7S descriptografado. O problema é que esse arquivo descriptografado pode ser um arquivo PDF, um arquivo TXT, um DOC, um ODS, um XLS, um PPT, um arquivo de imagem JPG etc., portanto o visualizador teria de ser capaz não apenas de ler o código P7S e descriptografá-lo, mas ainda por cima mostrar para você o conteúdo do arquivo
independentemente do formato original dele (PDF, TXT, DOC, ODS, XLS, PPT, JPG etc.). Percebe a complexidade disso? Se já é necessário um programa específico para abrir arquivos DOC e DOCX, outro programa específico para abrir arquivos PDF, outro para arquivos XLS etc., imagine um programa capaz de abrir e exibir o conteúdo de todos eles!
É por isso que geralmente as pessoas "desempacotam" o arquivo P7S e então abrem o arquivo "desempacotado" no aplicativo visualizador específico. Se você desempacotar o arquivo P7S e o resultado for um arquivo ODS, por exemplo, você abre esse ODS no LibreOffice Calc; se o resultado for um arquivo PDF, você abre o PDF num visualizador de arquivos PDF; e assim por diante.
Apesar de ser difícil um visualizador "universal" para arquivos P7S, existe um modo relativamente simples de conseguir "extrair" o conteúdo do arquivo P7S: basta instalar o pacote
openssl e utilizá-lo, no terminal do shell do Linux, para executar um comando que criará um arquivo-clone do arquivo P7S, em seguida lerá o conteúdo criptografado desse arquivo-clone, descriptografará esse conteúdo do arquivo-clone e então salvará esse arquivo-clone (para que ele se torne um arquivo legível, visualizável). O resultado será então o seu arquivo P7S original
intacto e, além disso, um arquivo-clone que conterá o conteúdo
descriptografado e fácil de visualizar.
EXTRAINDO O CONTEÚDO DO ARQUIVO P7SMeu sistema Linux (XUbuntu 16.04 de 64 bits) já estava com o
openssl instalado, mas se esse não for o seu caso basta abrir uma janela do terminal do shell (a combinação de teclas
Ctrl Alt T normalmente faz isso) e então executar no terminal este comando de instalação do
openssl:
sudo apt-get install openssl -y
Uma vez que o pacote
openssl esteja instalado, use o comando
cd para acessar a pasta em que o arquivo P7S se encontra. A título de exemplo, suponha que o arquivo
certidao.pdf.p7s esteja em
/tmp e eu queira descriptografar o conteúdo dele para um arquivo
certidao.pdf que também quero que fique na pasta
/tmp. Em tal caso, primeiro eu entro na pasta com este comando:
cd /tmp
...e em seguida executo este comando para criar o arquivo descriptografado
certidao.pdf a partir do original
certidao.pdf.p7s:
openssl smime -inform DER -verify -noverify -in certidao.pdf.p7s -out certidao.pdf
O resultado será então o arquivo
certidao.pdf, que você poderá abrir com qualquer visualizador de arquivos PDF.
Caso (por exemplo) o arquivo original seja um DOC ao invés de PDF, como por exemplo
arquivo.doc.p7s, execute o comando assim:
openssl smime -inform DER -verify -noverify -in arquivo.doc.p7s -out arquivo.doc
Se o arquivo não tiver a extensão original dele, como por exemplo
arquivo.p7s, e além disso você não souber qual é o formato original do arquivo, execute o comando assim:
openssl smime -inform DER -verify -noverify -in arquivo.p7s -out arquivo
...e depois tente abrir o arquivo simplesmente clicando duas vezes sobre ele (ou clicando uma vez e pressionando a tecla Enter). O Linux é inteligente o bastante para ler o cabeçalho do código-fonte do arquivo, identificar o formato dele e selecionar o visualizador adequado (caso seu sistema possua). Mas se você fizer isso e não funcionar, tente abrir
arquivo com diferentes visualizadores, como por exemplo visualizador (e/ou editor) de arquivos PDF, visualizador (e/ou editor) de arquivos DOC, DOCX, ODT, XLS, XLSX, PPT etc.
Ainda no terminal, este comando:
cat arquivo | grep -i pdf
...retornará a mensagem
"Arquivo binário (entrada padrão) coincide com o padrão" caso
arquivo seja um arquivo PDF. Se não for PDF, o comando acima não retornará mensagem nenhuma (resposta vazia). Para arquivos DOC e DOCX você deve substituir
pdf por
doc, no comando acima (ali logo depois do
grep -i), e para arquivos XLS e XLSX use
excel no lugar de
pdf.
Os navegadores mais populares, como por exemplo Google Chrome e Mozilla Firefox, conseguem visualizar arquivos PDF, TXT, RTF etc. dentro da própria janela deles (além, obviamente, de arquivos HTM, HTML e alguns em formato PHP), então se por exemplo você abrir uma janela do Google Chrome e abrir este endereço:
file:///tmp/arquivo
...o Google Chrome mostrará para você uma visualização do arquivo, caso
arquivo esteja em um formato que o Google Chrome é capaz de reconhecer e exibir para visualização (se não estiver, o navegador fará
download do arquivo ao invés de exibi-lo na própria janela).
VISUALIZANDO A ASSINATURA DO ARQUIVO P7SAgora que você já extraiu o conteúdo de
arquivo.p7s e o visualizou, digamos que você queira ver o certificado da assinatura criptográfica dele, ou seja, queira saber quem assinou o arquivo, quando assinou, qual a chave criptográfica do certificado usado nessa assinatura etc. E aí, como fazer isso?
Em tal caso, basta retornar ao terminal e executar este comando:
openssl smime -inform DER -verify -in arquivo.p7s -noverify -signer cert.pem
O resultado desse comando será o arquivo
cert.pem que conterá o certificado usado na assinatura do arquivo. Para visualizá-lo, basta executá-lo (com um clique duplo, ou ainda selecionando o arquivo e em seguida pressionando a tecla Enter). No terminal você pode abrir esse arquivo com este comando:
mimeopen cert.pem
Caso sua distribuição Linux não possua um visualizador para arquivos PEM, e por isto nenhum dos métodos de visualização anteriormente citados funcione, retorne ao terminal e execute este comando mais completo:
openssl smime -inform DER -verify -in arquivo.p7s -noverify -signer cert.pem ; keytool -printcert -file cert.pem > cert.txt
O comando acima produzirá o mesmo arquivo
cert.pem mas o usará para gerar o arquivo
cert.txt que conterá os dados do certificado em formato de texto puro, que você poderá então abrir com qualquer visualizador e/ou editor de textos, ou até mesmo no seu navegador, abrindo este endereço ali na barra de endereços (supondo que o arquivo esteja em
/tmp/cert.txt):
file:///tmp/cert.txt
É isso.
EDIT: existe uma aplicação, denominada
XCA, que é capaz de ler arquivos de certificado. Para instalar a aplicação XCA, basta executar este comando:
sudo apt-get install xca -y
...e em seguida executar o XCA, criar um novo banco de dados
² e então, na aba
Certificates, clicar no botão
Import, selecionar o arquivo
cert.pem e clicar em
Abrir. Uma vez feito isso, o certificado aparecerá na janela. Basta efetuar um clique duplo sobre a linha que contém as informações resumidas do certificado (ou então clicar uma vez nele e em seguida clicar no botão
Show Details) que as informações completas do certificado serão exibidas.
Elaborei também uma pequena apresentação de diapositivos (
slides) no
Google Slides. A apresentação explica o mesmo que o tutorial acima, só que de maneira gráfica e um pouco mais resumida. Quem quiser ver, basta clicar
aqui.
Se quiser utilizar um visualizador gráfico de arquivos P7S, veja
este meu tutorial (ele também está em formato de apresentação de slides do Google Slides). Importante: será necessário possuir o JRE (Ambiente de Execução Java) instalado no sistema.
Notas de rodapé
¹ A abreviatura CAdES significa CMS Advanced Electronic Signature, ou seja: "Assinatura Eletrônica CMS Avançada". E a abreviatura CMS significa Cryptographic Message Syntax, ou seja: "Sintaxe de Mensagem Criptográfica". Portanto, CAdES é um formato avançado de assinatura eletrônica em que essa assinatura é construída utilizando-se uma sintaxe de mensagens criptográficas.
² Na janela do aplicativo XCA, use a combinação de teclas Ctrl N (ou então clique em File e depois em New Database), então selecione uma pasta na qual deseja guardar o banco de dados, digite um nome para o banco de dados e confirme clicando em Salvar.