Configurando o Keycloak com SSL e integração ao banco de dados PostgreSQL
Published: 2023-04-14 23:50:25


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) ✔


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ja5dbl3g4rhrs7ps3569.png)

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


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4x5m75crct4jwm8p24ng.png)

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


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3n5jlyazwkzxvdhopuvt.png)

`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`