ejbca_createca

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
ejbca_createca [2024/03/20 12:51] – créée nekanejbca_createca [2024/04/09 10:52] (Version actuelle) nekan
Ligne 1: Ligne 1:
-====== EJBCA - Création de certificats racine et intermédiaire ======+====== EJBCA - Création d'une autorité racine et intermédiaire ======
  
 <label type="success">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/20 12:51// <label type="success">Création</label>  --- //[[nekan@shyrkasystem.com|Nicolas THOREZ]] 2024/03/20 12:51//
  
 +Dans cette procédure, nous allons mettre en place une autorité de certification racine et une autorité intermédiaire pour valider différents certificats utilisateurs et/ou serveurs sur notre infrastructure.
 +
 +Réf. : [[https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-create-your-first-root-ca-using-ejbca|EJBCA (RootCA en RSA)]] \\
 +Réf. : [[https://doc.primekey.com/ejbca/tutorials-and-guides/tutorial-create-a-pki-hierarchy-in-ejbca|EJBCA (RootCA et SubCA en ECDSA)]]
 +
 +===== Création des profils =====
 +
 +==== Profil pour une autorité racine ====
 +
 +  * On se connecte sur l'interface d'administration de ''EJBCA'' et on va dans ''Certificate Profiles'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-016.png |}}</image>
 +  * On clone le profil par défaut ''ROOTCA'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-017.png |}}</image>
 +  * On nomme notre profil et on valide en cliquant sur ''Create from template'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-018.png |}}</image>
 +  * On édite le profil nouvellement créé :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-019.png |}}</image>
 +  * On commence par choisir :
 +    * **Available Key Algorithms** : ''ECDSA''
 +    * **Available ECDSA curves** : ''P-256 / prime256v1 / secp256r1''
 +    * **Validity or end date of the certificate** : ''10y''
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-020.png |}}</image>
 +  * Dans la section ''X.509v3 extensions'', on décoche :
 +    * **Authority Key ID**
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-021.png |}}</image>
 +  * Dans la section ''X.509v3 extensions : Names'', on décoche :
 +    * **Subject Alternative Name**
 +    * **Issuer Alternative Name**
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-022.png |}}</image>
 +  * Dans la section ''Other Data'' :
 +    * on décoche **LDAP DN order**
 +    * on sauvegarde les modifications en cliquant sur ''Save'' 
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-023.png |}}</image>
 +
 +==== Profil pour une autorité intermédiaire ====
 +
 +  * De retour sur la liste des profils, on clone désormais le profil par défaut ''SUBCA'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-024.png |}}</image>
 +  * On nomme le nouveau profil et on clique sur ''Create from template'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-025.png |}}</image>
 +  * On édite le profil nouvellement créé :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-026.png |}}</image>
 +  * On commence par choisir :
 +    * **Available Key Algorithms** : ''ECDSA''
 +    * **Available ECDSA curves** : ''P-256 / prime256v1 / secp256r1''
 +    * **Signature Algorithm** : ''Inherit from Issuing CA''
 +    * **Validity or end date of the certificate** : ''5y''
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-027.png |}}</image>
 +  * Dans la section ''X.509v3 extensions'', à la ligne ''Path Length Constraint'' :
 +    * on coche ''Add...''
 +    * on entre la valeur ''0'' dans la zone ''Value''
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-028.png |}}</image>
 +  * Dans la section ''X.509v3 extensions - Validation data'', on coche :
 +    * **CRL Distribution Points**
 +    * **Use CA defined CRL Distribution Point**
 +    * **Authority Information Access**
 +    * **Use CA defined OCSP locator**
 +    * **Use CA defined CA issuer**
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-029.png |}}</image>
 +  * Dans la section ''Other Data'' :
 +    * on décoche **LDAP DN order**
 +    * on sauvegarde en cliquant sur ''Save''
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-030.png |}}</image>
 +
 +===== Créations des clés =====
 +
 +Maintenant que les profils sont prêts, il nous faut créer les clés privées nécessaires aux différentes autorités. La procédure suivante est donc à réaliser deux fois, une pour l'autorité racine et une pour l'autorité intermédiaire. 
 +
 +  * Sur l'interface d'administration, on va dans le menu ''Crypto Tokens'' et on clique sur ''Create new...'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-031.png |}}</image>
 +  * Dans la page qui s'affiche :
 +    * on nomme le jeu de clés
 +    * on entre un mot de passe d'enregistrement. Ce mot de passe est à conserver, il sera utile pour réactiver les clés en cas de redémarrage de l'instance.
 +    * on confirme le mot de passe
 +    * on sauvegarde avec le bouton ''Save''
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-032.png |}}</image>
 +  * Dans la section qui apparaît en dessous, on va créer 3 clés (une pour le chiffrement, une pour la signature et une pour tester l'intégrité de l'autorité). Pour cela, on choisit un nom pour chacune, un protocole de chiffrement selon le tableau suivant et on clique sur ''Generate new key pair'' :
 +^Clé   ^Protocole   ^
 +|SignKey   |ECDSA P-256 / prime256v1 / secp256r1   |
 +|EncryptKey   |RSA 4096   |
 +|TestKey   |ECDSA P-256 / prime256v1 / secp256r1   |
 +  * Ce qui nous donne :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-033.png |}}</image>
 +
 +===== Création des autorités =====
 +
 +Si les deux profils d'autorités et les deux jeux de clés sont prêt, on peut passer à la création des autorités de certifications.
 +
 +==== Autorité racine ====
 +
 +  * On va dans ''Certification Authorities'', on donne un nom pour notre autorité racine dans la section ''Add CA'' et on clique sur ''Create...'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-034.png |}}</image>
 +  * On commence par définir :
 +    * **Crypto Token** : On choisit le jeux de clés créé pour l'autorité racine.
 +    * **Signing Algorithm** : On choisit ''SHA512withECSDSA''.
 +    * **defaultKey** : On choisit la clé créée pour le chiffrement.
 +    * **certSignKey** : On choisit la clé créée pour la signature.
 +    * **testKey** : On choisit la clé créée pour les tests d'intégrité.
 +    * **Description** : Optionnel, cette description permet de mieux identifier l'autorité.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-035.png |}}</image>
 +  * Dans la section ''CA Certificate Data'', on définit :
 +    * **Subject DN** : On entrera dans une seule chaîne de caractère, 3 champs séparés par des virgules. On aura un champs ''CN='' qui indique le nom de l'autorité, un champs ''O='' qui indique le nom de l'organisation ou entreprise de l'autorité et un champs ''C='' pour indiqué le pays de l'autorité.
 +    * **Signed By** : On sélectionne ''Self Signed''.
 +    * **Certificate Profile** : On choisit le profil créé pour l'autorité racine.
 +    * **Validity** : On entre ''10y''.
 +    * **LDAP DN order** : on décoche la case ''Use''.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-036.png |}}</image>
 +  * Dans la section ''CRL Specific Data'', on définit :
 +    * **CRL Expire Period** : On choisira ''3mo''.
 +    * **CRL Overlap Time** : On choisira ''0m''.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-037.png |}}</image>
 +  * On va en bas de la page et on clique sur ''Create'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-038.png |}}</image>
 +
 +==== Autorité intermédiaire ====
 +
 +  * On commence par créer une nouvelle autorité comme pour l'autorité racine, puis on définit :
 +    * **Crypto Token** : On choisit le jeux de clés créé pour l'autorité intermédiaire.
 +    * **Signing Algorithm** : SHA512withECSDSA
 +    * **defaultKey** : On choisit la clé créée pour le chiffrement.
 +    * **certSignKey** : On choisit la clé créée pour la signature.
 +    * **testKey** : On choisit la clé créée pour les tests d'intégrité.
 +    * **Description** : Optionnel, cette description permet de mieux identifier l'autorité.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-039.png |}}</image>
 +  * Dans la section ''CA Certificate Data'', on définit :
 +    * **Subject DN** : On entrera dans une seule chaîne de caractère, 3 champs séparés par des virgules. On aura un champs ''CN='' qui indique le nom de l'autorité, un champs ''O='' qui indique le nom de l'organisation ou entreprise de l'autorité et un champs ''C='' pour indiqué le pays de l'autorité.
 +    * **Signed By** : On sélectionne l'autorité racine créée précédemment.
 +    * **Certificate Profile** : On choisit le profil créé pour l'autorité intermédiaire.
 +    * **Validity** : On entre ''5y'' (la moitié de l'autorité racine).
 +    * **LDAP DN order** : on décoche la case ''Use''.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-040.png |}}</image>
 +  * Dans la section ''CRL Specific Data'', on définit :
 +    * **CRL Expire Period** : On choisira ''3mo''.
 +    * **CRL Issue Interval** : On choisira ''1d''.
 +    * **CRL Overlap Time** : On choisira ''0m''.
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-041.png |}}</image>
 +  * Enfin, comme pour l'autorité racine, on va au bas de la page et on valide en cliquant sur ''Create''.
 +
 +===== Déploiement des certificats racine et intermédiaire sur les postes clients =====
 +
 +Quels que soient les clients sur lesquels installer les certificats des autorités de certifications, il nous faut d'abord récupérer ces derniers. Pour cela, on peut les télécharger depuis la page de gestion (''RA Web'') dans le menu ''CA Certificates and CRLs'' en utilisant le bouton ''Download Certificate Bundle'' :
 +<image shape="thumbnail">{{ :linux:ejbca:ejbca-067.png |}}</image>
 +
 +==== Windows par GPO ====
 +
 +  * On place les certificats racine et intermédiaire dans le dossier ''SYSVOL'' du contrôleur de domaine.
 +  * On crée un ''GPO'' que l'on édite :
 +    * Dans ''Configuration ordinateur'', ''Stratégies'', ''Paramètres Windows'', ''Paramètres de sécurité'', ''Stratégie de clé publique'' :
 +      * **Autorités de certification racines de confiance** : on importe le certificat racine.
 +      * **Autorités de certification intermédiaires** : on importe le certificat intermédiaire.
 +
 +==== Linux via puppet ====
 +
 +  * Sur notre serveur ''puppet'', on place les certificats racine et intermédiaire au format ''PEM'' dans le dossier ''/etc/puppetlabs/code/environments/production/modules/file/files/'', par exemple sous les noms ''RootCA.pem'' et ''SubCA.pem''.
 +  * On crée la classe suivante :
 +<file>class install_ca {
 +
 +  # Création du dossier de dépôt
 +  file {'/usr/share/ca-certificates/extra':
 +    ensure  => 'directory',
 +    owner   => 'root',
 +    group   => 'root',
 +    mode    => '0750',
 +  }
 +  
 +  # Déploiement du certification racine
 +  file {'/usr/share/ca-certificates/extra/RootCA.pem':
 +    ensure  => 'present',
 +    owner   => 'root',
 +    group   => 'root',
 +    mode    => '0644',
 +    content => file('file/RootCA.pem'),
 +  }
 +  
 +  # Déploiement du certificat intermédiaire
 +  file {'/usr/share/ca-certificates/extra/SubCA.pem':
 +    ensure  => 'present',
 +    owner   => 'root',
 +    group   => 'root',
 +    mode    => '0644',
 +    content => file('file/SubCA.pem'),
 +  }
 +  
 +  # Ajout du certificat racine dans la bibliothèque des certificats  
 +  file_line { 'RootCA':
 +    ensure  => present,
 +    match   => "^extra/RootCA.pem",
 +    path    => '/etc/ca-certificates.conf',
 +    line    => 'extra/RootCA.pem',
 +  }
 +  
 +  # Ajout du certificat intermédiaire dans la bibliothèque des certificats
 +  file_line { 'SubCA':
 +    ensure  => present,
 +    match   => "^extra/SubCA.pem",
 +    path    => '/etc/ca-certificates.conf',
 +    line    => 'extra/SubCA.pem',
 +  }
 +  
 +  # Mise à jour de la bibliothèque en cas de modification
 +  exec { 'update-ca-certificates':
 +    command   => '/usr/sbin/update-ca-certificates',
 +    subscribe => [ 
 +      File['/usr/share/ca-certificates/extra/RootCA.pem'], 
 +      File['/usr/share/ca-certificates/extra/SubCA.pem'], 
 +    ],
 +    refreshonly => true,
 +  }
 +}
 +</file>
 +
 +  * Il ne reste plus qu'à ajouter la classe aux postes concernés dans le fichier ''node.pp'' ou à tous les postes via le fichier ''site.pp''.
 +<callout type="warning" title="Navigateurs" icon="true">Sous ''Debian'' et ''Ubuntu'', les navigateurs ''Firefox'' et ''Chrome'' utilisent leurs propres banques de certificats. Il faudra donc les importer manuellement.</callout>
 +===== Conclusion =====
 +
 +Désormais, nous disposons d'une autorité de certification racine et d'une autorité intermédiaire fonctionnelles et toutes deux reconnues par les postes clients de l'organisation. L'étape suivante est de créer des certificats pour nos besoins.
 +
 +  * Création d'un certificat TLS pour un serveur web : [[ejbca_tls|Lien]]
 +  * Création d'un certificat TLS pour s'authentifier sur un serveur web : [[ejbca_tls_client|Lien]]
  
 ~~DISCUSSION~~ ~~DISCUSSION~~
  • ejbca_createca.1710935507.txt.gz
  • Dernière modification : 2024/03/20 12:51
  • de nekan