Utilizzo della chiave del certificato di root (entità finale non autofirmata)

9

Questa discussione non include certificati di entità finale autofirmati per host come server Web e server di posta.

La configurazione predefinita di OpenSSL per un certificato CA ha il seguente keyUsage :

  • cRLSign
  • keyCertSign

Il certificato federale PKI (Public Key Infrastructure) X.509 e Il profilo di estensioni CRL ha il seguente keyUsage :

  • cRLSign
  • keyCertSign

Microsoft utilizza quanto segue per i suoi certificati di origine (da Come rendere un'autorità di certificazione autonoma ):

  • Firma del certificato
  • Firma CRL off-line
  • Firma CRL

RFC5280 definisce i bit di utilizzo della chiave del certificato dell'emittente CA o CRL e dichiara quanto segue MAGGIO essere presente per una CA root usando RSA:

  • DigitalSignature
  • nonRepudiation
  • keyEncipherment
  • dataEncipherment
  • keyCertSign
  • cRLSign

Per una chiave DSA in RFC5280 , è possibile impostare il MAGGIO seguente:

  • DigitalSignature
  • nonRepudiation
  • keyCertSign
  • cRLSign

E le chiavi ECDSA sotto RFC5280 , il seguente MAGGIO può essere impostato:

  • DigitalSignature
  • nonRepudiation
  • KeyAgreement
  • keyCertSign
  • cRLSign.

E poi RFC5280 continua a dire riguardo all'ECDSA:

if the keyUsage extension asserts keyAgreement then it MAY assert either encipherOnly and decipherOnly

Perché IETF è così veloce e libero con l'uso delle chiavi?

Perché keyEncipherment e dataEncipherment sono consentiti per un certificato radice RSA?

Perché l'uso di un accordo di chiave è consentito su un certificato ECDSA?

L'utilizzo di IETF è un caso in cui lo standard è stato creato per adattarsi alle pratiche esistenti?

    
posta jww 23.01.2014 - 13:08
fonte

1 risposta

8

L'estensione Key Usage , se presente, contiene l'elenco completo dei tipi di utilizzo che sono ammessi con la chiave pubblica. Quando un sistema elabora un certificato, lo fa per un determinato scopo e, pertanto, deve verificare che l'estensione Key Usage , se presente, consenta tale utilizzo. In particolare, quando un sistema analizza un certificato CA e desidera utilizzare la sua chiave pubblica per verificare la firma su un altro certificato (che la CA ha presumibilmente emesso), allora si tratta di un utilizzo del "segno di certificato"; quindi se il certificato CA contiene un'estensione Key Usage , il sistema richiederà che l'estensione contenga il flag keyCertSign .

Nulla impedisce a un'estensione Key Usage di contenere anche altri flag! La verifica è solo positiva: i sistemi verificano se la bandiera che vogliono sia effettivamente lì; non controllano mai che una bandiera che non vogliono sia assente.

Poiché una CA dovrebbe emettere certificato e CRL, dovrebbe avere, in generale, i flag keyCertSign e cRLSign . Questi due flag sono sufficienti . Se la CA non intende firmare il proprio CRL, può omettere il flag cRLSign ; tuttavia, una CA senza il flag keyCertSign ha poco senso. Si potrebbe voler includere altri flag se la chiave CA è pensata per fare anche altre cose (sebbene ciò non sia raccomandato: una regola generale è che una chiave crittografica dovrebbe essere usata solo per una cosa). Si può immaginare, ad esempio, eseguire alcuni key escrowing crittografando la chiave privata dei certificati emessi con la chiave pubblica della CA, in modo che la CA possa recuperare la chiave privata in determinate condizioni (questo non è un male idea quando la chiave dell'utente è intesa per la crittografia dei dati).

Pertanto, nulla impedisce all'estensione Key Usage di contenere altri flag. In alternativa, l'estensione Key Usage potrebbe mancare del tutto; questo è equivalente a "tutti gli usi consentiti".

La "firma CRL off-line" di Microsoft è solo un altro nome per "firma CRL". In effetti, la pagina che colleghi a questo dice:

To apply this key usage if a CA certificate is requested, type the following at a command prompt, and then press ENTER:

echo 03 02 01 06>File_Name.txt

Qui riconosciamo la codifica ASN.1 / DER di un BIT STRING di lunghezza 7 bit, con i bit 5 e 6 impostati e i bit da 0 a 4 cancellati; questa è la codifica di un'estensione Key Usage con flag keyCertSign e cRLSign . Sebbene utilizzino la propria terminologia, Microsoft in realtà si conforma allo standard per quel punto (non hanno inventato un nuovo flag di utilizzo delle chiavi non standard per la "firma CRL offline").

Tutto quanto sopra è la normale interpretazione dei certificati . Accade così che, per quanto riguarda gli standard, "certificati CA radice" non esistano . Una "root" è chiamata anchor anchor e consiste principalmente in un nome (DN) e una chiave pubblica. È Tradizionale codificare l'ancora di trust come "certificati", ovvero la sequenza di byte che seguono le regole di codifica dei certificati (tali certificati sono spesso autofirmati, perché il formato di un certificato ha un valore non opzionale slot per una "firma", quindi ci deve essere qualcosa in quello slot).

Poiché non è standard, l'interpretazione dell'estensione del certificato in una struttura simile a un certificato è aperta alle varianti locali. Alcune implementazioni interpretano l'estensione Key Usage in un certificato radice nei modi illustrati sopra. Alcuni ignorano completamente quell'estensione.

In generale, è sicuro (per l'interoperabilità) riempire i certificati CA radice con contenuti che sarebbero perfettamente validi se quel "certificato" fosse reale, invece di un comodo contenitore di codifica per un'ancora di fiducia.

    
risposta data 23.01.2014 - 17:12
fonte