Salta al contenuto principale

SSL Pinning per le app Capacitor

Implementa l'SSL pinning nella tua app Capacitor per aumentare la sicurezza e proteggerti dagli attacchi MITM, rispettando le linee guida degli app store.

SSL Pinning per app Capacitor Capgo illustrazione blog

L'SSL pinning protegge la tua app da minacce come gli attacchi man-in-the-middle (MITM) verificando i certificati del server direttamente all'interno dell'app. Senza questa protezione, gli attaccanti potrebbero intercettare dati sensibili o manipolare le comunicazioni. Ecco perché è importante e come implementarlo efficacemente:

Perché l'SSL pinning è importante:

  • Previene gli attacchi MITM: Blocca l'intercettazione delle chiamate API.
  • Rafforza la sicurezza: Verifica i certificati del server rispetto a valori noti.
  • Rispetta i requisiti dell'App Store: Aiuta a conformarsi agli standard di sicurezza di Apple e Google.
  • Aumenta la fiducia degli utenti: Protegge i dati degli utenti durante la trasmissione.

Passaggi chiave per implementare l'SSL Pinning:

  1. Scegli il plugin giusto: Garantisci la compatibilità con iOS e Android.
  2. Configura la tua app: Incorpora i dati del certificato nelle impostazioni dell'app.
  3. Configurazione specifica per piattaforma:
    • Android: Usa network_security_config.xml per definire i certificate pin.
    • iOS: Regola Info.plist e valida i certificati a runtime.
  4. Testa la configurazione: Simula attacchi usando tool come Charles Proxy per verificare la sicurezza.
  5. Gestisci i certificati: Aggiorna regolarmente i certificati e includi dei backup per evitare downtime.

Confronto rapido: SSL Pinning su Android vs iOS

Funzionalità Android iOS
File di configurazione network_security_config.xml Info.plist
Percorso del certificato res/raw directory Bundle dell'app
Metodo di validazione Configurazione basata su XML ATS e validazione runtime
Processo di update Manuale o automatizzata Manuale o automatizzata

Consiglio pro: Automatizza gli aggiornamenti dei certificati con strumenti come Capgo per garantire transizioni fluide e sicure senza dover ricostruire l'app. Ciò evita interruzioni del servizio e garantisce la conformità alle linee guida degli app store.

L'SSL pinning è fondamentale per ogni Capacitor app per proteggere le comunicazioni di API e i dati degli utenti. Inizia subito l'implementazione per potenziare la sicurezza della tua app.

Guida al TLS/SSL Certificate Pinning

Requisiti di configurazione

Configurare l'SSL pinning nella tua app Capacitor richiede una pianificazione accurata e una configurazione precisa. Ecco tutto quello che devi sapere per implementare il certificate pinning in modo efficace.

Scegliere il plugin SSL Pinning giusto

Il primo passo è scegliere un plugin che funzioni bene sia su iOS che su Android, offrendo al contempo solide funzionalità di sicurezza. Per le app Capacitor, @capgo/capacitor-ssl-pinning ancora le connessioni HTTPS ai certificati inclusi nel bundle per CapacitorHttp su iOS e Android. Confrontando i plugin, tieni a mente questi fattori:

  • Compatibilità con le piattaforme: Verifica che il plugin funzioni correttamente sia su dispositivi iOS che Android.
  • Gestione dei certificati: Scegli un plugin che semplifichi la gestione dei certificati.
  • Update facili: Cerca plugin che permettano di aggiornare i certificati senza dover ricostruire l'intera app.
  • Considerazioni sulle performance: Valuta come il plugin potrebbe influire sulla velocità e reattività della tua app.

Configurazione della tua Capacitor App

Sito della documentazione del framework Capacitor

Una volta scelto il plugin, il passo successivo è configurare la tua app Capacitor per abilitare SSL pinning. Ecco un esempio di come potrebbe essere la configurazione:

// Example: capacitor.config.ts
{
  appId: 'com.example.app',
  plugins: {
    SSLPinning: {
      certs: ['cert1', 'cert2'],
      validateCertificates: true,
      allowBackup: false
    }
  }
}

È consigliabile implementare queste modifiche gradualmente per garantire una transizione fluida agli utenti. Dopo la configurazione generale, procedi con le regolazioni specifiche per Android e iOS per completare l'implementazione.

Configurazione specifica per piattaforma

L'implementazione di SSL pinning richiede configurazioni dedicate per Android e iOS per proteggersi efficacemente dagli attacchi MITM.

Implementazione Android

