Certificado Digital PKCS12: Como o OpenSSL pode te ajudar
Dúvida sobre os certificados digitais? Você não sabe como manipular estes arquivos? Veja como o OpenSSL vai deixar sua vida mais fácil.
O que é um Certificado Digital?
Certificado digital é um arquivo de computador que torna possível assinar digitalmente documentos e transações, com garantia de autenticidade e integridade das informações.
Basicamente, os certificados digitais trabalham com chaves assimétricas, ou seja, uma chave privada e uma chave pública. Vou tentar explicar de uma maneira bem simples: Quando um documento é assinado com uma chave privada, somente a chave pública pode validar essa assinatura, e vice-versa.
A chave privada somente o proprietário do certificado tem acesso e a chave pública fica disponível à todos. Então quando um documento é assinado pela chave privada a autenticidade é verificada com a chave pública.
Seu uso não para por aí, o certificado digital também pode ser usado para criptografar mensagens. Por exemplo, se você criptografar uma mensagem com uma chave pública ela somente poderá ser descriptografa por quem possui a chave privada. Ou seja, mesmo que a mensagem seja interceptada por um terceiro, não será possível saber seu conteúdo sem a chave privada.
Tudo isso é possível por meio de um algoritmo matemático bem complexo. Se quiser mais detalhes sobre isso, recomendo estes artigos do Wikipedia: Certificado digital e Criptografia de chave pública.
Certificado digital e as notas fiscais eletrônicas
O certificado digital no Brasil tem amparo jurídico e vale tanto quanto uma assinatura física. Por isso ele foi amplamente adotado nos órgãos públicos, inclusive na emissão de notas fiscais eletrônicas.
Desta forma, todas as notas fiscais eletrônicas precisam da assinatura digital para garantir sua autenticidade. Com sua chave privada, o emissor assina a nota fiscal, garantido que foi ele mesmo quem emitiu aquela nota.
Sinceramente, eu acho um exagero solicitar assinatura de digital na emissão notas fiscais. Acho que isso poderia ser garantido por meio de uma senha ou token. Por outro lado, também entendo o aspecto legal e conheço muito bem o "jeitinho brasileiro" para burlar algumas coisas. Mas isso é uma discussão para outro momento.
Certificado digital: Como abrir este arquivo?
Quando você adquire um certificado normalmente ele vem no formato A1 (neste artigo não vou falar sobre o formato A3). Basicamente é um arquivo do tipo PKCS12 e sua extensão é PFX ou P12.
O arquivo PKCS12 contêm os dados da pessoa, chave privada, chave pública e um certificado emitido por uma entidade confiável (neste caso é a chave pública desta entidade). Todos os estes dados ainda estão criptografados com uma senha para minimizar os impactos caso o arquivo caia em mãos erradas.
Mais dados sobre os arquivos PKCS12 estão neste artigo da Wikipedia.
É muito comum os softwares que utilizam certificação digital exigirem um arquivo PEM, que é quase a mesma coisa que o arquivo PKCS12, mas com um formato mais aberto e normalmente não criptografados. Neste artigo do Wikipedia tem mais detalhes os arquivos PEM.
Como o OpenSSL pode me ajudar?
O OpenSSL é uma bibliotecas que implementa os protocolos SSL e TLS e fornece funções para trabalhar com vários tipos de criptografia. Neste post o objetivo é falar sobre as funções com os certificados digitais. Mais informações sobre esta ferramenta, inclusive a sobre instalação, estão na página oficial.
Uma das principais funções que o OpenSSL oferece é converter o arquivo PKCS12 para um arquivo PEM. Isso pode ser feito por meio de diferentes comandos. Vou explicar os comandos mais populares.
O comando abaixo converte um arquivo PKCS12 em um arquivo PEM, acompanhando todos os certificados e criptografando a chave privada com uma nova senha:
openssl pkcs12 -in FILE.p12 -out FILE1.pem -cacerts
É possível também converter o arquivo PKCS12 em um arquivo PEM, mas sem criptografar a chave privada.
openssl pkcs12 -in FILE.p12 -out FILE2.pem -nodes
Para abrir o arquivo PEM e mostrar a chave privada e outros dados relevantes para o cálculo da assinatura digital, você pode usar este comando:
openssl pkey -inform PEM -in FILE2.pem -text -out FILE-PRIVATE-KEY.pem
Caso você queira ver inclusive a chave pública contida no arquivo PEM você pode utilizar o comando abaixo:
openssl pkey -inform PEM -in FILE2.pem -text -out FILE-PUBLIC-KEY.pem --pubout
Neste link do GitHub existem outros comandos úteis do OpenSSL, vale a pena conferir.
Dúvidas ou sugestões é só entrar em contato. Abraço.