Basandosi sul "soggetto" di un certificato x509

4

Un po 'di background. La nostra organizzazione sta lavorando su un formato di documento che verrà ingerito dal nostro software. Stiamo utilizzando il formato CMS per verificare l'integrità (convalidando la firma). Il formato del messaggio CMS conterrà la catena del firmatario e quindi lo useremo anche per verificare la fiducia rispetto al portachiavi di sistema predefinito (i cacerts di Java nel nostro caso).

Per la nostra prima versione vorremmo verificare che la nostra organizzazione sia colui che ha firmato il documento. Il nostro team ha esaminato blocco dei certificati . In questo caso includiamo una copia del certificato x509 che ci aspettiamo essere il cantante e confermiamo (dopo aver effettuato la convalida della firma e la valutazione di attendibilità) che il firmatario è uguale al previsto. Abbiamo deciso di non farlo per un paio di motivi. La ragione principale è che se una chiave è stata compromessa o un certificato scaduto dovremmo rispedire il nostro software o fare in modo che i nostri utenti apportino una modifica alla configurazione (cambia il vecchio certificato per un nuovo). Preferiamo lasciare che un CRL delle CA pubbliche si prenda cura della revoca per noi.

Un'idea a cui ci stiamo impegnando è verificare che l'"organizzazione" dei soggetti firmatari (verificati) x509 sia la nostra organizzazione. Questo sembrava un buon compromesso tra il blocco dei certificati e la fiducia in chiunque avesse un certificato pre-attendibile.

In generale, è giusto fidarsi delle informazioni fornite nell'oggetto del certificato se ci si fida dell'emittente del certificato? OSSIA Posso essere sicuro che ogni Certificate Authority inclusa in un trust store predefinito non compromesso (di nuovo, i cacerts di Java per noi) avrà verificato che l'organizzazione elencata nell'oggetto è l'organizzazione attuale? Si estende ad altri campi tematici come stato, locale, email, ecc.? Al di fuori del pinning del certificato, c'è un paradigma che mi manca per realizzare questo genere di cose?

    
posta Staros 26.04.2016 - 21:58
fonte

2 risposte

1

Indirizzamento dei tuoi punti:

Our team has looked into certificate pinning [of the document signing cert]. ... We decided against it for a couple reasons. The biggest reason is that if a key was compromised or a cert expired we'd have to re-ship our software ... We'd rather let a public CAs CRL take care of revocation for us.

Sì, è logico. Infrastruttura a chiave pubblica (es. Gerarchie CA) esiste per risolvere problemi esattamente come questo, quindi approfittane!