Su Android, SSL pinning prevede la configurazione della network security e la gestione dei certificati. Ecco come fare:

  • Crea una Network Security Configuration

    Inizia creando un file chiamato network_security_config.xml nel res/xml nella directory del tuo progetto Android:

    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config>
        <domain-config>
            <domain includeSubdomains="true">api.example.com</domain>
            <pin-set>
                <pin digest="SHA-256">your_certificate_hash</pin>
                <!-- Backup pin -->
                <pin digest="SHA-256">backup_certificate_hash</pin>
            </pin-set>
        </domain-config>
    </network-security-config>
  • Aggiorna il file AndroidManifest.xml

    Fai riferimento alla nuova network security configuration nel tuo AndroidManifest.xml dell'app:

    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
  • Aggiungi i file dei certificati

    Salva i file dei certificati necessari (.cer o .pem) nella res/raw directory del tuo progetto Android.

Implementazione iOS

Per iOS, l'SSL pinning si configura modificando le impostazioni di App Transport Security (ATS) e implementando la validazione dei certificati a runtime. Segui questi passaggi:

  • Configura ATS in Info.plist

    Aggiungi la seguente configurazione al file Info.plist dell'app:

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <false/>
        <key>NSExceptionDomains</key>
        <dict>
            <key>api.example.com</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSPinnedDomains</key>
                <true/>
            </dict>
        </dict>
    </dict>
  • Inizializza l'SSL pinning in Code

    Usa questo snippet code per abilitare l'SSL pinning durante l'inizializzazione dell'app:

    import { HTTP } from '@ionic-native/http/ngx';
    
    export class AppComponent {
      constructor(private http: HTTP) {
        this.initializeSSLPinning();
      }
    
      async initializeSSLPinning() {
        try {
          await this.http.setSSLCertMode('pinned');
          console.log('SSL Pinning initialized successfully');
        } catch (error) {
          console.error('SSL Pinning initialization failed:', error);
        }
      }
    }

Confronto tra implementazioni Android e iOS

Ecco un rapido confronto sulle differenze di SSL pinning tra Android e iOS:

Funzionalità Android iOS
File di configurazione network_security_config.xml Info.plist
Percorso del certificato res/raw directory Bundle dell'app
Metodo di validazione configurazione XML ATS e validazione runtime
Supporto Plugin Plugin nativi + custom Plugin nativi + custom

Successivamente, analizzeremo le strategie di testing e gli errori comuni per aiutarti a garantire che la tua configurazione di SSL pinning sia affidabile e sicura.

Test e correzioni

Testare la configurazione SSL pinning è essenziale per prevenire attacchi Man-In-The-Middle (MITM). Ecco come assicurarti che l'implementazione sia sicura e come risolvere i problemi comuni.

Test attacchi MITM

Puoi usare tool di proxy come Charles Proxy per simulare attacchi MITM e verificare la tua configurazione SSL pinning.

Testing con Charles Proxy

Segui questi passaggi per testare con Charles Proxy:

  1. Installa il certificato root di Charles sul tuo dispositivo.
  2. Abilita l'SSL Proxying nelle impostazioni di Charles.
  3. Aggiungi il tuo dominio API alla lista SSL proxying.
  4. Configura il dispositivo per instradare il traffico tramite il proxy Charles.

Se l'SSL pinning è implementato correttamente, dovresti vedere errori di validazione del certificato nei log dell'app durante il test.

Test della configurazione di rete

Usa questo snippet code per validare la connessione con un certificato pinned:

// Validate pinned certificate connection
try {
    const response = await Http.get({
        url: 'https://api.example.com/test',
        headers: { 'Content-Type': 'application/json' }
    });
    console.log('Connection successful');
} catch (error) {
    console.error('Certificate validation failed:', error);
}

Soluzioni ai problemi comuni

Ecco alcuni problemi tipici di SSL pinning e come risolverli:

Tipo di errore Causa comune Soluzione
Mismatch del certificato Hash errato nella configurazione Verifica l'hash del certificato con OpenSSL.
Path Issues Posizione del certificato errata Controlla i percorsi dei certificati specifici per piattaforma.
Problemi di formato Formato del certificato non valido Converti il certificato nel formato corretto (es. PEM o DER).
Timeout di rete Configurazione di pinning errata Verifica le impostazioni di sicurezza della rete.

Verifica dell'hash del certificato

Per verificare che l'hash del certificato corrisponda alla tua configurazione, usa questo comando OpenSSL:

# Generate the correct certificate hash
openssl x509 -in certificate.pem -pubkey -noout | \
openssl rsa -pubin -outform der | \
openssl dgst -sha256 -binary | base64

