DEV Community

Cover image for Configurando o Keycloak com SSL e integração ao banco de dados PostgreSQL
Jhonathan dos reis
Jhonathan dos reis

Posted on • Edited on

Configurando o Keycloak com SSL e integração ao banco de dados PostgreSQL

Neste guia, você encontrará instruções detalhadas passo a passo para configurar e executar um servidor Keycloak, com suporte completo para SSL direcionado ao host, sem a necessidade de um proxy reverso como o Nginx.


Antecedentes e Escopo

Encontrar informações atualizadas sobre tecnologias em constante evolução, como o Keycloak, pode ser um desafio, mesmo após pesquisar em fóruns, blogs e Stack Overflow. O autor deste artigo relata que não encontrou referências específicas para a versão estável 20.0.5, mas sim apenas para versões antigas. No entanto, após validar as informações contidas na documentação oficial, este artigo foi elaborado para fornecer um guia completo e atualizado sobre como configurar o Keycloak. As instruções foram testadas e comprovadas, garantindo um resultado bem-sucedido ao seguir os passos descritos.

Além das instruções genéricas para configurar o Keycloak, este artigo fornece instruções detalhadas e passo a passo para integrar o SafeNet Keycloak Agent com o servidor Keycloak. Isso inclui o módulo e o tema de login do SafeNet Authentication Service, oferecendo uma solução completa e segura para os usuários.
O objetivo principal dessas instruções é facilitar a configuração e reduzir o tempo necessário para criar uma demonstração, prova de conceito (PoC). Isso é alcançado fornecendo um guia completo e atualizado, com instruções detalhadas e passo a passo, testadas e comprovadas para garantir um resultado bem-sucedido.


Pré-requisitos

Os seguintes pré-requisitos devem ser atendidos para seguir com êxito estas instruções:

Ubuntu 20.04
DNS (FQDN resolvível)
Regras de FW/rede:
22 (SSH)
443 (SSL/TLS)
80 (HTTP)


Geração de certificado com Lets Encrypt

No host do Keycloak Server de destino, execute as seguintes etapas:

1- SSH para o host Keycloak Server

2- Execute o seguinte comando para instalar o Letsencrypt Certbot:

sudo snap install --classic certbot

3- Em seguida, execute o seguinte comando para garantir que o comando certbot agora possa ser executado:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

4- Agora execute o Certbot para iniciar a geração do certificado:

sudo certbot certonly --standalone

Siga as instruções na tela para gerar um certificado SSL/TLS e uma chave privada.

Agora você tem um arquivo fullchain.pem e um privkey.pem para usar com SSL/TLS


Instalar e configurar o Docker

O modelo abaixo apresenta os comandos necessários para instalar a versão mais recente do Docker Engine. Certifique-se de verificar se há atualizações na documentação oficial antes de executar os comandos.

1- Abra um terminal e atualize o índice de pacotes do apt:

sudo apt update

2- Instale o Docker:

sudo apt install docker.io

3- Verifique se o Docker foi instalado corretamente executando o seguinte comando:

docker --version

4- Inicie o serviço do Docker:

sudo systemctl start docker

5- Verifique o status do serviço Docker para garantir que ele esteja em execução:

sudo systemctl status docker

6- (Opcional) Para permitir que o Docker seja iniciado automaticamente na inicialização do sistema, execute o seguinte comando:

sudo systemctl enable docker


Instalar o Docker Compose

Como etapa final da instalação/configuração do Docker, instalamos o Docker Compose.

1- Verifique se o Docker está instalado e em execução. Você pode verificar isso executando o seguinte comando:

sudo docker version

2- Faça o download da versão mais recente do Docker Compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

3- Defina as permissões de execução para o binário do Docker Compose:

sudo chmod +x /usr/local/bin/docker-compose

4- Verifique se a instalação foi bem-sucedida executando o seguinte comando:

docker-compose --version

5- Para iniciar o Docker Compose, execute o seguinte comando:

sudo systemctl start docker-compose

6- Para habilitar o Docker Compose na inicialização do sistema, execute o seguinte comando:

sudo systemctl enable docker-compose

7- Para verificar o status do Docker Compose, execute o seguinte comando:

sudo systemctl status docker-compose


Pré-configuração do servidor Keycloak

Após gerar os certificados e instalar e verificar o Docker, o próximo passo é mover ou manter os arquivos de certificado e outras configurações adicionais, como o tema SafeNet ou um tema personalizado, além de quaisquer plug-ins ou módulos, para os diretórios apropriados onde possam ser acessados ​​quando a solução for executada.

1- Copie os .pem arquivos de certificado para um local onde possam ser lidos pelo Docker/Docker-Compose (observe o exemplo abaixo)

2- Defina e teste as permissões para o arquivo acima para garantir que eles possam ser acessados:

