Skip to content

Latest commit

 

History

History
739 lines (597 loc) · 28.9 KB

File metadata and controls

739 lines (597 loc) · 28.9 KB

Comprendere i Certificati per Principianti

🎈 Benvenuto nel Mondo dei Certificati!

Immagina di avere 10 anni e vuoi capire cosa sono i certificati e come funzionano. Pensa ai certificati come a carte d'identità speciali per computer e siti web che dimostrano che sono ciò che dicono di essere!

🏠 Cosa Sono i Certificati? (La Storia Semplice)

🎭 L'Analogia del Teatro

Pensa a Internet come a un grande teatro dove tutti indossano maschere. Come fai a sapere se qualcuno è davvero chi dice di essere?

I certificati sono come badge di identificazione speciali che dimostrano l'identità:

  • 🎫 Il tuo biglietto = Il tuo computer/telefono
  • 🏛️ La sicurezza del teatro = Autorità di Certificazione (CA)
  • 🎭 Attori sul palco = Siti web e server
  • 🆔 Badge ID ufficiali = Certificati digitali

Proprio come una guardia di sicurezza al teatro controlla i badge ID, il tuo computer controlla i certificati per assicurarsi che i siti web siano reali e sicuri!

🔧 Cosa Fa il Nostro Script create-certificates.bat?

Il nostro script è come una fabbrica di certificati che crea diversi tipi di badge di identificazione per il nostro sistema. Vediamo cosa produce!

📋 Processo Passo dopo Passo

🏭 Passaggio 1: Configurazione della Fabbrica

# Lo script verifica prima se ha gli strumenti giusti:
- OpenSSL (macchina per creare certificati)
- Java keytool (assistente certificati Android)
- certificates.conf (libro di ricette con tutte le impostazioni)

🏛️ Passaggio 2: Creazione dell'Autorità di Certificazione (CA)

Cos'è una CA? Pensala come l'"Ufficio Badge ID" di cui tutti si fidano (wms_ca.crt e wms_ca.key).

File Creati:

  • wms_ca.key (2048 bit) - La Chiave Maestra 🗝️
  • wms_ca.crt (3650 giorni = 10 anni) - Il Badge ID Maestro 🆔

Cosa succede:

# Passaggio 2a: Crea una chiave maestra super-segreta
openssl genrsa -aes256 -passout pass:wms_ca_password_2024 -out wms_ca.key 2048
# Crea: wms_ca.key (file chiave privata)
# Perché: Abbiamo bisogno di una chiave segreta per firmare i certificati in seguito

# Passaggio 2b: Crea il certificato maestro
openssl req -new -x509 -days 3650 -key wms_ca.key -out wms_ca.crt
# Richiede: wms_ca.key (creato nel passaggio 2a)
# Crea: wms_ca.crt (certificato pubblico)
# Perché abbiamo bisogno di wms_ca.key: Per dimostrare che possediamo questo certificato e possiamo firmarne altri

