Como proteger a comunicação entre backend e Gateway com o Certificates (Two-way SSL)

O que é a feature Certifcate?

É um mecanismo que garante uma comunicação segura via Two-way SSL  entre o gateway e o seu serviço backend.

Cadastro de Certificate

A tela de cadastro de certificado pode ser acessada através do menu Security que fica localizado no lado esquerdo da tela inicial. Ao clicar no menu "Certificates", uma tela para cadastro de certificados será aberta.

mceclip0.png

Para cadastrar um certificado, basta clicar no botão "Create Certificate" representado pelo símbolo "+", então uma tela ficará disponível para preenchimento dos dados.

mceclip1.png

Observação: Certificados do Tipo RSA PKCS#1 não são compatíveis com API Platform, ele deve ser convertido em RSA PKCS#8 para ser importado.

Name: É uma boa prática definir o CN que o certificado representa, para facilitar uma futura consulta / atualização.

Certificate Body: (Geralmente identificado pelo arquivo certificate.crt)
É o trecho do certificado que fica entre as seguintes TAGs:

mceclip2.png

Private Key: É o trecho do chave que fica entre as seguintes TAGs:

mceclip3.png

Certificate Chain: Certificate Chain (É opcional, geralmente identificado pelo arquivo intermediate.crt)
É o trecho do chave que fica entre as seguintes TAGs:

mceclip4.png

Depois de todos os campos preenchidos corretamente clique em "Save" para ser redirecionado para a tela de listagem . Nesta tela é listado todos os certificados, é possível visualizar "Status", "Name", "Domain Name", e "Expiration" do certificado.

mceclip5.png

Atualizando um Certificate

Para atualizar um certificado já cadastrado basta clicar no botão "refresh" localizado na mesma linha do certificado desejado.

mceclip6.png

 Após isso, uma tela será exibida para confirmar a ação.

mceclip0.png

Após clicar no botão de "Confirm", será exibida uma tela com os campos do certificate para serem alterados.

mceclip1.png

Ao atualizar um certificado é necessário enviar um novo "Certificate Body", uma nova "Private Key" e um novo "Certificate chain". No entanto, não é possível realizar as seguintes ações:

Editar o nome ao atualizar o certificado.
Atualizar o certificado sem passar o "certificate Body" e "Private Key".
Atualizar o certificado caso algum dos atributos usados para preencher os campos do certificado no momento da atualização já tenha relação com algum outro certificado cadastrado.

É possível atualizar um certificado que já está em uso.

Deletar um Certificate

A exclusão de um certificado é feita de forma simples através do botão "Delete" representado pelo ícone de lixeira também localizado na mesma linha do certificado desejado.

mceclip2.png

Após isso uma tela será exibida para confirmar a ação.

mceclip3.png

Ao confirmar a ação, o certificado será deletado.

Configurando o Certificado em sua API

Os certificados, assim que cadastrados no menu certificate ficam disponíveis para cadastro dentro do environment nas environments variables  e diretamente no destination da API

 

mceclip1.png

Exemplo do certificado na variável de ambiente

mceclip0.png 

Exemplo do certificado no destination da API

 

Como funciona o processo de validação de certificado

Como podemos ver na ilustração abaixo, com o uso do certificado a comunicação entre o Gateway e o seu serviço será sempre verificada pela validação e confirmação de um certificado, pela parte do gateway e pela parte do Backend.

 

01.png

Como Obter um Certificado? 

O certificado pode ser obtido de duas formas, o Auto assinado e o obtido por uma autoridade certificadora.

Certificado obtido por uma CA

 O certificado obtido por uma autoridade certificadora pode ser comprado de alguns fornecedores disponíveis no mercado, aqui o que basta ser feito é uma busca pelo fornecedor que mais se adeque aos seu padrão e necessidade, onde cada um lhe dará um suporte diferenciado e pode tirar maiores dúvidas na hora de adquirir o seu certificado. 