sudo chmod 655 ./certs/*


Exemplos de arquivos e estrutura de arquivos

Aqui está um exemplo de estrutura de arquivo que mostra a localização dos arquivos de certificado fullchain.pem, chave privkey.pem, um módulo personalizado SafeNetOtpRealm.json e um tema personalizado sas-login-ui. Esta estrutura de arquivo pode ser usada no arquivo de arquivo Docker Compose compartilhado com este repositório ou em outros casos semelhantes:

.
├── certs
│   ├── fullchain.pem
│   └── privkey.pem
├── keycloak.yml
└── safenet
    ├── SafeNetOtpRealm.json
    └── sas-login-ui
Enter fullscreen mode Exit fullscreen mode

O Lets Encrypt não deve ser renomeado ou convertido para .crt!


Aqui está um exemplo de arquivo do Docker Compose

version: '3.7'

services:
  keycloak:
    container_name: keycloak
    image: quay.io/keycloak/keycloak:20.0.5 ou latest
    restart: always
    ports:
      - 8080:8080
      - 8443:8443
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
      - KEYCLOAK_IMPORT=/tmp/SafeNetOtpRealm.json
      - KEYCLOAK_DEFAULT_THEME=sas-login-ui
      - KC_DB=<banco-de-dados>
      - KC_DB_URL=jdbc:postgresql://<host-do-banco>:<porta>/keycloak
      - KC_DB_USERNAME=<sername-do-banco>
      - KC_DB_PASSWORD=<password-do-banco>
      - KC_HOSTNAME=<host-do-servidor>
      - KC_HTTP_PORT=<porta-http>
      - KC_HTTPS_PORT=<porta-https>
      - KC_HTTPS_CERTIFICATE_FILE=/etc/x509/https/tls.crt
      - KC_HTTPS_CERTIFICATE_KEY_FILE=/etc/x509/https/tls.key
      - JAVA_OPTS_APPEND="-D keycloak.profile.feature.upload_script=enabled"
    volumes:
      - ./safenet/SafeNetOtpRealm.json:/tmp/SafeNetOtpRealm.json
      - ./safenet/sas-login-ui/:/opt/jboss/keycloak/themes/sas-login-ui/
      - ./certs/fullchain.pem:/etc/x509/https/tls.crt
      - ./certs/privkey.pem:/etc/x509/https/tls.key
    command: start-dev
Enter fullscreen mode Exit fullscreen mode

Implantando e testando o servidor Keycloak

Assumindo que os arquivos estejam nos diretórios corretos e as permissões estejam configuradas corretamente, agora você está pronto para executar e testar o serviço!

1- Execute o Docker com Keycloak:

sudo docker-compose -f keycloak.yml up

2- Para verificar se tudo está funcionando, abra um navegador e navegue até o host keycloak usando,

https:// por exemplo https://keycloak.tech.tk

A página principal do Keycloak é exibida sem erros de certificado ✔

Clicar no login do Keycloak do console de administração é exibido com o tema definido (opcional) ✔

Image description

A navegação para o host do Keycloak por HTTPS deve funcionar sem erros ou avisos

Image description

Selecionar para fazer login deve exibir o tema (se usado)

Image description

Painel informando a versão utilizada


Em resumo, a configuração do Keycloak com SSL e integração ao banco de dados PostgreSQL pode ser um processo desafiador, mas seguindo os passos descritos neste artigo, é possível realizar com sucesso. Certificar-se de que todos os arquivos estão nos diretórios corretos e que as permissões adequadas foram definidas é fundamental. Além disso, é importante lembrar que, ao configurar um serviço de autenticação, como o Keycloak, é essencial garantir que ele seja seguro e protegido. Com isso em mente, este artigo ofereceu um guia abrangente e útil para quem deseja configurar o Keycloak com SSL e integração ao banco de dados PostgreSQL. Esperamos que este guia tenha sido útil e que você tenha sucesso em sua configuração!


Apêndice

Nesta seção, examino ferramentas e comandos úteis ao levantar e gerenciar o Keycloak no Docker.

Verificando o log em busca de erros
Se as coisas não estiverem funcionando, verifique o log:

sudo docker logs keycloak -f

Start, Stop e Remove do container
A seguir estão alguns comandos úteis para gerenciar o contêiner keycloak depois de implantado com o Docker.

Start

sudo docker start keycloak

Stop

sudo docker stop keycloak

Remove

sudo docker rm keycloak

Top comments (1)

Collapse
 
gustavo_404 profile image
Gustavo Gabriel

Olá! Gostaria de agradecer pelo conteúdo, eu estava tendo muitas dificuldades com essa configuração e o post me ajudou bastante a resolver os problemas. As explicações foram muito claras e detalhadas, o que facilitou muito a minha vida. Obrigado pelo ótimo trabalho!