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

Hoe maak ik mijn eigen certificaatketen aan?

Ik wil graag mijn eigen OCSP Responder opzetten (alleen voor testdoeleinden). Hiervoor heb ik een root-certificaat nodig en een paar certificaten die daaruit gegenereerd zijn.

Het is me gelukt om een zelf-ondertekend certificaat te maken met openssl. Ik wil het gebruiken als het root-certificaat. De volgende stap zou zijn om de afgeleide certificaten te maken. Ik kan echter geen documentatie vinden over hoe ik dit moet doen. Weet iemand waar ik deze informatie kan vinden?

Edit Achteraf gezien is mijn vraag nog niet helemaal beantwoord. Om het probleem te verduidelijken zal ik mijn certificaatketen als volgt voorstellen:

ROOT -> A -> B -> C -> …

Ik kan nu de ROOT en A certificaten maken, maar ik heb nog niet gevonden hoe ik een langere keten kan maken.

Mijn commando voor het aanmaken van het root certificaat is:

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

Certificaat A is als volgt aangemaakt:

openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer

Dit commando is impliciet afhankelijk van het root certificaat, waarvoor het de benodigde info vindt in het openssl configuratiebestand.

Certificaat B moet echter alleen vertrouwen op A, dat niet geregistreerd is in het configuratiebestand, dus het vorige commando zal hier niet werken.

Welke commandoregel moet ik gebruiken om certificaten B en verder aan te maken?

Edit Ik vond het antwoord in dit artikel . Certificaat B (keten A -> B) kan met deze twee commando’s aangemaakt worden:

# 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

Ik heb ook het openssl.cnf bestand veranderd:

[usr_cert]
basicConstraints=CA:TRUE # prev value was FALSE

Deze aanpak lijkt goed te werken.

Antwoorden (4)

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

U kunt OpenSSL rechtstreeks gebruiken.

  1. Maak een Certificate Authority private key (dit is je belangrijkste key):

  2. Maak uw CA zelfondertekend certificaat:

  3. Geef een cliëntcertificaat uit door eerst de sleutel te genereren, dan een aanvraag te doen (of er een te gebruiken die door een extern systeem is geleverd) en dan het certificaat te ondertekenen met de private sleutel van uw CA:

(Het kan zijn dat u wat opties moet toevoegen omdat ik deze commando’s samen met mijn openssl.conf bestand gebruik. Misschien moet u eerst uw eigen .conf bestand instellen).

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

Als je eenmaal je CA hebt aangemaakt, kun je die gebruiken om te ondertekenen dus :

  • Maak een sleutel aan :

  • Maak een csr aan :

  • Onderteken het :

Je verandert :

basicConstraints=CA:TRUE # prev value was FALSE

betekent dat de certificaten die je uitgeeft gebruikt kunnen worden om andere certificaten te ondertekenen.

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

OpenSSL wordt geleverd met een Perl-script “CA.pl” om je te helpen een zelfondertekend root-CA_ certificaat te maken, samen met de bijhorende private sleutel, plus een paar eenvoudige bestanden en mappen om je te helpen bij te houden welke toekomstige certificaten je tekent (ook bekend als uitgeeft) met die root-CA. Het helpt je ook om andere sleutelparen en certificaat ondertekeningsverzoeken (CSRs) te genereren en helpt je om die CSRs te verwerken (dat wil zeggen, certs voor ze uit te geven), en meer.

Merk op dat veel producten vereisen dat CA-certifcaten een bepaald attribuut bevatten dat ze als CA-certifcaten markeert, anders worden ze niet geaccepteerd als geldige ondertekenaars/uitgevers van andere certifcaten. Als het zelfondertekende cert dat je gemaakt hebt dat attribuut niet bevat, kun je problemen krijgen om andere software het als een geldig root-CA cert te laten behandelen.

Als ik het me goed herinner, gaat de syntax ongeveer als volgt:

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

Ik vond deze post: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

Het is voor Node.JS maar het script in deze GitHub repo gebruikt openSLL commando’s om een root CA cert en Domain cert te maken.

Uitvoeren met: bash make-root-ca-and-certificates.sh 'example.com'

Of voor localhost met: bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-en-certificates.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