Certificado auto assinado

Para o certificado auto assinado mostramos um exemplo de como este pode ser feito, porem é importante avaliar a forma e o meio que você deverá utilizar para criar o certificado auto assinado na sua realidade.

Você pode implementar SSL de autenticação bidirecional usando um servidor WEB, neste
exemplo utilizamos um servidor web apache e geramos um certificado auto assinado.

Os certificados auto-assinados exigem mais trabalho a fazer, pois precisa simular uma CA e criar certificados.

Para isso preparamos algumas etapas para gerar este certificado auto-assinado e configurá-los em um server de exemplo.

Primeiro precisamos gerar uma CA de certificado auto-assinado, os valores foram fictícios para este exemplo.

openssl req -newkey rsa:2048 -nodes -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.cer

mceclip2.png


Em seu diretório atual, um arquivo “ca.key” com chave privada de autoridade de certificação (CA) e ca.cer foi gerado com seu certificado auto-assinado.


Próximo passo, precisamos gerar chave SSL privada para o servidor.

openssl genrsa -out server.key 2048


Em seguida, vamos gerar uma Solicitação de Assinatura de Certificado no formato PKCS # 10. Depois que o comando for inserido, solicitaremos um conjunto de valores.

openssl req -new -key server.key -out server.req

mceclip3.png
Em seguida, emitiremos o certificado do servidor com número de série 100 com autoridade de certificado auto-assinado.

openssl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions server -days 365 -outform PEM -out server.cer

Atualmente, se você listar seus arquivos no diretório atual, deverá seguir os arquivos gerados.

O novo arquivo server.key contém a chave privada do servidor e o arquivo server.cer é um certificado em si.

Próximo passo é gerar a chave privada para client SSL

openssl genrsa -out client.key 2048

Para o cliente, pois precisamos gerar uma Solicitação de Assinatura de Certificado.

openssl req -new -key client.key -out client.req

mceclip4.png

Com a Autoridade de Certificação autoassinada que geramos, emitiremos um certificado de cliente com o número de série 101.

openssl x509 -req -in client.req -CA ca.cer -CAkey ca.key -set_serial 101 -extensions client -days 365 -outform PEM -out client.cer

Em seguida, salvaremos a chave privada e o certificado do cliente em um formato PKCS # 12.Esse certificado será protegido por uma senha e essa senha será usada nas seções a seguir para importar o certificado para o cliente HTTPS. Mantivemos a senha como "changeit".

openssl pkcs12 -export -inkey client.key -in client.cer -out client.p12

Em seu servidor terá que importar os seguintes arquivos:

SSLCertificateFile /usr/local/apache2/ssl/server.cer
SSLCertificateKeyFile /usr/local/apache2/ssl/server.key


Testando e validando

Este é um exemplo de curl para testar o certificado. Quando for realizar algum teste troque os conteúdos dos parâmetros --key --cert, contendo o nome dos arquivos correspondentes.

curl -Ivk ​--key​ test.key ​--cert​ test.cer ​https://backend.com.br

mceclip5.png

Realizando o request sem certificado

mceclip6.png
Testando no navegador

Ao tentar realizar o request pelo navegador neste endereço é apresentado o seguinte erro abaixo:

mceclip7.png
Para importar o certificado no navegador, abra as configurações -> Certificados. Importe o certificado desta maneira:

mceclip8.png

Ao tentar abrir novamente o link é possível retornar o esperado:

mceclip9.png

Tendo gerado seu certificado auto assinado e feito a importação corretamente no servidor basta agora configurar o certificado do lado cliente dentro do API Platform e assim suas chamadas estarão ainda mais seguras!

Tem mais dúvidas? Envie uma solicitação

Comentários

  • Avatar
    Douglas Raul de Grande

    Ficou muito bom este guia, eu também tinha umas dúvidas sobre o SSL 2 Way e agora ficou mais claro.

Powered by Zendesk