Comment créer ma propre chaîne de certificats ?
J'aimerais créer mon propre OCSP Responder (juste à des fins de test). Pour cela, je dois disposer d'un certificat racine et de quelques certificats générés à partir de celui-ci.
J'ai réussi à créer un certificat auto-signé en utilisant openssl. Je veux l'utiliser comme certificat racine. L'étape suivante consisterait à créer les certificats dérivés. Mais je ne trouve pas de documentation sur la façon de procéder. Quelqu'un sait-il où je peux trouver ces informations ?
Editer Avec le recul, ma question n'a pas encore trouvé de réponse complète. Pour clarifier le problème, je vais représenter ma chaîne de certificats comme ceci :
ROOT -> A -> B -> C -> …
Je suis actuellement en mesure de créer les certificats ROOT et A, mais je n'ai pas encore trouvé comment faire une chaîne plus longue.
Ma commande pour créer le certificat racine est …_
:
openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
Le certificat A est créé comme ceci :
openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer
Cette commande dépend implicitement du certificat racine, pour lequel elle trouve les informations requises dans le fichier de configuration openssl.
Le certificat B ne doit cependant s'appuyer que sur A, qui n'est pas enregistré dans le fichier de configuration, de sorte que la commande précédente ne fonctionnera pas ici.
Quelle ligne de commande dois-je utiliser pour créer les certificats B et au-delà ?
Editer J'ai trouvé la réponse dans cet article . Le certificat B (chaîne A -> B) peut être créé avec ces deux commandes :
# Create a certificate request
openssl req -new -keyout B.key -out B.request -days 365
# Create and sign the certificate
openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request
J'ai également modifié le fichier openssl.cnf :
[usr_cert]
basicConstraints=CA:TRUE # prev value was FALSE
Cette approche semble bien fonctionner.