Je souhaite configurer une chaîne de certificats, avec une autorité de certification "racine" auto-signée en haut, qui signe les sous-autorités de certification, qui peuvent ensuite signer les certificats client et serveur. Lors de la configuration de openssl.cnf
, j’ai remarqué un paramètre keyUsage
, qui doit apparemment être défini sur la fonction pour laquelle la clé est supposée être utilisée. Bien que les valeurs des paramètres soient documentées, je ne trouve aucune information sur celles à utiliser dans certaines circonstances.
Que signifient les valeurs keyUsage
et que dois-je utiliser dans les situations suivantes?
De plus, les autres extensions doivent-elles être spécifiées avec certaines valeurs, telles que nsCertType
?
Tout certificat d'autorité de certification, qu'il s'agisse d'une racine ou d'un intermédiaire, doit avoir l'extension keyCertSign
name__. Si vous souhaitez également signer une liste de révocation (CRL) avec le certificat de l'autorité de certification, vous devez également ajouter cRLSign
name__. Toute autre utilisation de clé peut et doit être évitée pour les certificats d'AC.
La liste des valeurs acceptées par openssl est documenté ici .
Pour les certificats d'entité finale, vous pouvez utiliser l'une des autres keyUsages décrites par openssl. Assurez-vous simplement de ne pas inclure les extensions d'autorité de certification mentionnées ci-dessus. Du point de vue de la sécurité, vous ne devez pas utiliser plus de keyUsages que neccesary (en particulier, il est conseillé d’utiliser des certificats distincts pour la signature et le chiffrement), mais ce n’est pas une exigence stricte.
Notez qu'en dehors des keyUsages classiques, il existe également l'extension extendedKeyUsage
(EKU), qui n'est pas limitée aux valeurs prédéfinies dans le RFC mais peut théoriquement contenir n'importe quel OID. Les valeurs connues sont, par exemple, les certificats permettant de signer des horodatages ou des réponses OCSP.
Vous n'avez pas besoin d'utiliser nsCertType
name__. Celles-ci, ainsi que toutes les autres extensions ns *, avaient déjà été définies par Netscape et ne devraient plus être utilisées. Vous ne trouverez probablement aucun logiciel autour de les utiliser.
Pour les autres extensions, la seule chose absolument requise est l’extension basicConstraints
qui a un drapeau booléen CA
que vous devez définir en conséquence. Les extensions AuthorityKeyIdentifier et subjectkeyIdentifier sont également fortement recommandées.