Applicazione client abilitata per SSL OpenSSL, verifica server?

3

Sto scrivendo un'applicazione client abilitata per SSL OpenSSL che si connette a un server di Google. Ho l'SSL funzionante e posso monitorare il traffico e vedere che è sicuramente crittografato. Sto usando la funzione API OpenSSL SSL_CTX_load_verify_locations per caricare un file .pem contenente certificati di root pubblici per verificare che il server sia un server affidabile ... credo!?

Ho eseguito dei LOAD di ricerca ma non riesco a trovare una semplice descrizione di ciò che dovrei fare per assicurarmi di parlare con un server di Google. Sta usando un file .pem con root CA è la cosa giusta da fare? Come faccio a sapere che sto parlando con Google e non con qualcun altro nell'elenco di fiducia?

Inoltre, ho intenzione di distribuire il file .pem insieme all'applicazione, oppure può essere compilato nella mia applicazione?

Qualsiasi aiuto molto apprezzato.

    
posta LongTom 26.05.2014 - 00:08
fonte

2 risposte

1

Il modo in cui controlli per vedere se un certificato è valido è controllando i parametri del certificato (scadenza, oggetto, ecc.) e verificando che il certificato sia stato firmato da un'autorità fidata.

Per quanto riguarda l'autorità di fiducia per i certificati Google, Google pubblica qui un documento Domande frequenti . Se segui le loro linee guida dovresti stare bene.

    
risposta data 26.05.2014 - 04:21
fonte
1

In primo luogo, ti chiedi se ti fidi di tutti i 100 di CA che sono considerati attendibili dal browser, ognuno dei quali può firmare un certificato per google e ognuno può creare sub-CA che hanno di nuovo le stesse possibilità ecc. Se credi che questo processo è salvare guardare gli incidenti con Comodo e DigiNotar nel 2011.

Se vuoi migliorare, fai il blocco dei certificati, ad es. o salva un'impronta digitale del certificato stesso o la sua chiave pubblica e assicurati che questo sia ciò che ottieni quando ti connetti al server.

E ovviamente dovresti fare la corretta verifica del certificato, ad esempio:

  • lifetime (not_after, not_before)
  • percorso verificato per una CA radice affidabile
  • controlla la revoca del certificato e di tutta la CA secondaria all'interno del percorso della CA principale, con i CRL correnti o con OCSP e non ignorare gli errori OCSP. OpenSSL può farlo per CRL se si scarica il CRL da solo e può essere d'aiuto con OCSP anche se non ci sono API documentate
  • e non dimenticare di verificare il nome host con la sezione CN o SAN in base a RFC2818 e RFC6125. Per questo non c'è alcun supporto con le versioni OpenSSL attualmente rilasciate, quindi devi farlo a mano e non commettere gli stessi errori come molti altri (come l'autorizzazione di più caratteri jolly o caratteri jolly non solo nell'etichetta più a sinistra)
risposta data 26.05.2014 - 07:00
fonte

Leggi altre domande sui tag