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
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
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) ✔
A navegação para o host do Keycloak por HTTPS deve funcionar sem erros ou avisos
Selecionar para fazer login deve exibir o tema (se usado)
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)
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!