Posso usare un certificato di firma del codice come certificato TLS?

3

Ad esempio, sviluppo un software che viene utilizzato da alcuni clienti. Firmano il software utilizzando i loro certificati di firma del codice. Il software ha un client e una parte server collegati tra loro tramite TLS.

La parte client funziona su Windows e posso verificare se la firma digitale è corretta o meno. Quindi posso estrarre il nome del firmatario dal certificato (la parte pubblica) e usarlo per alcune verifiche aggiuntive.

Posso utilizzare i certificati di firma codice per la parte server come certificati TLS e verificare il nome del firmatario anziché FQDN? Capisco che non è tipico. È sicuro? Ad esempio, i diversi certificati di firma del codice aziendale possono avere lo stesso CN (il nome del firmatario)? Quali ulteriori problemi potrei avere qui?

    
posta Eugen 01.11.2016 - 20:23
fonte

3 risposte

2

Se hai il pieno controllo del cliente, puoi ovviamente configurare le tue routine di validazione e ignorare quelle esistenti. In effetti, è possibile ridurre i controlli per la convalida della chiave pubblica del certificato (vale a dire il blocco). Ma si raccomanda di attenersi a progetti esistenti e collaudati e di non reinventare la propria convalida poiché questi sono aspetti critici e facili da incasinare.

Tuttavia, considerando che si desidera comunque utilizzare il processo di convalida normale il più possibile e solo regolarlo quando necessario, potrebbero esserci più ostacoli rispetto al soggetto che non corrisponde al nome host di destinazione: un certificato ha una chiave diversa usi. Per la firma del codice hai solo bisogno di firmare qualcosa. Ma per l'utilizzo con TLS potresti anche necessario possibilità di utilizzare il certificato per keyEncipherment , una funzionalità che non è necessaria per la firma del codice e che potrebbe quindi non essere l'utilizzo consentito del certificato. Inoltre, i certificati server TLS in genere dispongono di un utilizzo chiave esteso che consente esplicitamente l'utilizzo dell'autenticazione server mentre i certificati di firma codice non sono necessari.

Un altro problema è che riutilizzando il certificato di firma del codice per il server probabilmente lo esponi maggiormente agli attacchi. Il furto di certificati di firma del codice e l'uso di questi certificati attendibili per firmare malware non è in realtà raro e avere la chiave privata per questo certificato su un host che è forse esposto su Internet sembra una cattiva idea, considerando la frequenza con cui tali host vengono violati.

    
risposta data 01.11.2016 - 20:58
fonte
1

Dalla mia comprensione del dominio del problema, penso che non ci sia molto da discutere

  • You gave a software package to your client
  • client having a code signing certificate , client signs the code ( both parts client part(CL) and server part (SR))
  • Client install the client part on his client machine (CLM) as it is signed by Trusted CA ( i assume ) CLM OS will trust it and will get installed
  • similarly the SR will be installed on the SRM i.e.. server machine

fino ad ora la parte di firma del codice parte del certificato è finita, quindi passiamo al secondo problema

Can I use the code signing certificates for the server part as TLS certificates

Come @steffen ha sottolineato l'estensione KEY USAGE

Affinché la tua installazione funzioni con le librerie standard di crittografia, avrai bisogno di due estensioni di utilizzo chiave per la tua configurazione

Encipherment chiave:

richiesto al server in modo che il client invii segretamente il materiale per la codifica al server

Firma digitale:

  • Richiesto dal server per dimostrare la sua identità (autenticazione dell'entità)

  • Necessario per la firma del codice

Se sono presenti queste estensioni è possibile utilizzare il certificato per la firma del codice e per il certificato lato server tls handshake

altrimenti se queste estensioni non sono presenti anche in questo caso, non c'è nulla di male nell'usare lo stesso certificato per TLS se si tiene la chiave privata al sicuro mantenendo il proprio computer sicuro. Crittograficamente questo non è il modo per dire che non è sicuro da usare.

verify the signer name instead of FQDN

Questo dipende anche da quanto accuratamente mappi l'entità e la relativa prova associata, che è anche molto semplice da ottenere nel tuo caso, in quanto devi mappare il codice identificativo dell'autore (mappalo con il numero di serie tramite il tuo codice software)

    
risposta data 02.11.2016 - 12:54
fonte
0

Ci sono molti problemi seri con il tuo design. Non andrei oltre in questa direzione, invece userei la comunicazione standard SSL / TLS con i certificati appropriati per eseguire la crittografia e l'autenticazione delle comunicazioni.

Poche cose sono male nel tuo design:

1) I certificati di firma del codice sono destinati alla firma del codice. Un tentativo di abuso del certificato interrompe l'intera PKI.

2) I develop a software which is used by some customers. They sign the software using their code signing certificates - questo è il modo sbagliato. I clienti NON firmano nulla che non possiedono. Una volta firmati, diventeranno responsabili di tutto ciò che in realtà non hanno fatto. È il tuo software e tu ne sei responsabile. Puoi approvare la tua responsabilità / responsabilità firmando i binari, ma i tuoi clienti non sono responsabili. In determinate circostanze questo potrebbe sollevare problemi legali.

3)

For instance, can different company code signing certificates have same CN (the name of signer)?

in effetti, sì. Due società possono avere attributi CN identici nei certificati di firma del codice (sebbene l'intero campo Oggetto non corrisponda). Ciò può accadere quando i certificati vengono rilasciati a privati e non è raro che gli individui abbiano lo stesso nome e cognome. Ma gli altri attributi (come detto) saranno diversi.

Inoltre, dovrai sviluppare da zero la tua procedura di convalida, in quanto potrebbe essere rapidamente vulnerabile. Non provare a reinventare la ruota quando ci sono degli standard collaudati e provati da usare. Il blocco dei certificati sembra una buona idea finché non affronti la gestione dei certificati. Con il pinning dei certificati ci sono molti problemi con la gestione dei certificati e uno dei motivi per cui questa tecnica non è molto diffusa in internet. Questo articolo vale la pena di leggere: La chiave pubblica HTTP si blocca?

    
risposta data 01.11.2016 - 21:21
fonte

Leggi altre domande sui tag