Autenticação
A autenticação para emissão do certificado utilizará o protocolo HMAC para envio de mensagens JSON. Objetivo: permitir a comunicação entre um Cliente e o Servidor com segurança.
Nonce
O número nonce deve ser composto por uma parte pseudoaleatória com 4 (quatro) números concatenada com o timestamp (Unix Timestamp sem microssegundos).
O Servidor sempre irá verificar se o nonce1 enviado pelo Cliente na requisição está dentro de uma margem de tolerância em relação ao relógio do Servidor. Se o timestamp do nonce1 estiver fora dessa margem o Servidor irá recusá-lo e enviar uma mensagem de erro NONCE fora do intervalo esperado.
O Cliente também deve verificar se o nonce2 enviado pelo Servidor na resposta da requisição está dentro da margem de tolerância. No nonce1 27031597863865, por exemplo, 2703 é a parte pseudoaleatória e 1597863865 é o UNIX timestamp (19 de Agosto de 2020 19:04:25 UTC/GMT).
HMAC
O protocolo HMAC prevê comunicação sem sessão para mensagens imunes a ataques de replay (valida-dados-emissao e recuperar-certificado) e comunicação com sessão para transações sensíveis a ataque de replay (emitir-certificado).
O Servidor define o algoritmo de hash H() a ser utilizado para cálculo do HMAC. Recomendamos SHA256 ou superior.
Cliente e Servidor devem utilizar a mesma chave keypara cálculo do HMAC. Essa chave deve ter tamanho e entropia suficiente para desestimular ataques de força bruta e de dicionário.
A key utilizada será a senha de emissão do Certificado Digital. Senha na qual o cliente cadastrou no momento da solicitação do certificado.
O hmac de cada mensagem é calculado da seguinte forma:
H(): algoritmo de hashhkey: chave utilizada para o cálculo||: concatenação de stringsm: mensagem
A chave hkey é definida de três formas diferentes:
nonce1: Nonce enviado pelo Clientekey: Senha de emissão do Certificado
Essa primeira forma é utilizada para mensagens sem sessão e para a mensagem de abertura de sessão enviada pelo Cliente.
nonce1: Nonce enviado pelo Clientekey: Senha de emissão do Certificadononce2: Nonce enviado pelo Servidor
Essa segunda forma é utilizada somente para a mensagem de confirmação de abertura de sessão enviada pelo Servidor.
nonce1: Nonce enviado pelo Clientekey: Senha de emissão do Certificadoc: Contador de mensagemnonce2: Nonce enviado pelo Servidor
Essa terceira forma é utilizada em todas as mensagens após a abertura de sessão e considera a numeração das mensagens. O Servidor ao responder à mensagem 1, terá c também definido como 1.
Mensagens em JSON
Por questões de compatibilidade, a mensagem JSON deve obedecer aos seguintes critérios:
Não deve conter espaços desnecessários (por exemplo, espaços e quebras de linha entre os elementos do JSON).
Os nomes/descritores dos elementos devem estar entre aspas duplas.
Os valores dos elementos também devem estar entre aspas duplas.
Apenas valores numéricos (inteiros ou de ponto flutuante) podem estar sem as aspas duplas.
HMAC sem sessão
Para serviços sem sessão, o fluxo será:
Requisição: O Cliente envia por POST para a URL do serviço os seguintes campos:
mensagem: mensagem JSON para o Servidorhmac: HMAC calculado pelo Clientenonce1: Nonce gerado pelo Cliente
Resposta: O Servidor gera como resposta um JSON com dois elementos:
mensagem: resposta JSON para o Clientehmac: HMAC calculado pelo Servidor
Se ocorrer algum erro, a mensagem gerada pelo servidor será um JSON com apenas o elemento erro, que por sua vez terá dois elementos: codigo (código do erro) e mensagem (descrição do erro). O hmac será calculado pelo servidor sobre essa mensagem de erro.
Exemplo de comunicação sem sessão
Requisição do Cliente
Exemplo de resposta do Servidor
Resposta válida
Resposta de erro
HMAC com sessão
O Cliente deve iniciar a sessão através de uma comunicação hmac sem sessão. O Servidor enviará na confirmação de abertura de sessão um ou mais cookies de identificação da sessão. O Cliente deve enviar esses cookies em todas as requisições da sessão.
Na abertura da sessão o Cliente enviará o nonce1, e o Servidor enviará na confirmação de abertura de sessão o nonce2. Cliente e o Servidor usarão esses mesmos nonce1 e nonce2 para calcular o hmac de todas mensagens posteriores à abertura da sessão.
Na comunicação hmac com sessão, as mensagens são numeradas. A primeira mensagem enviada pelo Cliente ao Servidor após a abertura da sessão é a mensagem número 1. Cliente e Servidor devem manter a contagem das mensagens, mas sem transmitir o número da mensagem.
O fluxo de mensagens com sessão será:
Requisição de abertura de sessão: O Cliente envia por POST para a URL do serviço os seguintes campos:
mensagem:{"session":"Sinerg_HMAC_Session_Request"}hmac: HMAC calculado pelo Clientenonce1: Nonce gerado pelo Cliente
Resposta de abertura de sessão: O Servidor gera como resposta um JSON com três elementos:
mensagem:{"session":"Sinerg_HMAC_Session_Response"}hmac: HMAC calculado pelo Servidornonce2: Nonce gerado pelo Servidor
Requisição #1: O Cliente envia por POST para a URL do serviço :
mensagem: mensagem JSON para o Servidorhmac: HMAC calculado pelo Clientenonce1: Nonce gerado pelo Cliente
Resposta #1: O Servidor gera como resposta um JSON com dois elementos:
mensagem: resposta JSON para o clientehmac: HMAC calculado pelo Servidor
Requisição #n: O Cliente envia por POST para a URL do serviço :
mensagem: mensagem JSON para o Servidorhmac: HMAC calculado pelo Clientenonce1: Nonce gerado pelo Cliente
Resposta #n: O Servidor gera como resposta um JSON com dois elementos:
mensagem: resposta JSON para o Clientehmac: HMAC calculado pelo Servidor
Após a abertura de sessão o Servidor enviará os cookies de identificação de sessão, eles devem ser enviados a cada requisição.
Exemplo de comunicação com sessão
Requisição do Cliente
Servidor confirma abertura de sessão
Cookie enviado pelo Servidor: PHPSESSID=4ca595a215510028bbf48dd9ad29f24e
Cliente envia requisição #1
Cookie enviado pelo Cliente: PHPSESSID=4ca595a215510028bbf48dd9ad29f24e
Serviços auxiliaresServidor responde à requisição #1
Last updated
Was this helpful?