Dopo aver risolto eventuali errori, assicurati che il processo di aggiornamento del certificato funzioni correttamente.

Test dell'aggiornamento certificato

Includi sia un certificato primario che uno di backup nella configurazione per evitare downtime durante gli aggiornamenti.

Processo di test aggiornamenti

Ecco un esempio di come testare la rotazione dei certificati:

// Rotate certificates
const certificates = {
    current: 'sha256/current_certificate_hash',
    backup: 'sha256/backup_certificate_hash'
};

// Test both certificates
async function validateCertificates() {
    try {
        await testConnection(certificates.current);
        console.log('Primary certificate valid');
    } catch {
        try {
            await testConnection(certificates.backup);
            console.log('Backup certificate valid');
        } catch {
            console.error('All certificates invalid');
        }
    }
}

Monitoraggio scadenza certificati

Controlla regolarmente la scadenza dei certificati per evitare interruzioni:

# Check certificate expiration date
openssl x509 -enddate -noout -in certificate.pem

Infine, testa la configurazione in varie condizioni, tra cui WiFi stabile, dati mobili, scenari offline e transizioni di rete, per garantire sicurezza e funzionalità robuste.

Gestione SSL Pinning

Una volta configurato l'SSL pinning, il passo successivo è gestire il pinning di certificati e chiavi per mantenere alta la sicurezza nel tempo.

Certificate Pinning vs. Key Pinning

Per quanto riguarda l'SSL pinning, esistono due approcci principali: il certificate pinning e il public key pinning. Ognuno ha i suoi vantaggi, specialmente per app Capacitor:

Funzionalità Certificate pinning Public key pinning
Livello di sicurezza Alto – pinning dell'intero certificato Molto alto – pinning della sola chiave pubblica
Manutenzione Aggiornamenti necessari a ogni rinnovo Meno frequenti, sopravvivono ai rinnovi
Implementazione Più facile da implementare Setup iniziale più complesso
Impatto sullo storage Maggiore consumo di memoria Requisiti di memoria minimi
Frequenza degli update Ogni rinnovo del certificato Solo al cambio della chiave pubblica

Questa analisi può aiutarti a decidere quale metodo si adatta meglio alla strategia di manutenzione a lungo termine della tua app.

Automazione degli aggiornamenti dei certificati

Mantenere i certificati aggiornati è fondamentale per proteggere le comunicazioni di API. Capgo offre una soluzione ottimizzata automatizzando questi aggiornamenti, eliminando la necessità di nuove sottomissioni agli store. Ecco cosa offre:

  • Tassi di adozione rapidi: Gli update vengono preparati, tracciati e raggiungono un tasso di adozione del 95% in 24 ore [1].
  • Consegna crittografata: Gli update sono completamente crittografati end-to-end.
  • Monitoraggio in tempo reale: Le analytics forniscono insight sul successo degli update.

Come implementarlo:

  • Configura gli Update Automatici
    Integra la pipeline CI/CD di Capgo per gestire automaticamente gli aggiornamenti dei certificati. I piani Capgo partono da $12/mese e includono update OTA più circa 15 Native Build al mese. I minuti extra di build vengono fatturati al minuto tramite crediti.

  • Monitora le metriche dei certificati
    Usa la dashboard analytics di Capgo per monitorare metriche chiave, come il tasso globale di successo degli update, che attualmente è dell'82% [1].

Queste misure aiutano a proteggere la tua app da potenziali attacchi MITM (Man-in-the-Middle).

Linee guida sulla sicurezza dell'App Store

Sia l'Apple App Store che il Google Play Store impongono requisiti di sicurezza rigorosi per l'SSL pinning. Ecco una panoramica delle loro linee guida:

Apple App Store:

  • I certificati devono essere aggiornati tramite crittografia end-to-end.
  • La validazione corretta dei certificati è obbligatoria.
  • È richiesta la documentazione di sicurezza durante il processo di review.

Google Play Store:

  • Updates must use approved mechanisms.
  • La trasparenza nella gestione dei certificati è essenziale.
  • Devono essere previsti dei meccanismi di fallback.

La soluzione di Capgo rispetta tutti questi requisiti permettendo aggiornamenti istantanei [1]. Per un approccio di sicurezza robusto, considera di combinare i classici aggiornamenti degli store con i live update tramite Capgo. Questa strategia ibrida garantisce che la tua app rimanga sicura e conforme senza ritardi inutili.

Conclusione

