2010-03-31 15:38:27 +0000 2010-03-31 15:38:27 +0000
63
63

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.

Réponses (4)

28
28
28
2010-03-31 18:03:18 +0000

Vous pouvez utiliser OpenSSL directement.

  1. créer une clé privée d'autorité de certification (c'est votre clé la plus importante) :

  2. Créez votre certificat auto-signé de l'autorité de certification :

  3. Émettez un certificat client en générant d'abord la clé, puis demandez (ou utilisez une clé fournie par un système externe) et signez ensuite le certificat en utilisant la clé privée de votre autorité de certification :

(Vous devrez peut-être ajouter quelques options car j'utilise ces commandes avec mon fichier openssl.conf. Vous devrez peut-être d'abord configurer votre propre fichier .conf).

14
14
14
2012-04-29 17:54:40 +0000

Une fois que vous avez créé votre CA, vous pouvez l'utiliser pour signer ainsi :

  • Créer une clé :

  • Créer un csr :

  • Le signer :

Votre changement :

basicConstraints=CA:TRUE # prev value was FALSE

signifie que les certificats que vous émettez peuvent être utilisés pour signer d'autres certificats.

9
9
9
2010-03-31 17:51:10 +0000

OpenSSL est fourni avec un script Perl “CA.pl” pour vous aider à créer un certificat racine CA auto-signé, avec la clé privée correspondante, ainsi que quelques fichiers et répertoires simples pour vous aider à garder une trace de tous les futurs certificats que vous signerez (aussi appelés “problèmes”) avec ce CA racine. Il vous aide également à générer d'autres paires de clés et des demandes de signature de certificats (CSR) et vous aide à traiter ces CSR (c'est-à-dire à émettre des certificats pour eux), et plus encore.

Notez que de nombreux produits exigent que les certificats de l'autorité de certification contiennent un certain attribut les désignant comme des certificats de l'autorité de certification, sinon ils ne seront pas acceptés comme signataires/émetteurs valides d'autres certificats. Si le certificat auto-signé que vous avez créé ne contient pas cet attribut, vous pourriez avoir des difficultés à obtenir que d'autres logiciels le traitent comme un certificat de CA racine valide.

Si je me souviens bien, la syntaxe est la suivante

CA.pl -newca # Create a new root CA  

CA.pl -newreq # Create a new CSR

CA.pl -sign # Sign a CSR, creating a cert  

CA.pl -pkcs12 # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine
-1
-1
-1
2018-11-06 22:59:55 +0000

J'ai trouvé ce poste : https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

C'est pour Node.JS mais le script dans this GitHub repo utilise des commandes openSLL pour créer un cert CA root et un cert Domain.

Exécuter en utilisant : bash make-root-ca-and-certificates.sh 'example.com'

Ou pour l'utilisation de localhost : bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-et-certificats.sh

#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p certs/{server,client,ca,tmp}

# Create your very own Root Certificate Authority
openssl genrsa \
  -out certs/ca/my-root-ca.key.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 1024 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out certs/server/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key certs/server/privkey.pem \
  -out certs/tmp/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
# -CAserial certs/ca/my-root-ca.srl
openssl x509 \
  -req -in certs/tmp/csr.pem \
  -CA certs/ca/my-root-ca.crt.pem \
  -CAkey certs/ca/my-root-ca.key.pem \
  -CAcreateserial \
  -out certs/server/cert.pem \
  -days 500

# Create a public key, for funzies
# see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
openssl rsa \
  -in certs/server/privkey.pem \
  -pubout -out certs/client/pubkey.pem

# Put things in their proper place
rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
cat certs/server/cert.pem certs/server/chain.pem > certs/server/fullchain.pem