Can I be positive that every Certificate Authority included within a non-compromised default trust store (again, Java's cacerts for us) will have verified the the organization that's listed in the subject is the actual organization?

Sì, questo è un po 'l'intero motivo per cui le CA esistono e che sono fidate pubblicamente. Detto questo, penso che tu stia davvero cercando di chiedere qualcosa di diverso. Questo non garantisce unicità; cioè che non ci sono altri certificati validi là fuori con un campo Organization che corrisponde al tuo. Ad esempio, considera che la tua azienda, "Flower Power, inc", è incorporata negli Stati Uniti. Potrei incorporare una società nuova di zecca con il nome "Flower Power, inc" in Germania, e non c'è motivo per cui un CA dovrebbe negarmi un certificato con ou=Flower Power, inc . Ti consiglierei di utilizzare qualcosa di ancora più unico, come il nome di dominio del tuo sito web o il DN completo della tua organizzazione, incluso il codice paese, che credo stia ottenendo con la frase successiva.

Potresti essere interessato alla nuova tecnologia di Google denominata Trasparenza certificato . L'idea di CT è che tutte le CA pubblicamente accreditate devono pubblicare una copia di ogni certificato emesso su un server di registro pubblico. La tua azienda potrebbe impostare un'attività in background, ad esempio una volta all'ora, per controllare i registri CT di altri certificati contenenti lo stesso identificatore Organization di te. Ciò non impedirebbe alla CA di emetterlo, ma almeno verrai avvisato in caso di conflitto.

Does that extend to other subject fields such as state, local, email, etc?

Sì, dovrebbe.

Per essere più sicuro che la CA svolga bene il suo lavoro, potresti ottenere un certificato Extended Validation e richiedere che al tuo cliente venga presentato un certificato EV assicurandoti che contenga uno dei EV Policy OIDs menzionato in questa tabella .

Outside of certificate pinning, is there a paradigm I'm missing that's meant to accomplish this sort of thing?

Umm, se vuoi che tutto questo sia radicato nelle CA di fiducia pubblica, allora quello che stai facendo, anche se complicato, potrebbe essere la soluzione migliore.

Non ho alcuna familiarità con il formato CMS, ma il modo in cui vorrei architettarlo sarebbe quello di ospitare la CA radice e la CA intermedia in casa e usare sempre quella CA per emettere certificati di firma del documento per il tuo formato . In questo modo puoi davvero fidarti di qualsiasi certificato rilasciato da quella radice. Estendere che per consentire ad altre organizzazioni di firmare il tuo formato ti chiederebbe di diventare una CA pubblica, ma lo sforzo potrebbe valerne la pena se vuoi mantenere il controllo del tuo formato.

risposta data 27.04.2016 - 03:15
fonte
2

[Nota: nella prima formulazione della domanda, sembravano esserci alcuni problemi concettuali evidenti, la riformulazione li fissava. Lascerò comunque questa risposta qui nella speranza che sia utile a qualcuno.]

Nozioni fondamentali su PKI

Penso che dobbiamo tornare alle nozioni di base su come funzionano l'infrastruttura a chiave pubblica e i certificati. Sto per rubare spudoratamente una foto di una catena di certificati:

Inquestoscenario,Utente1sarebbeilfirmatariodeldocumento,chefirmaidocumentiutilizzandouncertificatoemessodaun'autoritàdicertificazione(CA),chepotrebbeessereunaCAradiceautofirmataopotrebbeessereunaCAintermediaconunaradicesopradiessa.

Convalidadiunacatenadicertificati

DiciamocheiocomeilclientedesideraconvalidarelafirmasuundocumentocheUtente1hafirmato.Laprocedurasarebbequesta:

  1. Convalidalafirmasuldocumento:cancellaildocumentomanualmente,quindiutilizzalachiavepubblicanelcertificatodiUtente1perverificarecheiltuohashcorrispondaaquellonelcamposignature.
  2. ConvalidailcertificatodiUtente1:Ok,socheildocumentoèstatofirmatodallachiaveidentificatanelcertificatodiUtente1.ComefaccioasaperechequestachiaveinrealtàappartieneaUser1echequestononèuncertificatofalso?Bene,questocertificatoèfirmatodaunIssuingCA,quindiconvalideròlafirmasulcertificatodiUtente1controlachiavenelcertificatoperl'IssuingCA.
  3. ConvalidailcertificatodiIssuingCA:Ok,socheilcertificatodiUtente1èstatofirmatodallachiaveidentificatanelcertificatodiIssuingCA.ComefaccioasaperechequestachiaveinrealtàappartieneaIssuingCAechequestononèuncertificatofalso?Bene,questocertificatoèfirmatodaRootCA,quindiconvalideròlafirmasulcertificatodiIssuingCAcontrolachiavenelcertificatoperilRootCA.
  4. ConvalidailcertificatodiRootCA:Beh,vistochequestocertificatoèautofirmato,nonc'èmododiconvalidarlo,quindicontrolleròchecorrispondabit-a-bit(ochelesuecorrispondenzehash)deicertificatichehobloccato(akaènelmionegoziodifiducia).

Latuasituazione

Dici:

Ourteamhaslookedintocertificatepinningbutdecidedagainstitforacouplereasons....We'dratherjustvalidateagainstthesystemtrustandletapublicCAsCRLtakecareofrevocationforus.

Alloracome,chiedo,staifacendoquestaconvalidasenonhaibloccatoilcertificatodiroot??ComestaiconvalidandolafirmasulCRLperassicurartichenonsiastatafalsificata?CosasuccedeseeseguoilmioOpenSSLCAsullamiamacchinaLinuxemimettouncertificatoconlostessosubjectcomecert(valeadirebit-per-bitidenticoaltuocertificatodifirmaeccettoperlachiavepubblicaelafirma)?Perfavoredimmicheiltuosoftwarelorifiuterà.

Rispostaalletuedomande

Ingeneral,isitvalidtotrusttheinformationthat'sprovidedinacertificate'ssubject?

Uhh,no.Amenochetunonabbiaconvalidatolefirmesulcertificatofinoauncertificatoradicechehaibloccato.

Isthereawayformetoobtainanx509certificatefromapre-trustedauthoritythatcontainsinformationinthesubjectthathasnotbeenvalidated?

Nonsonosicurodiavercapitoladomanda.Validatodachi?Primadiemettereilcertificato,un'autoritàdicertificazionepubblica(CA)dovrebbeverificaretutteleinformazionineicampiSubjecteSubjectAltName.Incasocontrario,alloraCAmeritadifallire.Iltuosoftwareclientdovrebbeancheconvalidareilcontenutodiuncertificatoognivoltachenevedeunoricalcandolefirmesuunaradicebloccata.

Dowehavetoverifythatthecertificatehasthe"Code Signing Certificate" extend key usage to get that guarantee?

Umm, dipende, sta firmando il codice? cioè sono i "documenti" in questione software eseguibile ( .exe files, o installer)? Altrimenti dovresti controllare l'estensione "Firma digitale". (Il punto di questa estensione è di assicurarsi che un certificato / chiave venga utilizzato per una cosa e una sola cosa: se una chiave viene "ri-proposta" a metà della sua vita, ciò può portare a vulnerabilità).

    
risposta data 27.04.2016 - 00:27
fonte

Leggi altre domande sui tag