
Nel contesto moderno della sicurezza applicativa, la gestione centralizzata di utenti, ruoli e autenticazioni è diventata un requisito essenziale per qualsiasi infrastruttura IT.
Keycloak, una potente piattaforma open source sviluppata da Red Hat, offre una soluzione completa per l’Identity and Access Management (IAM), consentendo di implementare con facilità funzioni come Single Sign-On (SSO), autenticazione a più fattori (MFA) e integrazione con provider esterni (LDAP, Active Directory, OpenID Connect, SAML, ecc.).
In questo articolo vedremo passo dopo passo come installare e configurare Keycloak su Ubuntu Server 24.04, partendo dalla preparazione dell’ambiente fino alla messa in funzione del servizio.
L’obiettivo è ottenere un’installazione base ma perfettamente funzionante, pronta per essere integrata con le applicazioni aziendali o i servizi web che necessitano di un sistema di autenticazione sicuro e flessibile.
PREREQUISITI
Utente sudo
Macchina virtuale Ubuntu 24 LTS
PREPARAZIONE DEL SERVER UBUNTU
Assicurarsi che la macchina virtuale Ubuntu sia aggiornata e che siano installati i pacchetti necessari:
|
0 |
sudo apt update && sudo apt upgrade -y sudo apt install -y unzip curl nano wget gnupg2 software-properties-common
|
INSTALLAZIONE DI JAVA
Keycloak richiede Java 17+. Installare OpenJDK 17 con il comando:
|
0 |
sudo apt install -y openjdk-17-jdk
|
Verificare l’installazione:
|
0 |
java -version
|
Dovremmo visualizzare il seguente output:
|
0
1
2
|
openjdk version "17.0.16" 2025-07-15
OpenJDK Runtime Environment (build 17.0.16+8-Ubuntu-0ubuntu124.04.1)
OpenJDK 64-Bit Server VM (build 17.0.16+8-Ubuntu-0ubuntu124.04.1, mixed mode, sharing)
|
INSTALLAZIONE DI POSTGRESQL
Keycloak supporta PostgreSQL, MariaDB e H2 (non consigliato per la produzione). Installaew PostgreSQL con il seguente comando:
|
0 |
sudo apt install -y postgresql postgresql-contrib
|
Avviare e abilitare PostgreSQL con il comando:
|
0 |
sudo systemctl enable --now postgresql
|
Configurare un database per Keycloak accedendo a PostgreSQL con il comando:
|
0 |
sudo -i -u postgres psql
|
All’interno della shell PostgreSQL, eseguire:
|
0
1
2
3
|
CREATE DATABASE keycloak;
CREATE USER keycloak WITH ENCRYPTED PASSWORD 'PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;
GRANT ALL ON SCHEMA public TO keycloak;
|
Consentire a keycloak di usare e creare oggetti nello schema public con i seguenti comandi:
|
0
1
2
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO keycloak;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO keycloak;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO keycloak;
|
Opzionale ma utile per il futuro consentre la creazione di nuove tabelle con i seguenti comandi:
|
0
1
2
|
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO keycloak;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO keycloak;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON FUNCTIONS TO keycloak;
|
Uscire con il comando:
|
0 |
\q |
NOTA BENE: modificare il campo PASSWORD
INSTALLAZIONE DI KEYCLOAK
Prima di effettuare il download collegarsi al seguente link per controllare l’ultima versione di Keycloack disponibile:
https://github.com/keycloak/keycloak
ATTENZIONE: al momento della stesura del seguente articolo l’ultima versione stabile disponibile è la: 26.4.2
Scaricare ed estrarre Keycloak (sostituisci la versione secondo necessità):
|
0 |
sudo wget https://github.com/keycloak/keycloak/releases/download/26.4.2/keycloak-26.4.2.tar.gz && tar -xvzf keycloak-26.4.2.tar.gz
|
Spostare Keycloack con il comando:
|
0 |
sudo mv keycloak-26.4.2 /opt/keycloak
|
Creare un utente del sistema Keycloak dedicato con i seguenti comandi:
|
0
1
|
sudo useradd -r -d /opt/keycloak -s /bin/false keycloak
sudo chown -R keycloak:keycloak /opt/keycloak
|
CONFIGURAZIONE DI KEYCLOACK CON POSTGRESQL
Modificare il file di configurazione di Keycloak con il comando:
|
0 |
sudo nano /opt/keycloak/conf/keycloak.conf
|
Aggiungere il seguente output nel file:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
# DB
db=postgres
db-url=jdbc:postgresql://localhost/keycloak
db-username=keycloak
db-password=PASSWORD
# Hostname pubblico visto dai client/browser
hostname=keycloack.test.lab
# Diciamo a Keycloak che sta dietro a un proxy reverse (nginx)
proxy=edge
# Abilitiamo HTTP plain sul backend locale verso nginx
http-enabled=true
http-port=8080
http-host=127.0.0.1
# Opzionale ma consigliato in prod:
hostname-strict=true
hostname-strict-https=false
|
Salvare ed uscire dal file di configurazione
CREAZIONE DEL SERVIZIO SYSTEMD PER KEYCLOACK
Creare un nuovo file di servizio con il comando:
|
0 |
sudo nano /etc/systemd/system/keycloak.service
|
Aggiungere quanto segue all’interno del file:
|
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[Unit]
Description=Keycloak Server
After=network.target postgresql.service
Wants=postgresql.service
[Service]
User=keycloak
Group=keycloak
Environment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
Environment=KEYCLOAK_ADMIN=admin
Environment=KEYCLOAK_ADMIN_PASSWORD=PASSWORD
ExecStart=/opt/keycloak/bin/kc.sh start --optimized
Restart=always
[Install]
WantedBy=multi-user.target
|
Salvare ed uscire dal file di configurazione
Ricaricare systemd con il comando:
|
0 |
sudo systemctl daemon-reload
|
Abilitare e avviare Keycloak con il comando:
|
0 |
sudo systemctl enable --now keycloak
|
Controllare lo stato del servizio con il comando:
|
0 |
sudo systemctl status keycloak
|
Keycloak dovrebbe ora essere in esecuzione e dovremmo vedere il seguente output:
|
0
1
2
3
4
5
6
7
8
9
|
● keycloak.service - Keycloak Server
Loaded: loaded (/etc/systemd/system/keycloak.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-10-27 15:01:21 CET; 144ms ago
Main PID: 6768 (kc.sh)
Tasks: 20 (limit: 979)
Memory: 21.4M (peak: 21.7M)
CPU: 204ms
CGroup: /system.slice/keycloak.service
├─6768 /bin/sh /opt/keycloak/bin/kc.sh start --optimized
└─6843 /usr/lib/jvm/java-17-openjdk-amd64/bin/java -Djava.util.concurrent.ForkJoinPool.common.threadFactory=io.quarkus.bootstrap.forkjoin.QuarkusForkJoinWorkerThreadFactory -XX:Metaspace>
|
CREAZIONE DELL’UTENTE AMMINISTRATORE
Eseguire il seguente comando per creare un account amministratore:
|
0
1
2
3
4
|
/opt/keycloak/bin/kcadm.sh config credentials \
--server http://127.0.0.1:8080 \
--realm master \
--user admin \
--password PASSWORD
|
Sostituire admin e PASSWORD con il nome utente e la password desiderati.
Se è andato tutto a buon fine dovremmo visualizzare il seguente output:
|
0 |
Logging into http://127.0.0.1:8080 as user admin of realm master
|
CONFIGURAZIONE DI NGINX COME REVERSE PROXY
Di default Keycloack espone HTTP in chiaro sulla porta 8080. In produzione è meglio metterlo dietro Nginx.
Installare Nginx con il comando:
|
0 |
sudo apt install -y nginx
|
Creare un host Nginx per keycloack.test.lab (sostituire col dominio corretto):
|
0 |
sudo nano /etc/nginx/sites-available/keycloack.conf
|
Contenuto base HTTP (senza TLS ancora):
|
0
1
2
3
4
5
6
7
8
9
10
11
12
|
server {
listen 80;
server_name itnt2vdlrafch02.npo-torino.lab;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Port $server_port;
}
}
|
Abilitare il sito e ricarice Nginx con i comandi:
|
0
1
2
|
sudo ln -s /etc/nginx/sites-available/keycloack.conf /etc/nginx/sites-enabled/keycloack.conf
sudo nginx -t
sudo systemctl reload nginx
|
ACCESSO ALL’INTERFACCIA WEB
Aprire un browser e richiamare il link:
http://IP-DEL-SERVER-O-FQDN
Inserire le credenziali censite in precedenza quindi cliccare Sign In
Dovremmo visualizzare il pannello di controllo di Keycloack
Nella barra in alto dovremmo visualizzare il seguente Alert: You are logged in as a temporary admin user. To harden security, create a permanent admin account and delete the temporary one.
Procedere come mostrato di seguito per creare un utente amministratore definitivo
Cliccare dal Menù di sinistra User quindi Add User
Inserire tutte le info del nuovo utente Administrator quindi cliccare Create
Cliccare su Credentials
Cliccare su Set Password
Inserire la password quindi cliccare Save
Cliccare Save Password
Dovremmo visualizzare una schermata come quella sovrastante
Fare logoff ed accedere con il nuovo utente appena creato
Dopo l’inserimento della password dovrebbe chiedere di cambiare la password per attivare l’account. Cliccare Submit
A questo punto dovremmo visualizzare il cruscotto di Keycloack senza il warning nella barra in alto.
Adesso è possibile utilizzare Keycloack…
CONSIDERAZIONI FINALI SU KEYCLOACK
Keycloak si conferma una delle soluzioni open source più complete e mature per la gestione centralizzata di identità e accessi. La sua architettura moderna, basata su standard aperti come OpenID Connect, OAuth 2.0 e SAML 2.0, lo rende estremamente flessibile e facilmente integrabile con una vasta gamma di applicazioni, sia on-premise che in cloud.
Tuttavia, come ogni piattaforma enterprise, presenta aspetti da valutare attentamente in base al contesto d’uso.
✅ Pro
Open Source e gratuito: nessun costo di licenza, con una community attiva e costanti aggiornamenti.
Supporto a più protocolli di autenticazione (OIDC, SAML, Kerberos, LDAP, Active Directory).
Gestione centralizzata degli utenti e dei ruoli, con console amministrativa intuitiva e API ben documentate.
Funzionalità avanzate come MFA, federazione di identità, login social e SSO.
Integrazione semplice con applicazioni Java, Spring Boot, Node.js e molte altre.
Scalabilità: può essere eseguito in cluster e container (Docker, Kubernetes) per ambienti enterprise.
⚠️ Contro
Curva di apprendimento non banale: le numerose opzioni e concetti (realm, client, scope, policy) possono disorientare chi inizia.
Consumo di risorse relativamente elevato rispetto a soluzioni più leggere o dedicate a singole app.
Aggiornamenti frequenti che talvolta introducono cambiamenti significativi (specie tra major release).
Mancanza di un supporto ufficiale diretto, a meno di adottare la versione commerciale Red Hat Single Sign-On (RH-SSO).
Configurazione iniziale più complessa in ambienti di produzione (database esterno, reverse proxy, TLS, clustering).
✅ In Sintesi
Keycloak è una piattaforma potente, sicura e flessibile, ideale per chi desidera gestire in modo centralizzato autenticazione e autorizzazione di più servizi.
Richiede un po’ di tempo per essere compreso a fondo e ottimizzato, ma una volta configurato correttamente diventa un pilastro affidabile per l’infrastruttura di sicurezza di qualunque organizzazione, dalle piccole realtà ai grandi ambienti enterprise.

0 commenti