SSL Pinning: cosa è

Cos'è l'SSL Pinning

L'SSL Pinning, detto anche Certificate Pinning o Public Key Pinning, è una tecnica di sicurezza che lega un'applicazione client a un certificato specifico o a una chiave pubblica specifica del server. Il client accetta la connessione TLS solo se il server presenta esattamente il certificato (o la chiave) atteso, ignorando l'intera trust chain delle CA.

Perché serve

Il modello classico TLS si fida di centinaia di Certification Authority globali. Se una qualunque di queste viene compromessa, o se un'attaccante riesce a far emettere un certificato fraudolento, può eseguire un'attacco Man-in-the-Middle senza che il client se ne accorga. Episodi storici come la compromissione di DigiNotar nel 2011 hanno dimostrato il rischio. Il pinning blocca queste minacce: anche se la CA viene bucata, il client rifiuta certificati che non corrispondono al pin.

Tipi di pinning

  • Certificate pinning: si pinna l'intero certificato del server. Sicuro ma rigido: ogni rinnovo richiede aggiornamento dell'app
  • Public key pinning: si pinna solo la chiave pubblica. Più flessibile, perché puoi rinnovare il cert mantenendo la stessa chiave
  • Intermediate pinning: si pinna la CA intermedia. Il client accetta tutti i certificati emessi da quella intermediate. Compromesso tra sicurezza e operatività

Implementazione su mobile

Il pinning è oggi diffuso soprattutto in app mobili dove è impossibile fare upgrade silenziosi della trust chain. Su Android si usa Network Security Configuration con il blocco <pin-set>:

<pin digest="SHA-256">base64==</pin>

Su iOS si configurano i pin tramite NSPinnedDomains in App Transport Security oppure via TrustKit, una libreria open source che gestisce report di violazione e fallback. In entrambi i casi è essenziale pinnare almeno DUE chiavi: quella attuale e una di backup, da usare durante il rinnovo del certificato.

HTTP Public Key Pinning (HPKP)

In passato esisteva HPKP, un meccanismo via header HTTP che permetteva di pinnare le chiavi anche per browser desktop. La specifica è stata deprecata e rimossa da Chrome nel 2018 a causa dei rischi: errori di configurazione potevano rendere un sito inaccessibile per mesi. Oggi i browser preferiscono affidarsi a Certificate Transparency e HSTS per ridurre i rischi senza i problemi di HPKP.

Rischi del pinning

Il pinning è potente ma pericoloso se mal configurato:

  • Se perdi la chiave di backup e l'unica chiave pinnata viene compromessa, devi rilasciare un'aggiornamento d'urgenza dell'app
  • Pin troppo rigidi rendono difficile cambiare CA
  • Le aziende che usano proxy interni per ispezione TLS si trovano l'app rotta, perché il proxy presenta un cert diverso da quello pinnato

Best practice

Per implementare il pinning in produzione:

  1. Pin sulla chiave pubblica, non sul certificato
  2. Sempre almeno una chiave di backup
  3. Definisci una scadenza ragionevole (90-180 giorni)
  4. Implementa un meccanismo di report di violazione
  5. Documenta la procedura di rotazione
  6. Testa l'unpinning di emergenza prima di andare in produzione

Hai bisogno di aiuto?

Se vuoi gestione SSL dal team di G Tech Group, scrivici tramite il modulo di contatto.

Hai trovato utile quest'articolo?