Árvore de páginas

DADOS GERAIS

Produto:

TOTVS Varejo Franquias e Redes

Linha de Produto:

Franquias e redes

Segmento:

Varejo

Módulo:

TOTVS PDV OMNISHOP 

Função:Certificado 
País:Brasil
Ticket:
Requisito/Story/Issue (informe o requisito relacionado) :


02. SITUAÇÃO/REQUISITO

Iniciar o PDV Omnishop com certificado não assinado e obter o certificado através do banco de dados. 

03. SOLUÇÃO

Introdução

O PDV Omnishop possui um certificado adquirido pela TOTVS que é distribuído junto a API para garantir a criptografia das informações trafegadas entre o PDV e a API. Esse certificado, todos os anos precisa ser alterado e, anteriormente, necessitava que fosse gerado um novo realease do PDV e da API. Isso era necessário devido ao fato da regra de validação do certificado está associada a assinatura digital fixa em código. Além disso, o certificado necessitava ser instalado na máquina do cliente, isso ocorria via setup do PDV.

Para contornar essa situação, garantir um dinamismo na operação, remover a necessidade de geração de novos releases e gerar uma nova receita para o produto, adotou-se a estratégia de armazenar o certificado no banco de dados PostgreSQL, sem necessidade de instalação do certificado ou fixação de informações em código.

Além disso, para evitar que a operação pare de funcionar com o vencimento de certificado em uso, adotou-se uma inteligência na API para gerar certificados auto-assinados quando o mesmo não possui um certificado válido e, no PDV, uma estratégia para validar a origem dos certificados auto-assinados também foi criada.

Arquitetura

Com a definição do armazenamento do certificado em banco de dados, foi adicionado ao banco de dados do PDV a tabela Certificados, com os seguintes campos:

  • id: inteiro auto incremental;
  • data_cadastro: datetime;
  • data_atualização: datetime;
  • ativo: booleano;
  • dados: byte[];
  • senha: string.

Dessa forma, é armazenado em banco de dados os bytes do certificado e a sua senha criptografada em AES256.

Além do certificado, foi implementado um método de geração de certificado auto-assinado, onde no campo Common Name do certificado, criptografa-se uma mensagem para validar a origem de geração do certificado auto-assinado.

A seguir, é definido o fluxograma do funcionamento da API para seleção do certificado. Onde o certificado existente em banco de dados como ativo é validado, em caso positivo ele será utilizado, em caso contrário será gerado um certificado auto-assinado dinamicamente em tempo de execução. Nessa abordagem, o PDV deverá notificar o usuário nos casos do uso de certificado auto-assinado para que seja realizada alguma ação pelo time responsável pela atualização do certificado, seja suporte TOTVS ou o TI do cliente.


A seguir, é definido o fluxo do PDV para validação do certificado exposto pela API. Inicialmente verifica-se se a data atual está entre as datas de emissão e expiração do certificado, após isso é verificado os possíveis erros do certificado. Se o mesmo apresentar nenhum erro ou apenas erro de endereço de origem diferente do endereço do certificado, esse certificado é considerado válido. Isso ocorre devido ao fato da API ser exposta em endereços de IP ou localhost e o certificado está sempre associado a um DNS. Caso o certificado possua mais erros, nesse caso, por ser auto-assinado, será realizada uma verificação da informação inserida no Common Name do certificado. Pega-se o hash informado no Common Name e é realizada a descriptografia. Através da string descriptografada, é comparada com a mensagem que o PDV espera extrair, se for igual, o certificado auto-assinado será considerado válido, o hash original será armazenado e será exibido no PDV a mensagem de certificado auto-assinado em uso. O armazenamento do hash dos certificados auto-assinados existe para evitar que a cada requisição seja necessário descriptografar a mensagem novamente, nesse caso apenas é comparado se o hash do certificado auto-assinado é igual o hash da validado anteriormente. Esse hash é armazenado apenas em memória, e descartado quando o PDV é fechado.

Abaixo podemos ver a tela do PDV com o aviso do uso de certificado auto-assinado.

Gestão do certificado da API

A gestão para a troca do certificado da API do PDV Omnishop pode ocorrer de várias formas, desde a criação de uma nova migration em código da API, onde o novo certificado fica atrelado a uma nova release da API, ou como um SQL de insert do certificado em banco ou, por fim, via a ferramenta Meu Suporte.

Foi definido como ferramenta oficial para gestão do certificado da API o Meu Suporte, e, através dele, é possível realizar a troca de certificado de duas formas: via client localmente ou via site remotamente. Através do uso do Meu Suporte, é possível criar scripts de validação de certificado em uso e assim gerar relatórios no site sobre a segurança existente nas APIs dos clientes.


Geração de SQL com o certificado

Atualmente, foi criado uma migration com o certificado em uso. O script SQL utilizado nessa migration foi gerado por uma aplicação de console responsável apenas por criar esse arquivo de banco de dados.

04. ASSUNTOS RELACIONADOS

  • Sem rótulos