Per proteggere le tue app Capacitor dagli attacchi MITM, implementare l'SSL pinning è fondamentale. Inserendo i dati dei certificati fidati direttamente nell'app, puoi rafforzare significativamente la sicurezza delle tue comunicazioni API.

Per un'implementazione efficace, tieni presenti questi aspetti critici:

  • Gestione dei certificati: Dai priorità ad aggiornare e monitorare regolarmente i certificati per evitare potenziali interruzioni del servizio.
  • Workflow di sviluppo: Inserisci meccanismi di bypass per gli ambienti di test, garantendo al contempo protocolli di sicurezza rigorosi per i build di produzione.
  • Linee guida delle piattaforme: Rispetta i requisiti di sicurezza di Apple App Store e Google Play Store per garantire la conformità.

L'SSL pinning gioca un ruolo chiave nel proteggere i dati degli utenti e nel mantenere l'integrità della tua app. Se abbinato alle misure di sicurezza più ampie discusse in precedenza, aiuta a creare un ambiente più sicuro per l'app.

FAQ

::: FAQ

Quali rischi si corrono se non si usa l'SSL pinning in un'app Capacitor?

Se l'SSL pinning non è configurato in un'app Capacitor, l'app diventa un bersaglio più facile per attacchi Man-in-the-Middle (MITM). Questi attacchi permettono a malintenzionati di intercettare e manomettere i dati tra l'app e il server. Ciò potrebbe esporre informazioni sensibili come le credenziali dell'utente o chiavi API.

Inoltre, senza SSL pinning, gli attaccanti potrebbero usare certificati falsi o compromessi per fingersi un server affidabile. Questo aumenta il rischio di data breach. Implementando l'SSL pinning, puoi garantire comunicazioni sicure e proteggere i tuoi utenti da questi rischi. :::

::: FAQ

Quali sono le differenze chiave tra Android e iOS nell'implementare e gestire l'SSL pinning nelle app Capacitor?

L'SSL pinning funziona in modo leggermente diverso su Android e iOS, grazie alle loro API e configurazioni di sicurezza specifiche.

Su Android, gli sviluppatori spesso si affidano a librerie di rete come OkHttp o usano impostazioni native per configurare l'SSL pinning. Tuttavia, quando è necessario aggiornare i certificati, solitamente bisogna rilasciare una nuova versione dell'app.

Su iOS, l'SSL pinning viene solitamente gestito tramite URLSession o librerie di terze parti. Proprio come su Android, ogni aggiornamento dei certificati va gestito con cura per evitare che la comunicazione API si interrompa.

Entrambe le piattaforme richiedono un'attenzione costante alla scadenza dei certificati e ai relativi aggiornamenti per mantenere sicure le connessioni API. Test regolari sono essenziali per individuare tempestivamente problemi di compatibilità e proteggersi da attacchi man-in-the-middle (MITM) attacks. :::

::: FAQ

Come posso automatizzare l'aggiornamento dei certificati SSL e garantire che la mia app Capacitor rispetti i requisiti di sicurezza degli app store?

Sebbene l'articolo non approfondisca strumenti o strategie per automatizzare l'aggiornamento dei certificati SSL o garantire la conformità alle linee guida di sicurezza degli app store, ci sono diversi passaggi per potenziare la sicurezza della tua app. Una misura efficace è implementare l'SSL pinning nella tua app Capacitor. Questo aiuta a proteggere la tua app da attacchi man-in-the-middle (MITM), che potrebbero compromettere dati sensibili.

Per gestire i Live Update e semplificare la manutenzione delle app, piattaforme come Capgo possono fare la differenza. Rendono più facile rilasciare aggiornamenti rispettando le regole degli app store, garantendo un'esperienza migliore sia ai developer che agli utenti. :::

Continua da SSL Pinning per app Capacitor

Se stai usando SSL Pinning per le app Capacitor per pianificare sicurezza e compliance, collegalo a Crittografia per i dettagli di implementazione della crittografia, Conformità per i dettagli di implementazione in Compliance, Security Scanner di Capgo per il workflow del prodotto in Capgo Security Scanner, Sicurezza Capgo per il workflow del prodotto in Capgo Security, e Trust Center di Capgo per il workflow del prodotto in Capgo Trust Center.

Live updates per le app Capacitor

Quando un bug nel web-layer è live, rilascia la fix tramite Capgo invece di aspettare giorni l'approvazione degli store. Gli utenti ricevono l'update in background, mentre le modifiche native restano nel normale processo di review.

Ultimi articoli dal blog

Capgo ti offre gli insight migliori che ti servono per creare un'app mobile davvero professionale.