Dettagli Tecnici:

  • Dimensione Chiave: 2048 bit (sicurezza molto forte, come una serratura super-complicata)
  • Algoritmo: RSA con crittografia AES-256 (il tipo di serratura più forte)
  • Validità: 10 anni (quanto tempo l'ufficio badge rimane aperto)
  • Protetto da Password: Sì (necessita di una password segreta per usarlo)

🌐 Passaggio 3: Creazione del Certificato del Server Web

Cos'è questo? Il badge ID speciale per il nostro sito web (wms.crt) così i browser si fidano di esso.

File Creati:

  • wms.key (2048 bit) - Chiave Privata del Sito Web 🔐
  • wms.csr - Modulo Richiesta Certificato 📝
  • wms.crt (365 giorni = 1 anno) - Badge ID del Sito Web 🌐
  • wms.conf - Istruzioni Speciali 📋

Cosa succede:

# Passaggio 3a: Crea la chiave privata del sito web
openssl genrsa -aes256 -passout pass:wms_server_password_2024 -out wms.key 2048
# Crea: wms.key (chiave privata del server)
# Perché: Il server ha bisogno della propria chiave segreta, separata dalla CA

# Passaggio 3b: Crea una richiesta per un badge ID
openssl req -new -key wms.key -out wms.csr -config wms.conf
# Richiede: wms.key (creato nel passaggio 3a) + wms.conf (file di configurazione)
# Crea: wms.csr (richiesta di firma certificato)
# Perché abbiamo bisogno di wms.key: Per dimostrare che controlliamo la chiave privata del server
# Perché abbiamo bisogno di wms.conf: Contiene i dettagli del server e le estensioni di sicurezza

# Passaggio 3c: La CA timbra la richiesta e crea il badge ufficiale
openssl x509 -req -in wms.csr -CA wms_ca.crt -CAkey wms_ca.key -out wms.crt
# Richiede: wms.csr (dal passaggio 3b) + wms_ca.crt (dal passaggio 2) + wms_ca.key (dal passaggio 2)
# Crea: wms.crt (certificato server firmato)
# Perché abbiamo bisogno di wms.csr: Contiene la chiave pubblica del server e le informazioni di identità
# Perché abbiamo bisogno di wms_ca.crt: Mostra chi sta firmando il certificato
# Perché abbiamo bisogno di wms_ca.key: Dimostra che siamo la CA legittima e possiamo firmare certificati

Caratteristiche Speciali (Subject Alternative Names):

  • Può funzionare con: localhost, wms.local, *.wms.local
  • Può funzionare con IP: 127.0.0.1, 192.168.1.188, ::1
  • Perché? Così lo stesso certificato funziona da indirizzi diversi!

📱 Passaggio 4: Creazione dei Certificati CA Specifici per Piattaforma

Cos'è questo? Creazione di versioni speciali del nostro certificato CA che Windows e Android possono accettare come se fossero vere Autorità di Certificazione come VeriSign o DigiCert!

La Trasformazione Magica: Il nostro script prende il certificato CA principale (wms_ca.crt) e crea versioni specifiche per piattaforma che ogni sistema operativo riconosce e di cui si fida.

🪟 Creazione Certificato CA Windows

File Creati per Windows:

  • wms_ca.crt - Certificato CA X.509 Standard 🏛️

Cosa lo rende speciale per Windows:

# Il certificato CA ha questi attributi compatibili con Windows:
Subject: /C=US/ST=NewYork/L=NewYork/O=WMSRootCA/OU=CertificateAuthority/CN=WMSRootCA
Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign
Validity: 10 anni (3650 giorni)

Come Windows lo riconosce come una vera CA:

  1. Formato X.509 standard - Windows lo comprende perfettamente
  2. Flag CA:TRUE - Dice a Windows "Posso firmare altri certificati"
  3. Uso Certificate Sign - Permesso di agire come Autorità di Certificazione
  4. Installazione nel negozio radice - Quando installato in "Autorità di certificazione radice attendibili"

La Magia Windows:

Quando installi wms_ca.crt nel negozio radice attendibile Windows:
✅ Windows lo tratta esattamente come VeriSign, DigiCert, o qualsiasi CA commerciale
✅ Qualsiasi certificato firmato da questa CA viene automaticamente considerato attendibile
✅ I browser (Chrome, Edge, Firefox) si fidano automaticamente
✅ Tutte le applicazioni Windows si fidano automaticamente

📱 Creazione Certificato CA Android

File Creati per Android:

  • android_ca_system.pem - Certificato archivio utente Android 📱
  • [hash].0 (come a1b2c3d4.0) - Certificato archivio sistema Android 🔒

Passaggio 4a: Creazione di android_ca_system.pem

# Semplicemente copiare il certificato CA con un nome compatibile Android
copy "wms_ca.crt" android_ca_system.pem
# Richiede: wms_ca.crt (dal passaggio 2)
# Crea: android_ca_system.pem (copia identica con nome diverso)
# Perché abbiamo bisogno di wms_ca.crt: Questo è il nostro certificato CA di cui Android deve fidarsi

Cosa rende android_ca_system.pem speciale:

  • Formato PEM - Formato testo preferito da Android (android_ca_system.pem)
  • Nome file descrittivo - Aiuta gli utenti a identificarlo durante l'installazione (android_ca_system.pem)
  • Stesso contenuto di wms_ca.crt - Solo rinominato per chiarezza

Passaggio 4b: Creazione del certificato con nome hash

# Ottieni l'hash unico del certificato
for /f %%i in ('openssl x509 -noout -hash -in "wms_ca.crt"') do set CERT_HASH=%%i
# Richiede: wms_ca.crt (dal passaggio 2)
# Perché: Il sistema Android deve calcolare l'hash per creare il nome file appropriato

# Copia il certificato con il nome file hash (come a1b2c3d4.0)
copy "wms_ca.crt" "%CERT_HASH%.0"
# Richiede: wms_ca.crt (dal passaggio 2) + CERT_HASH (calcolato sopra)
# Crea: [hash].0 (come a1b2c3d4.0)
# Perché abbiamo bisogno di wms_ca.crt: Stesso contenuto del certificato, solo rinominato per l'archivio sistema Android

Perché questo nome file hash strano?

  • Requisito del sistema Android - I certificati di sistema devono essere nominati con il loro hash
  • Identificazione unica - L'hash garantisce che non ci siano conflitti di nomi file
  • Riconoscimento automatico - Android carica automaticamente tutti i file .0 nella directory dei certificati di sistema
  • Ricerca veloce - Android può trovare rapidamente i certificati per hash

La Magia Android:

Installazione nell'Archivio Utente (android_ca_system.pem):

Quando installato nell'archivio certificati utente Android:
✅ La maggior parte delle app si fiderà (se configurate per fidarsi dei certificati utente)
✅ Installazione facile tramite Impostazioni
✅ L'utente può rimuoverlo in qualsiasi momento
❌ Alcune app focalizzate sulla sicurezza ignorano i certificati utente

### ⛓️ Creazione del File Catena Certificati

**File Creati:**
- `wms_chain.crt` - **Catena certificati completa** ⛓️

**Cosa succede:**
```bash
# Combina certificato server + certificato CA
copy "wms.crt" + "wms_ca.crt" wms_chain.crt
# Richiede: wms.crt (dal passaggio 3) + wms_ca.crt (dal passaggio 2)
# Crea: wms_chain.crt (catena certificati combinata)
# Perché abbiamo bisogno di wms.crt: Il certificato del server (fine della catena)
# Perché abbiamo bisogno di wms_ca.crt: Il certificato CA (radice della catena)
# Perché combinare: I browser hanno bisogno della catena completa per verificare la fiducia

Perché è necessario:

  • Percorso fiducia completo - Mostra la catena completa dal server alla radice attendibile (wms_chain.crt)
  • Convalida più veloce - I client non devono recuperare i certificati mancanti (wms_chain.crt)
  • Migliore compatibilità - Alcuni client richiedono la catena completa (wms_chain.crt)
  • Ottimizzazione Apache - Il server web può inviare la catena completa immediatamente (wms_chain.crt)

📂 Inventario Completo dei File: Cosa Crea il Nostro Script

Diamo un'occhiata a OGNI file che il nostro script di certificati crea e capiamo cosa fa ciascuno!

🗂️ Tutti i File Creati da create-certificates.bat

File Dimensione Scopo Piattaforma Mantenere Segreto?
wms_ca.key ~1.7KB Chiave privata CA Entrambe 🔴 TOP SECRET
wms_ca.crt ~1.3KB Certificato CA Entrambe 🟢 Condividi liberamente
wms.key ~1.7KB Chiave privata server Windows 🔴 Mantieni segreto
wms.csr ~1KB Richiesta certificato Entrambe 🟡 Puoi eliminare dopo
wms.crt ~1.3KB Certificato server Windows 🟢 Condividi liberamente
wms.conf ~500B Config OpenSSL Entrambe 🟡 Puoi eliminare dopo
android_ca_system.pem ~1.3KB CA utente Android Android 🟢 Condividi liberamente
[hash].0 ~1.3KB CA sistema Android Android 🟢 Condividi liberamente
wms_chain.crt ~2.6KB Catena completa Windows 🟢 Condividi liberamente

🔍 Analisi Dettagliata dei File

🗝️ wms_ca.key (La Chiave Segreta Maestra)

Cos'è:

-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQ...
...
-----END ENCRYPTED PRIVATE KEY-----

Dettagli Tecnici:

  • Formato: Chiave privata RSA codificata PEM, crittografata AES-256
  • Dimensione Chiave: 2048 bit (256 byte di materiale chiave)
  • Crittografia: AES-256-CBC con derivazione chiave PBKDF2
  • Password: wms_ca_password_2024 (dal file di configurazione)
  • Scopo: Firma altri certificati per renderli attendibili

Perché è TOP SECRET:

  • Chiunque abbia questa chiave può creare certificati attendibili (wms_ca.key)
  • Potrebbe impersonare qualsiasi sito web se ce l'ha (wms_ca.key)
  • Come avere la chiave maestra per creare false carte d'identità (wms_ca.key)
  • Conserva in una cassaforte, non condividere mai, non perdere mai! (wms_ca.key)

🆔 wms_ca.crt (Il Certificato Maestro)

Cos'è:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Dettagli Tecnici:

  • Formato: Certificato X.509 codificato PEM
  • Validità: 10 anni (3650 giorni)
  • Numero di Serie: Identificatore unico generato casualmente
  • Algoritmo di Firma: SHA-256 con RSA
  • Chiave Pubblica: Chiave pubblica RSA 2048 bit (corrisponde alla chiave privata)

Campi del Certificato:

Subject: C=US, ST=New York, L=New York, O=WMS Root CA, OU=Certificate Authority, CN=WMS Root CA
Issuer: C=US, ST=New York, L=New York, O=WMS Root CA, OU=Certificate Authority, CN=WMS Root CA
(Auto-firmato: Subject = Issuer)

Estensioni:

Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign
Subject Key Identifier: [hash unico]
Authority Key Identifier: [identico al Subject Key ID - auto-firmato]

Perché è condivisibile:

  • Contiene solo informazioni pubbliche (wms_ca.crt)
  • Mostra la chiave pubblica, non la chiave privata (wms_ca.crt)
  • Come mostrare la propria carta d'identità a qualcuno - sicuro da condividere (wms_ca.crt)
  • I client hanno bisogno di questo per verificare i certificati che firmi (wms_ca.crt)

🔐 wms.key (Chiave Privata del Server)

Cos'è:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8...
...
-----END PRIVATE KEY-----

Dettagli Tecnici:

  • Formato: Chiave privata RSA codificata PEM (non crittografata dopo l'elaborazione dello script)
  • Dimensione Chiave: 2048 bit
  • Originariamente Crittografata: Sì, ma passphrase rimossa per Apache
  • Scopo: Dimostra che il server è chi dice di essere

Il Processo di Rimozione della Passphrase:

# Originale: chiave crittografata con password
openssl genrsa -aes256 -passout pass:wms_server_password_2024 -out wms.key 2048
# Crea: wms.key (crittografato con password)

# Dopo: rimuovere la password per Apache (i server non amano digitare password)
openssl rsa -in wms.key -passin pass:wms_server_password_2024 -out wms.key.unencrypted
# Richiede: wms.key (versione crittografata)
# Crea: wms.key.unencrypted (versione senza password)
# Perché abbiamo bisogno della versione crittografata: Per decrittarla e rimuovere la password

Perché mantenerlo segreto:

  • Chiunque abbia questo può impersonare il tuo server (wms.key)
  • Come qualcuno che ruba la chiave di casa tua (wms.key)
  • Solo il tuo server web dovrebbe avere accesso (wms.key)

📋 wms.csr (Richiesta di Firma Certificato)

Cos'è:

-----BEGIN CERTIFICATE REQUEST-----
MIICWjCCAUICAQAwFTETMBEGA1UEAwwKbXlkb21haW4uY29tMIIBIjANBgkqhkiG...
...
-----END CERTIFICATE REQUEST-----

Dettagli Tecnici:

  • Formato: Richiesta certificato PKCS#10 codificata PEM
  • Contiene: Chiave pubblica + informazioni identità + estensioni richieste
  • Scopo: Chiedere alla CA "Per favore fammi un certificato con questi dettagli"

Cosa c'è dentro:

Subject: C=US, ST=New York, L=New York, O=WMS Organization, CN=wms.local
Public Key: [chiave pubblica RSA 2048 bit]
Estensioni Richieste:
  - Subject Alternative Names: localhost, wms.local, *.wms.local, 127.0.0.1, ecc.
  - Key Usage: Digital Signature, Key Encipherment
  - Extended Key Usage: Server Authentication

Può eliminare dopo l'uso:

  • Necessario solo durante la creazione del certificato
  • Come una domanda di lavoro - non più necessaria una volta ottenuto il lavoro
  • Sicuro da eliminare dopo la creazione di wms.crt

🌐 wms.crt (Certificato del Server)

Cos'è:

-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Dettagli Tecnici:

  • Formato: Certificato X.509 codificato PEM
  • Validità: 1 anno (365 giorni)
  • Firmato da: wms_ca.crt (la nostra CA)
  • Scopo: Dimostra l'identità del server wms.local

Campi del Certificato:

Subject: C=US, ST=New York, L=New York, O=WMS Organization, CN=wms.local
Issuer: C=US, ST=New York, L=New York, O=WMS Root CA, CN=WMS Root CA
(Firmato dalla nostra CA, non auto-firmato)

Estensioni Critiche:

Subject Alternative Name:
  DNS:localhost
  DNS:wms.local
  DNS:*.wms.local
  IP:127.0.0.1
  IP:192.168.1.188
  IP:::1
Key Usage: Digital Signature, Key Encipherment
Extended Key Usage: Server Authentication

Perché il SAN è cruciale:

  • I browser verificano se il certificato corrisponde all'URL che stai visitando
  • Senza un SAN appropriato, ottieni avvisi di sicurezza spaventosi
  • Il nostro certificato funziona con più indirizzi

📱 android_ca_system.pem (Certificato Utente Android)

Cos'è:

# Contenuto identico a wms_ca.crt, solo rinominato
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Perché il rinomina:

  • Gli utenti Android si aspettano l'estensione .pem
  • Il nome file descrittivo aiuta durante l'installazione
  • Esattamente lo stesso contenuto di wms_ca.crt
  • Rende ovvio che è per Android

🔒 [hash].0 (Certificato Sistema Android)

Cos'è:

# Stesso contenuto di wms_ca.crt, nome file speciale
# Esempio nome file: a1b2c3d4.0
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJANQ8QgAf7N8pMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV...
...
-----END CERTIFICATE-----

Il Calcolo dell'Hash:

# I certificati di sistema Android devono essere nominati con il loro hash soggetto
openssl x509 -noout -hash -in wms_ca.crt
# Output: a1b2c3d4 (esempio)
# Quindi il nome file diventa: a1b2c3d4.0

Perché questa denominazione:

  • Requisito Android per l'archivio di sistema
  • L'hash previene conflitti di nomi file
  • Android riconosce automaticamente l'estensione .0
  • Consente una ricerca rapida dei certificati per hash

⛓️ wms_chain.crt (Catena Certificati Completa)

Cos'è:

# Certificato server per primo
-----BEGIN CERTIFICATE-----
[contenuto di wms.crt]
-----END CERTIFICATE-----
# Poi certificato CA
-----BEGIN CERTIFICATE-----
[contenuto di wms_ca.crt]
-----END CERTIFICATE-----

Struttura:

Ordine Catena Certificati (importante!):
1. Certificato Entità Finale (wms.crt) - Il certificato del server
2. CA Intermedia (nessuna nel nostro caso)
3. Certificato CA Radice (wms_ca.crt) - Il nostro certificato CA

Perché l'ordine è importante:

  • Deve andare dal certificato server alla CA radice
  • Un ordine sbagliato causa errori di convalida
  • I client seguono la catena anello per anello

🛠️ wms.conf (Configurazione OpenSSL)

Cos'è:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
C = US
ST = New York
# ... altri campi

[v3_req]
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
DNS.2 = wms.local
# ... altre voci

Scopo:

  • Istruzioni per OpenSSL
  • Definisce le estensioni del certificato
  • Specifica i Subject Alternative Names
  • Può essere eliminato dopo la creazione del certificato

📁 Formati File Spiegati (Come Lingue Diverse)

🔤 Formati Certificati

Formato Estensione Cos'è Come...
PEM .pem, .crt, .key Formato testo che puoi leggere Una lettera scritta in italiano
DER .der, .cer Formato binario che i computer amano Una lettera scritta in codice informatico
P12/PFX .p12, .pfx Pacchetto con chiave + certificato Una busta sigillata con ID + chiave dentro
JKS .jks Keystore Java Uno scrigno del tesoro Java
BKS .bks Keystore Android Uno scrigno del tesoro Android

🔐 Informazioni sulle Chiavi

Le Nostre Chiavi Usano:

  • Algoritmo: RSA (il più comune e affidabile)
  • Dimensione Chiave: 2048 bit (molto sicuro, raccomandato dagli esperti)
  • Crittografia: AES-256 (protezione password super forte)

Perché 2048 bit? Pensala come una serratura con 2048 perni diversi. Per forzarla, qualcuno dovrebbe provare 2^2048 combinazioni - è più di tutti gli atomi nell'universo!

🏠 Installazione Certificati Windows

🎯 Comprendere l'Archivio Certificati Windows

Windows ha diversi "scrigni del tesoro" (archivi) per i certificati:

📦 Archivi Certificati

  • Personale 👤 - I tuoi certificati privati (come la tua carta d'identità personale)
  • Autorità di certificazione radice attendibili 🏛️ - Gli uffici badge ID di cui ti fidi
  • Autorità di certificazione intermedie 🏢 - Uffici badge ID ausiliari
  • Autori attendibili ✅ - Produttori di software di cui ti fidi

🔧 Come Installare il Certificato CA su Windows

Metodo 1: Installazione con Doppio Click (Metodo Facile)

1. 📁 Trova il tuo file wms_ca.crt
2. 🖱️ Doppio click su di esso
3. 🛡️ Fai clic su "Installa certificato"
4. 🏪 Scegli "Computer locale" (per tutti gli utenti) o "Utente corrente" (solo per te)
5. 📍 Seleziona "Metti tutti i certificati nel seguente archivio"
6. 🏛️ Sfoglia fino a "Autorità di certificazione radice attendibili"
7. ✅ Fai clic su "OK" e "Fine"

Metodo 2: Riga di Comando (Metodo Avanzato)

# Importa certificato CA nell'archivio radice attendibile
certlm.msc /add wms_ca.crt /store "Root"

# Oppure usando PowerShell
Import-Certificate -FilePath "wms_ca.crt" -CertStoreLocation Cert:\LocalMachine\Root

🏗️ Creazione Catena di Firma Personalizzata su Windows

🎯 Requisiti per Catena CA Personalizzata

Cosa Serve:

  1. Certificato CA Radice - Il capo supremo (il tuo wms_ca.crt)
  2. CA Intermedia (opzionale) - Manager intermedio
  3. Certificato Entità Finale - Il vero lavoratore (il tuo wms.crt)

📋 Creazione Catena Personalizzata Passo dopo Passo

1. Installa CA Radice nell'Archivio Radice Attendibile:

# Deve essere in "Autorità di certificazione radice attendibili"
Import-Certificate -FilePath "wms_ca.crt" -CertStoreLocation Cert:\LocalMachine\Root

2. Installa Certificato Server nell'Archivio Personale:

# Il certificato server va nell'archivio "Personale"
Import-Certificate -FilePath "wms.crt" -CertStoreLocation Cert:\LocalMachine\My

3. Verifica Costruzione Catena:

# Verifica se Windows può costruire la catena
Get-ChildItem Cert:\LocalMachine\My | Where-Object {$_.Subject -like "*wms.local*"}

🔍 Perché Funziona

Convalida Catena Certificati:

[CA Radice] wms_ca.crt (nell'archivio Radice attendibile)
    ↓ firmato da
[Certificato Server] wms.crt (nell'archivio Personale)
    ↓ usato da
[Il Tuo Sito Web] https://wms.local

Windows verifica:

  1. ✅ Il certificato server è firmato da una CA attendibile?
  2. ✅ Il certificato CA è nell'archivio Radice attendibile?
  3. ✅ Le date del certificato sono valide?
  4. ✅ Il certificato corrisponde al nome del sito web?

📱 Installazione Certificati Android

🤖 Comprendere il Sistema Certificati Android

Android ha due livelli di archiviazione certificati:

📱 Archivio Certificati Utente

  • Posizione: Impostazioni > Sicurezza > Crittografia e credenziali
  • Scopo: Le app possono scegliere di fidarsi o meno
  • Sicurezza: Media (le app decidono cosa fare)
  • Facile da Installare: Sì! ✅

🔒 Archivio Certificati Sistema

  • Posizione: /system/etc/security/cacerts/
  • Scopo: TUTTE le app si fidano automaticamente
  • Sicurezza: Alta (fiducia automatica per tutto)
  • Facile da Installare: No, richiede accesso root 🔴

🎯 Installazione Certificato Utente (Facile)

📋 Processo Passo dopo Passo

1. 📂 Copia android_ca_system.pem sul tuo telefono
2. 📱 Vai in Impostazioni > Sicurezza > Crittografia e credenziali
3. 📥 Tocca "Installa da archiviazione" o "Installa certificato"
4. 📁 Trova e seleziona android_ca_system.pem
5. 🏷️ Dagli un nome come "WMS CA"
6. 🔒 Scegli "Certificato CA" quando richiesto
7. ✅ Inserisci il blocco schermo (PIN/password/segno)

⚠️ Comportamento Importante di Android

Modifiche Sicurezza Android 7+:

  • Le app che mirano all'API 24+ ignorano i certificati utente per impostazione predefinita
  • Soluzione: L'app deve fidarsi esplicitamente dei certificati utente
  • La nostra app: Già configurata per fidarsi dei certificati utente! ✅

🏗️ Creazione Catena di Firma Personalizzata su Android

🎯 Requisiti Catena Android

Cosa Serve ad Android:

  1. CA Radice nell'archivio certificati (utente o sistema)
  2. Catena certificati completa nella risposta del server
  3. Estensioni certificato appropriate (Critico!)
  4. Corrispondenza hostname valida

📋 Estensioni Certificato Necessarie

Il Certificato CA Radice Deve Avere:

Basic Constraints: CA:TRUE (Critical)
Key Usage: Certificate Sign, CRL Sign

Il Certificato Server Deve Avere:

Basic Constraints: CA:FALSE
Key Usage: Digital Signature, Key Encipherment
Extended Key Usage: Server Authentication
Subject Alternative Name: Nomi DNS e IP

🔍 Perché Android È Esigente

Processo di Convalida Android:

1. 📱 L'app si connette a https://wms.local
2. 🔍 Il server invia la catena certificati: [wms.crt + wms_ca.crt]
3. 🔎 Android verifica: wms_ca.crt è nel mio archivio attendibile?
4. ✅ Trovato nell'archivio utente? Verifica se l'app si fida dei certificati utente
5. ✅ Trovato nell'archivio sistema? Fiducia automatica
6. 🏷️ Verifica: wms.crt corrisponde all'hostname "wms.local"?
7. 📅 Verifica: I certificati sono ancora validi (non scaduti)?
8. 🔐 Verifica: Sono presenti tutte le estensioni richieste?
9. ✅ Tutto bene? Connessione consentita!

🔍 Risoluzione Problemi Comuni

❌ Problemi Comuni Windows

Problema: "Impossibile costruire la catena di certificati" Soluzione: Installa il certificato CA nell'archivio Radice attendibile, non nell'archivio Personale

Problema: "Mancata corrispondenza nome certificato" Soluzione: Aggiungi il nome del tuo server ai Subject Alternative Names (SAN)

Problema: "Certificato scaduto" Soluzione: Verifica data/ora di sistema e date validità certificato

❌ Problemi Comuni Android

Problema: "Certificato non attendibile" Soluzione: Installa il certificato CA correttamente e assicurati che l'app si fidi dei certificati utente

Problema: "Verifica hostname fallita" Soluzione: Assicurati che il SAN del certificato includa l'IP/hostname del tuo server

Problema: "L'app ignora i certificati utente" Soluzione: L'app deve essere configurata per fidarsi dei certificati utente (la nostra lo è!)

🎓 Riepilogo: Cosa Abbiamo Imparato

🏆 Concetti Chiave

  • Certificati = Badge ID digitali che dimostrano l'identità
  • Autorità di Certificazione = Ufficio badge ID attendibile che firma certificati
  • Chiave Privata = Chiave segreta che solo tu hai
  • Certificato Pubblico = Badge ID che tutti possono vedere
  • Catena Certificati = Catena di fiducia dalla CA radice al tuo certificato

📂 File Creati dal Nostro Script

  1. wms_ca.key - Chiave maestra segreta (tienila MOLTO al sicuro!)
  2. wms_ca.crt - Certificato maestro pubblico (condividi con i client)
  3. wms.key - Chiave segreta del server (tienila al sicuro!)
  4. wms.crt - Certificato pubblico del server (Apache lo usa)
  5. android_ca_system.pem - Certificato CA compatibile Android
  6. [hash].0 - Certificato Android livello sistema
  7. wms_chain.crt - Catena certificati completa

🛡️ Migliori Pratiche di Sicurezza

  • Tieni segrete le chiavi private (file .key) - Non condividerle mai!
  • Usa password forti - Il nostro script usa buone impostazioni predefinite
  • Rinnovo regolare certificati - Sostituisci prima della scadenza
  • Archiviazione appropriata certificati - L'archivio giusto per lo scopo giusto
  • Verifica catene certificati - Testa che la fiducia funzioni

🚀 Prossimi Passi

  1. Esegui lo script certificati
  2. Installa il certificato CA sui tuoi dispositivi
  3. Configura Apache per usare il certificato server
  4. Testa le connessioni HTTPS
  5. Monitora le date di scadenza certificati

Ricorda: I certificati sono come badge ID per il mondo digitale. Proprio come non ti fideresti di qualcuno senza un'identificazione appropriata nella vita reale, i computer usano i certificati per verificare con chi stanno parlando online! 🌐🔒

📚 Risorse Aggiuntive

🔗 Strumenti Utili

  • OpenSSL: Creazione e gestione certificati
  • certmgr.msc: Gestore certificati Windows
  • certlm.msc: Gestore certificati computer locale
  • keytool: Strumento certificati Java/Android
  • ADB: Debug Android e installazione certificati

📖 Letture Aggiuntive

Ora comprendi i certificati come un professionista! 🎉