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.
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.
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:
Private Key: É o trecho do chave que fica entre as seguintes TAGs:
Certificate Chain: Certificate Chain (É opcional, geralmente identificado pelo arquivo intermediate.crt)
É o trecho do chave que fica entre as seguintes TAGs:
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.
Atualizando um Certificate
Para atualizar um certificado já cadastrado basta clicar no botão "refresh" localizado na mesma linha do certificado desejado.
Após isso, uma tela será exibida para confirmar a ação.
Após clicar no botão de "Confirm", será exibida uma tela com os campos do certificate para serem alterados.
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.
Após isso uma tela será exibida para confirmar a ação.
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
Exemplo do certificado na variável de ambiente
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.
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
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
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
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
Realizando o request sem certificado
Testando no navegador
Ao tentar realizar o request pelo navegador neste endereço é apresentado o seguinte erro abaixo:
Para importar o certificado no navegador, abra as configurações -> Certificados. Importe o certificado desta maneira:
Ao tentar abrir novamente o link é possível retornar o esperado:
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!
Comentários
1 comentário
Ficou muito bom este guia, eu também tinha umas dúvidas sobre o SSL 2 Way e agora ficou mais claro.
Por favor, entre para comentar.