{"id":85,"date":"2026-06-12T16:37:22","date_gmt":"2026-06-12T16:37:22","guid":{"rendered":"https:\/\/shattered.io\/it\/2026\/06\/12\/openssl-certificati-chiavi\/"},"modified":"2026-06-12T20:22:13","modified_gmt":"2026-06-12T20:22:13","slug":"openssl-certificati-chiavi","status":"publish","type":"post","link":"https:\/\/shattered.io\/it\/2026\/06\/12\/openssl-certificati-chiavi\/","title":{"rendered":"OpenSSL 3.5 LTS: Chiavi e Certificati in 12 Step [2026]"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>OpenSSL<\/strong> \u00e8 lo strumento crittografico pi\u00f9 diffuso al mondo: protegge la maggior parte del traffico HTTPS, firma pacchetti software e genera le chiavi che custodiscono dati aziendali e personali. Eppure la riga di comando spaventa molti, e gli errori costano cari. Questa guida pratica del 12 giugno 2026 ti porta da zero a un progetto completo in 12 step, con comandi verificati, esempi di output reali e le scelte di sicurezza giuste per il 2026. Niente teoria astratta: digiti, vedi il risultato, capisci perch\u00e9 funziona.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Useremo <strong>OpenSSL<\/strong> per generare chiavi RSA ed EC, creare una piccola Certificate Authority interna, firmare certificati con i nomi alternativi (SAN) richiesti dai browser moderni, convertire formati, cifrare file e testare connessioni TLS 1.3 reali. Alla fine avrai uno script riutilizzabile e una checklist di sicurezza. La scadenza del supporto per OpenSSL 3.0 LTS, fissata al 7 settembre 2026, rende questo il momento giusto per allinearsi alle versioni e alle pratiche attuali.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"cose-openssl-e-perche-conta-nel-2026\">Cos&#8217;\u00e8 OpenSSL e perch\u00e9 conta nel 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenSSL<\/strong> \u00e8 una libreria crittografica open source e una suite di strumenti da riga di comando. Implementa i protocolli TLS e SSL, gli algoritmi di cifratura simmetrica e asimmetrica, le funzioni hash e la gestione di certificati X.509. Quando il tuo browser mostra il lucchetto, dietro c&#8217;\u00e8 quasi sempre codice OpenSSL o una sua derivazione. Web server come Nginx e Apache, runtime come Node.js e Python, container Docker e migliaia di apparati di rete dipendono da questa libreria.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il comando <code>openssl<\/code> da terminale \u00e8 il coltellino svizzero del professionista della sicurezza. Genera chiavi, crea richieste di firma, ispeziona certificati scaduti, cifra backup, calcola digest e diagnostica handshake TLS che falliscono in produzione. Saperlo usare distingue chi risolve un incidente in cinque minuti da chi apre un ticket e aspetta un giorno.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il quadro delle versioni nel 2026 richiede attenzione. La serie <strong>OpenSSL 3.0 LTS<\/strong> ha chiuso il supporto completo il 7 settembre 2025 e riceve solo correzioni di sicurezza fino al 7 settembre 2026, secondo il calendario ufficiale del progetto. La serie <strong>OpenSSL 3.5 LTS<\/strong>, rilasciata nell&#8217;aprile 2025, \u00e8 oggi la scelta a lungo termine consigliata e resta supportata fino all&#8217;aprile 2030. Esistono linee pi\u00f9 recenti non LTS, ma per i server in produzione conviene la stabilit\u00e0 della 3.5. Verifica sempre la tua versione prima di iniziare, perch\u00e9 alcune opzioni e provider sono cambiati tra la serie 1.1.1 e la 3.x.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La transizione architetturale della serie 3.x ha spostato gli algoritmi deprecati fuori dal percorso predefinito. MD5, DES e altre primitive legacy ora vivono in un <code>legacy provider<\/code> separato: se un vecchio script smette di funzionare dopo l&#8217;aggiornamento, quasi sempre la causa \u00e8 questa. Capire la differenza tra default provider, legacy provider e FIPS provider ti evita ore di frustrazione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"prerequisiti-e-versioni-richieste\">Prerequisiti e versioni richieste<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Questo tutorial funziona su Linux, macOS e Windows (con WSL2 o Git Bash). Ecco cosa ti serve, con le versioni di riferimento di met\u00e0 2026:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Componente<\/th><th>Versione consigliata<\/th><th>Note<\/th><\/tr><\/thead><tbody><tr><td>OpenSSL<\/td><td>3.5 LTS (minimo 3.0)<\/td><td>Evita la serie 1.1.1, in EOL dal settembre 2023<\/td><\/tr><tr><td>Sistema operativo<\/td><td>Linux\/macOS\/WSL2<\/td><td>Bash o Zsh per gli script<\/td><\/tr><tr><td>Editor di testo<\/td><td>VS Code, nano, vim<\/td><td>Per i file di configurazione<\/td><\/tr><tr><td>Spazio su disco<\/td><td>50 MB<\/td><td>Chiavi e certificati sono piccoli<\/td><\/tr><tr><td>Privilegi<\/td><td>Utente normale<\/td><td>Niente root, tranne per installare pacchetti<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Non serve alcuna conoscenza pregressa di crittografia avanzata, ma aiuta capire la differenza tra chiave pubblica e privata e cosa sia una funzione hash. Se questi concetti ti sono nuovi, leggi prima la nostra guida sulle <a href=\"\/it\/firme-digitali\/\">firme digitali<\/a> e su <a href=\"\/it\/sha-256\/\">SHA-256<\/a>. Tutti i comandi che seguono sono testati su OpenSSL 3.x e indichiamo dove il comportamento cambia tra versioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-1-installare-e-verificare-openssl\">Step 1: Installare e verificare OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Prima di tutto controlla se <strong>OpenSSL<\/strong> \u00e8 gi\u00e0 presente e quale versione hai. Su Linux e macOS apri il terminale e digita:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl version -a<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;output mostra versione, data di build e directory dei certificati. Un esempio tipico:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OpenSSL 3.5.7 30 Apr 2025 (Library: OpenSSL 3.5.7)\nbuilt on: ...\nOPENSSLDIR: \"\/usr\/lib\/ssl\"\nENGINESDIR: \"\/usr\/lib\/x86_64-linux-gnu\/engines-3\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se la versione \u00e8 inferiore alla 3.0, aggiorna. Su Debian e Ubuntu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update && sudo apt install openssl\n# Verifica i provider disponibili (novit\u00e0 della serie 3.x)\nopenssl list -providers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Su macOS con Homebrew usa <code>brew install openssl@3<\/code>. Attenzione: macOS include una versione di sistema spesso datata. Aggiungi la versione Homebrew al <code>PATH<\/code> per usarla davvero. Su Windows, scarica un build affidabile o lavora dentro WSL2, che ti d\u00e0 un ambiente Linux pulito. Crea poi una cartella di lavoro dedicata, cos\u00ec non sparpagli chiavi sensibili nella home:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p ~\/lab-openssl && cd ~\/lab-openssl\nchmod 700 ~\/lab-openssl<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il permesso <code>700<\/code> impedisce ad altri utenti del sistema di leggere le chiavi private che genererai. Questa abitudine, banale ma trascurata, evita esposizioni accidentali su server condivisi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-2-generare-una-chiave-privata-rsa\">Step 2: Generare una chiave privata RSA<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La chiave privata \u00e8 il segreto da cui dipende tutto il resto. Nel 2026 il comando moderno \u00e8 <code>genpkey<\/code>, che sostituisce il vecchio <code>genrsa<\/code>. Genera una chiave RSA da 3072 bit, oggi raccomandata per certificati a lunga durata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genpkey -algorithm RSA \\\n  -pkeyopt rsa_keygen_bits:3072 \\\n  -out rsa.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per compatibilit\u00e0 con sistemi pi\u00f9 vecchi puoi usare 2048 bit, che resta il minimo accettabile secondo le linee guida NIST SP 800-57. Evita 1024 bit: \u00e8 considerato insicuro da anni. Per cifrare la chiave con una passphrase (consigliato per chiavi che non risiedono in un sistema automatizzato) aggiungi un cifrario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genpkey -algorithm RSA \\\n  -pkeyopt rsa_keygen_bits:3072 \\\n  -aes-256-cbc \\\n  -out rsa-protetta.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL chieder\u00e0 una passphrase e la richieder\u00e0 a ogni uso. Per ispezionare la chiave senza esporla, usa:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl pkey -in rsa.key -text -noout | head -5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vedrai il modulo, l&#8217;esponente pubblico e i parametri privati. La chiave \u00e8 in formato PEM, riconoscibile dalle righe <code>-----BEGIN PRIVATE KEY-----<\/code>. Imposta subito i permessi corretti, perch\u00e9 una chiave privata leggibile da tutti vanifica ogni sicurezza:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod 600 rsa.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">RSA resta universalmente compatibile, ma \u00e8 lenta e produce chiavi grandi. Per la maggior parte dei nuovi progetti le curve ellittiche, che vediamo allo step successivo, offrono la stessa sicurezza con chiavi molto pi\u00f9 piccole e operazioni pi\u00f9 rapide.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-3-generare-chiavi-ec-ecdsa-ed-ed25519\">Step 3: Generare chiavi EC (ECDSA) ed Ed25519<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La crittografia a curve ellittiche d\u00e0 sicurezza equivalente a RSA con chiavi molto pi\u00f9 corte. Una chiave EC da 256 bit regge il confronto con una RSA da 3072 bit. Genera una chiave sulla curva <code>prime256v1<\/code> (nota anche come P-256), la pi\u00f9 compatibile:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genpkey -algorithm EC \\\n  -pkeyopt ec_paramgen_curve:prime256v1 \\\n  -out ec.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per un margine di sicurezza superiore, ad esempio per una CA interna a lunga vita, usa <code>secp384r1<\/code> (P-384). Ispeziona la chiave appena creata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl pkey -in ec.key -text -noout | head -4<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Private-Key: (256 bit)\npriv:\n    3b:df:2c:90:65:01:ee:d4:0f:24:a4:ff:1b:88:55:\n    8b:94:dd:39:2b:28:52:fd:6d:16:23:f6:4e:dc:05:<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL 3.x supporta anche <strong>Ed25519<\/strong>, una curva moderna progettata da Daniel J. Bernstein, veloce e resistente a molti errori di implementazione. \u00c8 la scelta migliore per le firme quando CA, client e strumenti la supportano:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl genpkey -algorithm Ed25519 -out ed25519.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ed25519 non accetta parametri di dimensione: la curva ne definisce uno solo. Per le chiavi di accesso SSH e per la firma di artefatti software \u00e8 ormai lo standard de facto. Per i certificati TLS pubblici, per\u00f2, verifica prima il supporto della tua Certificate Authority, perch\u00e9 alcune ancora preferiscono ECDSA P-256 o RSA. La tabella seguente riassume le scelte:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Algoritmo<\/th><th>Dimensione chiave<\/th><th>Velocit\u00e0<\/th><th>Compatibilit\u00e0<\/th><th>Uso consigliato 2026<\/th><\/tr><\/thead><tbody><tr><td>RSA 2048<\/td><td>Grande<\/td><td>Lenta<\/td><td>Universale<\/td><td>Sistemi legacy<\/td><\/tr><tr><td>RSA 3072<\/td><td>Molto grande<\/td><td>Molto lenta<\/td><td>Universale<\/td><td>Certificati a lunga durata<\/td><\/tr><tr><td>ECDSA P-256<\/td><td>Piccola<\/td><td>Veloce<\/td><td>Alta<\/td><td>TLS generico<\/td><\/tr><tr><td>ECDSA P-384<\/td><td>Piccola<\/td><td>Veloce<\/td><td>Alta<\/td><td>CA interne, margine extra<\/td><\/tr><tr><td>Ed25519<\/td><td>Minima<\/td><td>Velocissima<\/td><td>Media<\/td><td>SSH, firma software<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-4-creare-una-csr-certificate-signing-request\">Step 4: Creare una CSR (Certificate Signing Request)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una richiesta di firma del certificato (CSR) contiene la tua chiave pubblica e i dati identificativi, ed \u00e8 ci\u00f2 che invii a una Certificate Authority per ottenere un certificato firmato. Crea una CSR dalla chiave EC dello step precedente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -new -key ec.key -out richiesta.csr \\\n  -subj \"\/C=IT\/ST=Lazio\/L=Roma\/O=Esempio Srl\/CN=www.esempio.it\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il parametro <code>-subj<\/code> evita le domande interattive: utile negli script. I campi seguono lo standard X.500: <code>C<\/code> \u00e8 il paese, <code>ST<\/code> la regione, <code>L<\/code> la citt\u00e0, <code>O<\/code> l&#8217;organizzazione e <code>CN<\/code> il nome comune (di solito il dominio). I browser moderni ignorano il CN e si basano sui Subject Alternative Names, quindi aggiungili tramite un file di configurazione:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat &gt; san.cnf &lt;&lt;'EOF'\n[req]\ndistinguished_name = dn\nreq_extensions = v3_req\nprompt = no\n\n[dn]\nC = IT\nO = Esempio Srl\nCN = www.esempio.it\n\n[v3_req]\nsubjectAltName = @alt\n\n[alt]\nDNS.1 = www.esempio.it\nDNS.2 = esempio.it\nDNS.3 = api.esempio.it\nEOF\n\nopenssl req -new -key ec.key -out richiesta-san.csr -config san.cnf<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica il contenuto della CSR prima di inviarla, per assicurarti che i SAN siano presenti:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -in richiesta-san.csr -noout -text | grep -A2 \"Alternative\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se i SAN mancano, il certificato verr\u00e0 rifiutato dai browser con l&#8217;errore <code>NET::ERR_CERT_COMMON_NAME_INVALID<\/code>. Questo \u00e8 uno degli errori pi\u00f9 frequenti per chi crea certificati a mano, e la causa numero uno di ticket inutili.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-5-generare-un-certificato-self-signed\">Step 5: Generare un certificato self-signed<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per sviluppo, test interni o ambienti di staging non serve una CA pubblica: basta un certificato autofirmato. Crealo in un comando solo, includendo i SAN:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl req -x509 -new -key ec.key -sha256 -days 365 \\\n  -out cert.pem -config san.cnf -extensions v3_req<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il flag <code>-x509<\/code> produce un certificato invece di una CSR, <code>-days 365<\/code> ne fissa la validit\u00e0 a un anno e <code>-sha256<\/code> impone la firma con SHA-256. Non esiste una durata predefinita portabile in OpenSSL: il valore dipende sempre da <code>-days<\/code>, quindi specificalo sempre. Ispeziona subito il risultato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -in cert.pem -noout -subject -issuer -dates -fingerprint -sha256<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>subject=C = IT, O = Esempio Srl, CN = www.esempio.it\nissuer=C = IT, O = Esempio Srl, CN = www.esempio.it\nnotBefore=Jun 12 16:29:45 2026 GMT\nnotAfter=Jun 12 16:29:45 2027 GMT\nsha256 Fingerprint=26:36:20:BC:2E:85:36:62:EC:48:0F:6D:9F:79:DA:BB:...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando <code>subject<\/code> e <code>issuer<\/code> coincidono, il certificato \u00e8 autofirmato: il browser mostrer\u00e0 un avviso di sicurezza, comportamento atteso in locale. Per evitarlo, importa il certificato nello store di fiducia del sistema o, meglio ancora, crea una piccola CA interna come vediamo allo step successivo. Per i siti pubblici, invece, usa una CA gratuita come <a href=\"https:\/\/letsencrypt.org\/\" rel=\"nofollow noopener\" target=\"_blank\">Let&#8217;s Encrypt<\/a>, che automatizza il rinnovo e l&#8217;emissione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-6-costruire-una-ca-locale-e-firmare-certificati\">Step 6: Costruire una CA locale e firmare certificati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una Certificate Authority interna risolve il problema degli avvisi: importi una sola volta il certificato radice nei dispositivi e tutti i certificati che firmi diventano fidati. Inizia creando la chiave e il certificato radice della CA, con una validit\u00e0 lunga e una curva robusta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Chiave della CA su P-384 per margine di sicurezza\nopenssl genpkey -algorithm EC \\\n  -pkeyopt ec_paramgen_curve:secp384r1 -out ca.key\nchmod 600 ca.key\n\n# Certificato radice valido 10 anni\nopenssl req -x509 -new -key ca.key -sha384 -days 3650 \\\n  -out ca.pem -subj \"\/C=IT\/O=Esempio CA\/CN=Esempio Root CA\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ora firma la CSR creata allo step 4 con la CA. Servono le estensioni corrette, altrimenti i client moderni rifiutano il certificato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -req -in richiesta-san.csr \\\n  -CA ca.pem -CAkey ca.key -CAcreateserial \\\n  -out server.pem -days 365 -sha256 \\\n  -extfile san.cnf -extensions v3_req<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il flag <code>-CAcreateserial<\/code> genera un file <code>ca.srl<\/code> con il numero di serie progressivo. I numeri di serie devono essere unici per ogni certificato emesso da una CA: se ne riusi uno, i client lo rifiutano. Verifica la catena di fiducia:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl verify -CAfile ca.pem server.pem<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Una risposta <code>server.pem: OK<\/code> conferma che il certificato del server \u00e8 firmato correttamente dalla tua CA. A questo punto distribuisci <code>ca.pem<\/code> ai dispositivi che devono fidarsi dei tuoi servizi interni. Questo schema \u00e8 la base di ogni infrastruttura a chiave pubblica (PKI) aziendale e dei certificati mTLS che proteggono le comunicazioni tra microservizi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-7-ispezionare-e-verificare-i-certificati\">Step 7: Ispezionare e verificare i certificati<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Saper leggere un certificato \u00e8 met\u00e0 del lavoro di un sistemista. Per vedere tutto il contenuto in formato leggibile:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -in server.pem -text -noout<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per estrarre solo i campi che ti servono, usa flag mirati. Controllare la scadenza di un certificato \u00e8 un&#8217;operazione quotidiana:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Scade entro 30 giorni? Codice di uscita 0 = s\u00ec\nopenssl x509 -in server.pem -checkend 2592000 -noout\necho $?<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Questo comando \u00e8 perfetto per uno script di monitoraggio: se restituisce <code>1<\/code>, il certificato \u00e8 ancora valido oltre i 30 giorni; se restituisce <code>0<\/code>, \u00e8 ora di rinnovare. Verifica anche che una chiave privata corrisponda davvero al suo certificato confrontando le impronte della chiave pubblica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl pkey -in ec.key -pubout | openssl sha256\nopenssl x509 -in server.pem -pubkey -noout | openssl sha256<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Se i due hash SHA-256 coincidono, chiave e certificato sono una coppia valida. Questo controllo evita l&#8217;errore classico di installare su un server una chiave che non corrisponde al certificato, che genera un fallimento dell&#8217;handshake TLS difficile da diagnosticare. Per approfondire il ruolo degli hash in questi controlli, vedi la nostra guida sulle <a href=\"\/it\/funzioni-hash\/\">funzioni hash crittografiche<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-8-convertire-i-formati-pem-der-pkcs12\">Step 8: Convertire i formati (PEM, DER, PKCS#12)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Sistemi diversi vogliono formati diversi. PEM (testo Base64) \u00e8 lo standard Unix; DER (binario) serve a Java e ad alcuni apparati; PKCS#12 (un unico file <code>.p12<\/code> con chiave e certificato) \u00e8 richiesto da Windows e dai browser per l&#8217;import. Converti PEM in DER:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl x509 -in cert.pem -outform der -out cert.der<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Crea un bundle PKCS#12 che riunisce chiave privata, certificato e catena della CA in un solo file protetto da password:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl pkcs12 -export \\\n  -inkey ec.key -in server.pem -certfile ca.pem \\\n  -out bundle.p12 -name \"Server Esempio\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL chieder\u00e0 una password di export. Per estrarre di nuovo i componenti da un file <code>.p12<\/code>, ad esempio ricevuto da un fornitore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Estrai solo il certificato (niente chiave)\nopenssl pkcs12 -in bundle.p12 -clcerts -nokeys -out estratto.pem\n\n# Estrai solo la chiave privata\nopenssl pkcs12 -in bundle.p12 -nocerts -out chiave-estratta.key<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Attenzione a un dettaglio della serie 3.x: i file <code>.p12<\/code> generati con OpenSSL 3.0 e successivi usano algoritmi pi\u00f9 moderni che alcuni sistemi datati non leggono. Se Windows o un vecchio Java rifiutano il file, aggiungi <code>-legacy<\/code> al comando di export per usare la cifratura compatibile. \u00c8 una delle incompatibilit\u00e0 pi\u00f9 segnalate dopo l&#8217;aggiornamento alla serie 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-9-cifrare-file-e-calcolare-i-digest\">Step 9: Cifrare file e calcolare i digest<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>OpenSSL<\/strong> cifra anche file arbitrari con crittografia simmetrica. Per cifrare un backup con AES-256, sempre derivando la chiave dalla password con un metodo robusto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl enc -aes-256-cbc -salt -pbkdf2 -iter 600000 \\\n  -in backup.tar -out backup.tar.enc<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I parametri qui sono cruciali. <code>-salt<\/code> aggiunge casualit\u00e0, <code>-pbkdf2<\/code> usa una funzione di derivazione moderna e <code>-iter 600000<\/code> impone abbastanza iterazioni da rallentare gli attacchi a forza bruta. Senza <code>-pbkdf2<\/code>, OpenSSL ricade su una derivazione debole e legacy: non ometterlo mai. Per decifrare:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl enc -d -aes-256-cbc -pbkdf2 -iter 600000 \\\n  -in backup.tar.enc -out backup.tar<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Per la cifratura di interi dischi conviene comunque preferire strumenti dedicati come quelli descritti nella nostra guida su <a href=\"\/it\/veracrypt-cifrare-disco-aes-256\/\">VeraCrypt<\/a>, ma per script automatizzati OpenSSL resta pratico. Calcola anche i digest per verificare l&#8217;integrit\u00e0 di un download:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl dgst -sha256 immagine.iso<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>SHA2-256(immagine.iso)= f440616eb749b6883ed4010c6bfe97a01c61c89a2d94510401eb3f231afba148<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Confronta l&#8217;hash ottenuto con quello pubblicato dal fornitore. Usa SHA-256 o SHA-3, mai MD5 o SHA-1: entrambi sono vulnerabili a collisioni, come abbiamo documentato nell&#8217;analisi della <a href=\"\/it\/collisione-sha1\/\">collisione SHA-1 di SHAttered<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-10-testare-connessioni-tls-con-s_client\">Step 10: Testare connessioni TLS con s_client<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il sottocomando <code>s_client<\/code> \u00e8 lo strumento diagnostico pi\u00f9 potente per chi gestisce server web. Apre una connessione TLS reale e mostra tutto: certificato, catena, protocollo e cifrario negoziati. Verifica un sito pubblico:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -connect esempio.it:443 -servername esempio.it &lt; \/dev\/null<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il parametro <code>-servername<\/code> invia l&#8217;estensione SNI, indispensabile sui server che ospitano pi\u00f9 domini sullo stesso IP. Per forzare TLS 1.3 e vedere quale cifrario viene scelto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -connect esempio.it:443 -tls1_3 &lt; \/dev\/null \\\n  | grep -E \"Protocol|Cipher\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL 3.x supporta i tre suite di cifratura standard di TLS 1.3: <code>TLS_AES_256_GCM_SHA384<\/code>, <code>TLS_CHACHA20_POLY1305_SHA256<\/code> e <code>TLS_AES_128_GCM_SHA256<\/code>. Per estrarre solo il certificato presentato dal server e salvarlo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -connect esempio.it:443 -servername esempio.it &lt; \/dev\/null \\\n  2&gt;\/dev\/null | openssl x509 -out remoto.pem<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 utilissimo per diagnosticare certificati scaduti o catene incomplete in produzione. Per capire meglio cosa avviene durante l&#8217;handshake TLS, leggi la nostra guida su <a href=\"\/it\/https-e-tls\/\">HTTPS e TLS<\/a>. La diagnostica con <code>s_client<\/code> \u00e8 una competenza che ripaga ogni volta che un servizio HTTPS smette di funzionare senza spiegazioni evidenti.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-11-avviare-un-server-https-di-test\">Step 11: Avviare un server HTTPS di test<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">OpenSSL include un server TLS minimale, perfetto per testare il certificato che hai appena firmato senza configurare Nginx. Avvialo con la chiave e il certificato del server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_server -key ec.key -cert server.pem \\\n  -accept 4443 -www<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Il flag <code>-www<\/code> fa rispondere il server con una pagina HTML che riassume i parametri TLS della connessione. Da un altro terminale, collegati con il client e indica la CA come trust anchor:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl s_client -connect localhost:4443 -CAfile ca.pem &lt; \/dev\/null \\\n  | grep \"Verify return code\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Una risposta <code>Verify return code: 0 (ok)<\/code> conferma che l&#8217;intera catena, dalla CA al certificato del server, \u00e8 valida. Se vedi <code>code 19<\/code> o <code>code 20<\/code>, manca la CA o la catena \u00e8 incompleta. Puoi anche puntare un browser su <code>https:\/\/localhost:4443<\/code>: dopo aver importato <code>ca.pem<\/code> nello store di fiducia, il lucchetto comparir\u00e0 senza avvisi. Questo ciclo (genera, firma, avvia, verifica) riproduce in piccolo l&#8217;intera vita di un certificato TLS in produzione.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"step-12-lo-script-completo-del-progetto\">Step 12: Lo script completo del progetto<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mettiamo insieme tutto in un unico script riutilizzabile che, partendo da zero, crea una CA, genera una chiave del server, firma un certificato con i SAN e verifica la catena. Salvalo come <code>genera-pki.sh<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env bash\nset -euo pipefail\n\nDOMINIO=\"${1:-www.esempio.it}\"\nGIORNI_CA=3650\nGIORNI_CERT=365\n\necho \"==&gt; Creo la directory di lavoro\"\nmkdir -p pki && cd pki && umask 077\n\necho \"==&gt; 1) Chiave e certificato radice della CA\"\nopenssl genpkey -algorithm EC \\\n  -pkeyopt ec_paramgen_curve:secp384r1 -out ca.key\nopenssl req -x509 -new -key ca.key -sha384 -days \"$GIORNI_CA\" \\\n  -out ca.pem -subj \"\/C=IT\/O=Esempio CA\/CN=Esempio Root CA\"\n\necho \"==&gt; 2) Chiave del server (P-256)\"\nopenssl genpkey -algorithm EC \\\n  -pkeyopt ec_paramgen_curve:prime256v1 -out server.key\n\necho \"==&gt; 3) File di configurazione con i SAN\"\ncat &gt; san.cnf &lt;&lt;EOF\n[req]\ndistinguished_name = dn\nreq_extensions = v3_req\nprompt = no\n[dn]\nC = IT\nO = Esempio Srl\nCN = ${DOMINIO}\n[v3_req]\nsubjectAltName = @alt\n[alt]\nDNS.1 = ${DOMINIO}\nEOF\n\necho \"==&gt; 4) CSR e firma con la CA\"\nopenssl req -new -key server.key -out server.csr -config san.cnf\nopenssl x509 -req -in server.csr \\\n  -CA ca.pem -CAkey ca.key -CAcreateserial \\\n  -out server.pem -days \"$GIORNI_CERT\" -sha256 \\\n  -extfile san.cnf -extensions v3_req\n\necho \"==&gt; 5) Verifica della catena\"\nopenssl verify -CAfile ca.pem server.pem\n\necho \"==&gt; Fatto. File generati in $(pwd)\"<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Rendi lo script eseguibile e lancialo passando il dominio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>chmod +x genera-pki.sh\n.\/genera-pki.sh api.esempio.it<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;istruzione <code>set -euo pipefail<\/code> ferma lo script al primo errore, e <code>umask 077<\/code> garantisce che ogni file creato nasca con permessi restrittivi. In meno di un secondo ottieni una PKI funzionante e ripetibile. Per integrare le chiavi cos\u00ec generate in un&#8217;applicazione, vedi la nostra guida sulla <a href=\"\/it\/crittografia-end-to-end-nodejs\/\">crittografia end-to-end in Node.js<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5-errori-comuni-da-evitare-con-openssl\">5 errori comuni da evitare con OpenSSL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Anche gli amministratori esperti cadono in trappole ricorrenti. Ecco le cinque pi\u00f9 costose e come prevenirle.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Dimenticare i SAN.<\/strong> Un certificato con il solo Common Name viene rifiutato da Chrome e Firefox dal 2017. Usa sempre un file di configurazione con <code>subjectAltName<\/code>, anche per un singolo dominio.<\/li><li><strong>Omettere -pbkdf2 nella cifratura file.<\/strong> Senza questo flag, <code>openssl enc<\/code> usa una derivazione di chiave debole vulnerabile agli attacchi a dizionario. Aggiungi sempre <code>-pbkdf2 -iter 600000<\/code>.<\/li><li><strong>Permessi troppo aperti sulle chiavi private.<\/strong> Una chiave con permessi <code>644<\/code> \u00e8 leggibile da qualsiasi utente del sistema. Imposta sempre <code>chmod 600<\/code> e usa <code>umask 077<\/code> negli script.<\/li><li><strong>Riusare i numeri di serie della CA.<\/strong> Cancellare il file <code>.srl<\/code> e rigenerare certificati con lo stesso serial fa fallire la validazione lato client. Conserva il file di serie.<\/li><li><strong>Usare ancora SHA-1 o MD5.<\/strong> Le firme con questi hash sono insicure. Specifica sempre <code>-sha256<\/code> o superiore nei comandi di firma.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Un sesto errore merita una menzione: confondere il formato dei file. Un certificato in DER copiato dove serve PEM produce messaggi criptici come <code>unable to load certificate<\/code>. Quando un comando fallisce in modo incomprensibile, il primo sospetto \u00e8 quasi sempre il formato o l&#8217;encoding del file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"troubleshooting-8-problemi-frequenti-e-soluzioni\">Troubleshooting: 8 problemi frequenti e soluzioni<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quando un comando OpenSSL non si comporta come previsto, questa tabella copre gli scenari pi\u00f9 comuni che incontrerai nel 2026.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Problema<\/th><th>Causa probabile<\/th><th>Soluzione<\/th><\/tr><\/thead><tbody><tr><td><code>unable to load Private Key<\/code><\/td><td>Formato errato o file cifrato<\/td><td>Verifica con <code>openssl pkey -in chiave -text<\/code><\/td><\/tr><tr><td><code>error:0308010C: unsupported<\/code><\/td><td>Algoritmo legacy nella serie 3.x<\/td><td>Aggiungi <code>-provider legacy<\/code><\/td><\/tr><tr><td>Il browser rifiuta il .p12<\/td><td>Cifratura troppo moderna<\/td><td>Riesporta con il flag <code>-legacy<\/code><\/td><\/tr><tr><td><code>unable to get local issuer<\/code><\/td><td>Catena CA incompleta<\/td><td>Concatena i certificati intermedi nel file<\/td><\/tr><tr><td><code>CN mismatch<\/code> nel browser<\/td><td>SAN mancanti<\/td><td>Rigenera con <code>subjectAltName<\/code><\/td><\/tr><tr><td><code>s_client<\/code> resta appeso<\/td><td>Manca input da stdin<\/td><td>Aggiungi <code>&lt; \/dev\/null<\/code><\/td><\/tr><tr><td><code>bad decrypt<\/code><\/td><td>Parametri enc diversi tra cifra e decifra<\/td><td>Usa gli stessi flag <code>-pbkdf2 -iter<\/code><\/td><\/tr><tr><td>Versione vecchia su macOS<\/td><td>OpenSSL di sistema datato<\/td><td>Anteponi il percorso Homebrew al <code>PATH<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;errore <code>0308010C unsupported<\/code> \u00e8 il pi\u00f9 frequente dopo l&#8217;aggiornamento alla serie 3.x e disorienta molti. Significa che stai chiedendo a OpenSSL un algoritmo spostato nel legacy provider, come RC4 o un vecchio PKCS#12. La soluzione \u00e8 caricare il provider esplicitamente:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl enc -aes-128-cbc -provider legacy -provider default ...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Quando una catena di certificati non viene validata, usa <code>openssl verify -show_chain<\/code> (disponibile dalla serie 3.x) per vedere esattamente dove si interrompe la fiducia. Mostra ogni anello e indica quale manca, trasformando un errore opaco in una diagnosi precisa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"tecniche-avanzate-per-utenti-esperti\">Tecniche avanzate per utenti esperti<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una volta padroneggiate le basi, OpenSSL offre funzioni che fanno la differenza in produzione. La prima \u00e8 il controllo OCSP per verificare in tempo reale se un certificato \u00e8 stato revocato:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl ocsp -issuer ca.pem -cert server.pem \\\n  -url http:\/\/ocsp.esempio.it -text<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">La seconda \u00e8 il benchmark delle prestazioni crittografiche del tuo hardware, utile per dimensionare un server TLS ad alto traffico:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Confronta la velocit\u00e0 di firma RSA vs ECDSA\nopenssl speed rsa3072 ecdsap256<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I risultati mostrano in modo chiaro quante firme al secondo regge ciascun algoritmo, e di solito ECDSA stravince su RSA. La terza tecnica riguarda la generazione di parametri Diffie-Hellman personalizzati, anche se con TLS 1.3 e le curve moderne sono ormai meno necessari. Infine, considera l&#8217;orizzonte post-quantistico: OpenSSL sta integrando algoritmi resistenti ai computer quantistici come ML-KEM (basato su Kyber). Per capire l&#8217;impatto di questa transizione sul web, leggi la nostra analisi della <a href=\"\/it\/cryptography-hub\/\">crittografia moderna<\/a> e delle sue evoluzioni.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"best-practice-di-sicurezza-per-il-2026\">Best practice di sicurezza per il 2026<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le scelte crittografiche invecchiano. Quello che era sicuro nel 2015 oggi \u00e8 debole, e quello che usi oggi andr\u00e0 rivisto. Queste linee guida riflettono lo stato dell&#8217;arte di met\u00e0 2026, in linea con le raccomandazioni del NIST nella pubblicazione SP 800-57 e con le indicazioni dell&#8217;agenzia europea ENISA.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Usa <strong>ECDSA P-256 o Ed25519<\/strong> per le nuove chiavi; riserva RSA 3072 ai casi che richiedono compatibilit\u00e0 universale.<\/li><li>Firma sempre con <strong>SHA-256 o superiore<\/strong>. SHA-1 e MD5 non vanno mai usati per le firme.<\/li><li>Imponi <strong>TLS 1.3<\/strong> dove possibile e disabilita TLS 1.0 e 1.1, ormai obsoleti e vietati dagli standard di settore come PCI DSS.<\/li><li>Proteggi le chiavi private con <strong>permessi 600<\/strong> e, dove possibile, con un modulo hardware (HSM) o un secure enclave.<\/li><li>Ruota i certificati con anticipo: durate brevi e rinnovo automatico riducono la finestra di rischio.<\/li><li>Aggiorna OpenSSL alla serie LTS supportata: dopo il 7 settembre 2026 la serie 3.0 non ricever\u00e0 pi\u00f9 alcuna correzione di sicurezza.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La crittografia non \u00e8 un&#8217;impostazione che configuri una volta e dimentichi. \u00c8 un processo. La maggior parte delle violazioni legate a TLS non nasce da algoritmi rotti, ma da certificati scaduti, chiavi esposte e versioni non aggiornate. Automatizza il monitoraggio della scadenza, conserva le chiavi con cura e rivedi le tue scelte ogni anno. Per il contesto pi\u00f9 ampio sulle minacce e sulla difesa, consulta la nostra guida sulla <a href=\"\/it\/sicurezza-delle-password\/\">sicurezza delle password<\/a> e sulle <a href=\"\/it\/violazioni-di-dati\/\">violazioni di dati<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"related-coverage\">Related Coverage<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"\/it\/crittografia-end-to-end-nodejs\/\">Crittografia End-to-End in Node.js: 12 Step [2026]<\/a><\/li><li><a href=\"\/it\/veracrypt-cifrare-disco-aes-256\/\">VeraCrypt: Cifrare un Disco AES-256 in 12 Step [2026]<\/a><\/li><li><a href=\"\/it\/https-e-tls\/\">HTTPS e TLS: come viene protetta una connessione web<\/a><\/li><li><a href=\"\/it\/firme-digitali\/\">Firme digitali: come funzionano e perch\u00e9 le collisioni le minacciano<\/a><\/li><li><a href=\"\/it\/sha-256\/\">SHA-256 spiegato: il cuore della famiglia SHA-2<\/a><\/li><li><a href=\"\/it\/cryptography-hub\/\">Crittografia: funzioni hash, SHA e fiducia digitale<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"domande-frequenti-su-openssl\">Domande frequenti su OpenSSL<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"qual-e-la-versione-di-openssl-da-usare-nel-2026\">Qual \u00e8 la versione di OpenSSL da usare nel 2026?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">La serie <strong>OpenSSL 3.5 LTS<\/strong>, rilasciata nell&#8217;aprile 2025, \u00e8 la scelta consigliata per la produzione perch\u00e9 supportata fino al 2030. Se usi ancora la serie 3.0 LTS, pianifica l&#8217;aggiornamento: il suo supporto di sicurezza termina il 7 settembre 2026. Evita la serie 1.1.1, in fine vita dal settembre 2023.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"meglio-rsa-o-le-curve-ellittiche-per-un-nuovo-certificato\">Meglio RSA o le curve ellittiche per un nuovo certificato?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per la maggior parte dei nuovi progetti, ECDSA P-256 \u00e8 la scelta migliore: stessa sicurezza di RSA 3072 con chiavi pi\u00f9 piccole e handshake pi\u00f9 veloci. Usa RSA solo quando devi supportare sistemi legacy che non gestiscono le curve ellittiche.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"perche-il-browser-mostra-un-avviso-con-il-mio-certificato-self-signed\">Perch\u00e9 il browser mostra un avviso con il mio certificato self-signed?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Un certificato autofirmato non \u00e8 emesso da una Certificate Authority riconosciuta, quindi il browser non si fida. Per ambienti interni, crea una CA locale (Step 6) e importa il suo certificato radice nello store di fiducia dei dispositivi. Per siti pubblici, usa Let&#8217;s Encrypt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"come-risolvo-lerrore-unsupported-dopo-laggiornamento-a-openssl-3\">Come risolvo l&#8217;errore &#8220;unsupported&#8221; dopo l&#8217;aggiornamento a OpenSSL 3?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Quell&#8217;errore (codice <code>0308010C<\/code>) indica un algoritmo legacy spostato fuori dal percorso predefinito nella serie 3.x. Carica il provider esplicitamente con <code>-provider legacy -provider default<\/code>, oppure migra a un algoritmo moderno come AES-256.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"openssl-e-abbastanza-sicuro-per-cifrare-file-importanti\">OpenSSL \u00e8 abbastanza sicuro per cifrare file importanti?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ec, se usi AES-256 con <code>-pbkdf2 -iter 600000<\/code>. Senza questi parametri la derivazione della chiave \u00e8 debole. Per esigenze pi\u00f9 complete (contenitori cifrati, negabilit\u00e0) valuta strumenti dedicati come VeraCrypt, ma per script e backup automatizzati OpenSSL \u00e8 adeguato.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"quanto-deve-durare-un-certificato-tls\">Quanto deve durare un certificato TLS?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Per i certificati pubblici la tendenza del settore va verso durate sempre pi\u00f9 brevi, con rinnovo automatico. Per le CA radice interne sono comuni durate di 5-10 anni. Durate brevi riducono la finestra di rischio se una chiave viene compromessa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"openssl-supporta-la-crittografia-post-quantistica\">OpenSSL supporta la crittografia post-quantistica?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Le versioni recenti stanno integrando algoritmi resistenti ai computer quantistici come ML-KEM (basato su Kyber), standardizzati dal NIST nel 2024. La transizione \u00e8 in corso e nei prossimi anni questi algoritmi affiancheranno gradualmente RSA ed ECDSA negli handshake TLS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Fonti autorevoli: <a href=\"https:\/\/www.openssl.org\/\" rel=\"nofollow noopener\" target=\"_blank\">OpenSSL Project<\/a>, <a href=\"https:\/\/docs.openssl.org\/\" rel=\"nofollow noopener\" target=\"_blank\">documentazione ufficiale OpenSSL<\/a>, <a href=\"https:\/\/endoflife.date\/openssl\" rel=\"nofollow noopener\" target=\"_blank\">calendario end-of-life OpenSSL<\/a>, <a href=\"https:\/\/csrc.nist.gov\/pubs\/sp\/800\/57\/pt1\/r5\/final\" rel=\"nofollow noopener\" target=\"_blank\">NIST SP 800-57<\/a> e <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc8446\" rel=\"nofollow noopener\" target=\"_blank\">RFC 8446 (TLS 1.3)<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>OpenSSL \u00e8 lo strumento crittografico pi\u00f9 diffuso al mondo: protegge la maggior parte del traffico HTTPS, firma pacchetti software e genera le chiavi che custodiscono dati aziendali e personali. Eppure\u2026<\/p>\n","protected":false},"author":8,"featured_media":86,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-85","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/comments?post=85"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":87,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/posts\/85\/revisions\/87"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media\/86"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/media?parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/categories?post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/it\/wp-json\/wp\/v2\/tags?post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}