Veja nesta publicação como adicionar o recurso de assinatura digital em seus documentos (arquivos) JSon, quando necessário.
Assinatura digital de documentos não é uma novidade, mas de fato se popularizou aqui no Brasil a partir de 2007 com o advento da NFe., visto que os documentos (notas e cupons fiscais) precisam ser enviados com uma assinatura digital.
A assinatura digital atende a dois propósitos principais, podemos dizer:
- Autenticar o emissor do documento
- Autenticar a inviolabilidade do conteúdo do documento
Para atingir este objetivo, entram em cena:
- O documento (ou informação) original
- O Certificado Digital
Não vamos abordar em detalhes o tema, pois não é este o objetivo aqui, mas vamos mostrar como adicionar assinaturas digitais a documentos e também como validar documentos digitalmente assinados, usando o Magic xpa ou mesmo o Magic xpi.
Assinando Digitalmente um Documento
O projeto NFe definiu um padrão de layOut de assinatura baseado em XML. Nele, as informações da assinatura digital são embutidas no documento original, num nó imediatamente abaixo do nó que contém a informação original que foi assinada.
Isso porque o “recebedor” de um documento assim precisa ter acesso a:
- O conteúdo original do documento em si
- Dados públicos do certificado digital assinado
- O conteúdo da assinatura produzido
Embora não haja muita rigidez quanto a layOuts de assinatura para JSon, existem alguns padrões de estrutura de documentos em uso que podem ser adotados.
Ou também, você pode criar e documentar o seu layOut. Por exemplo, vejamos esta proposta abaixo:
Neste documento, o “recebedor” terá:
- O conteúdo original da informação (PayLoad)
- O algoritmo usado na assinatura digital, como SHA1, SAH256, etc… (Alg)
- O hash do conteúdo original (DigestValue)
- A assinatura digital calculada (Signature)
- Os dados públicos do Certificado Digital utilizado (Certificate/RawData)
A assinatura digital é produzida através de cálculos (algortimos) feitos sobre o conteúdo original, usando-se a chave privada do Certificado Digital,
*Nota: A chave privada do certificado digital nunca deve ser compartilhada com o "recebedor" o qualquer outro "estranho".
E é muito fácil produzir estas assinaturas com o Magic xpa ou mesmo o Magic xpi, pois existem componentes prontos em Java ou .NET FW, para a execução destes cálculos e manipulação destes certificados.
E nós já mostramos em outras oportunidades aqui no Blog, é muito fácil, rápido e simples a integração e reutilização de componentes existentes entre:
- Magic xpa & Java
- Magic xpa & .NET
- Magic xpi & .NET
- Magic xpi & Java
Veja:
Neste exemplo de aplicação Magic xpa, usamos o recurso da integração nativa com o .NET FW para produzir uma versão assinada de um documento JSon:
e agora este documento pode ser distribuído com a segurança de seu conteúdo garantida.
Validando um Documento Digitalmente Assinado
Claro, assinar é somente metade da diversão. É extremamente importante que o “recebedor” possa validar e atestar a autenticidade do documento quando ele for recebido.
Para isso, ele precisará:
- Conhecer o layOut do documento recebido, para saber onde extrair cada informação
- Ter acesso aquelas informações que mencionamos: “conteúdo original”, “algoritmo usado”, “hash calculado”, “assinatura digital” e os “dados públicos do Certificado Digital”.
Com isso, ele poderá:
- Validar a inviolabilidade do conteúdo original, aplicando algoritmos (cálculos) com a chave pública do Certificado Digital em cima do conteúdo original
- Validar o emissor documento, através das informações públicas do certificado digital (nome, CNPJ, CPF, período de validade, finalidade, etc…).
Tarefas que novamente podemos executar no Magic xpa com muita agilidade:
Conclusão
Embora este post esteja focando em um modelo de documento JSon, esta estrutura atende a qualquer tipo de documento.
Você pode aplicar estas técnicas para assinar PDFs, TXTs, documento do Office (Word, Excel, …) ou qualquer outro tipo de conteúdo que o seu sistema produza ou precise trabalhar com.
E de quebra, explorar o poder de integração que o Magic xpa e Magic xpi tem com o Java e .NET FW.
Outro exemplo:
Se você estiver provendo web services (REST ou SOAP) com o Magic xpa Enterprise Server ou com o Magic xpi, pode usar estes recursos não só para garantir a autenticidade do conteúdo recebido, mas também para validar se vai ou não aceitar o envio deste emissor (consumidor do serviço) em específico.
Baixe deste link este projeto exemplo Magic xpa, usado nesta publicação, e comprove você mesmo.
Fique ligado no Blog MagicBR, para mais dicas.
Para receber os artigos do Blog Magic Brasil em primeira mão no seu email, registre-se aqui