Certificate Formats#
I formati dei certificati X.509 rappresentano lo stesso dato (chiave pubblica + metadati + firma CA) serializzato in modi diversi per contesti diversi. Scegliere il formato sbagliato genera errori silenziosi: il certificato esiste ma il sistema non lo accetta.

PEM#
PEM (Privacy Enhanced Mail) e' il formato testuale universale: il contenuto binario del certificato e' codificato in base64 e racchiuso tra header/footer riconoscibili.
Header tipici:
-----BEGIN CERTIFICATE-----/-----END CERTIFICATE----------BEGIN PRIVATE KEY-----/-----END PRIVATE KEY----------BEGIN CERTIFICATE REQUEST-----/-----END CERTIFICATE REQUEST-----
Dev parallel: Come il formato JSON nelle API REST. Testo leggibile, trasportabile ovunque, inizi/fine chiaramente delimitati. Il base64 e' il "JSON encoding" per i dati binari del certificato.
DER#
DER (Distinguished Encoding Rules) e' la serializzazione binaria dello stesso ASN.1 che sta dentro un PEM. Non e' una struttura diversa: e' lo stesso dato senza il wrapper base64.
PFX / PKCS#12#
PFX (Personal Information Exchange) o PKCS#12 e' un contenitore che raggruppa in un unico file cifrato: il certificato end-entity, la catena di certificati intermedi e la private key. La protezione tramite password impedisce l'estrazione senza credenziali.

Dev parallel: Come un archivio ZIP protetto da password che contiene tutti i file necessari per un deploy. Comodo per trasportare, ma va estratto prima dell'uso nel server.
CSR#
Il CSR (Certificate Signing Request) non e' un certificato ma la richiesta preliminare: contiene la public key del richiedente e gli attributi X.509 (CN, O, SAN) ma non ancora la firma della CA. E' il "modulo" da inviare alla CA per ottenere il certificato firmato.
Conversioni OpenSSL#
Conoscere le conversioni e' essenziale per la gestione pratica dei certificati: i sistemi legacy spesso richiedono un formato specifico.
Dev parallel: Come i vari formati di serializzazione API: JSON (PEM - leggibile, verbose), Protobuf (DER - binario, compatto), ZIP+JSON (PFX - contenitore con tutto dentro). Stesso dato, formato diverso per contesti diversi. Sbagliare formato da errore crittografico, non di logica.


