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

Wie kann ich meine eigene Zertifikatskette erstellen?

Ich möchte meinen eigenen OCSP-Responder einrichten (nur zu Testzwecken). Dazu benötige ich ein Root-Zertifikat und ein paar daraus generierte Zertifikate.

Ich habe es geschafft, ein selbstsigniertes Zertifikat mit openssl zu erstellen. Ich möchte es als Root-Zertifikat verwenden. Der nächste Schritt wäre, die abgeleiteten Zertifikate zu erstellen. Ich kann aber keine Dokumentation finden, wie man das macht. Weiß jemand, wo ich diese Informationen finden kann?

Edit Im Nachhinein betrachtet ist meine Frage noch nicht ganz beantwortet. Um das Problem zu verdeutlichen, stelle ich meine Zertifikatskette wie folgt dar:

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

Ich bin derzeit in der Lage, die ROOT- und A-Zertifikate zu erstellen, aber ich habe nicht herausgefunden, wie ich eine längere Kette erstellen kann.

Mein Befehl zum Erstellen des Root-Zertifikats lautet:

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

Das Zertifikat A wird wie folgt erstellt:

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

Dieser Befehl hängt implizit vom Root-Zertifikat ab, für das er die erforderlichen Informationen in der openssl-Konfigurationsdatei findet.

Zertifikat B muss sich jedoch nur auf A verlassen, das nicht in der Konfigurationsdatei eingetragen ist, so dass der vorherige Befehl hier nicht funktionieren wird.

Welche Befehlszeile sollte ich verwenden, um Zertifikate B und darüber hinaus zu erstellen?

Edit Die Antwort habe ich in diesem Artikel gefunden. Zertifikat B (Kette A -> B) kann mit diesen beiden Befehlen erstellt werden:

# 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

Ich habe auch die Datei openssl.cnf geändert:

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

Dieser Ansatz scheint gut zu funktionieren.

Antworten (4)

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

Sie können OpenSSL direkt verwenden.

  1. Erstellen Sie einen privaten Schlüssel der Zertifizierungsstelle (dies ist Ihr wichtigster Schlüssel):

  2. Erstellen Sie Ihr selbstsigniertes CA-Zertifikat:

  3. Stellen Sie ein Client-Zertifikat aus, indem Sie zuerst den Schlüssel erzeugen, dann das Zertifikat anfordern (oder ein von einem externen System bereitgestelltes verwenden) und dann das Zertifikat mit dem privaten Schlüssel Ihrer CA signieren:

(Möglicherweise müssen Sie einige Optionen hinzufügen, da ich diese Befehle zusammen mit meiner openssl.conf-Datei verwende. Möglicherweise müssen Sie zuerst Ihre eigene .conf-Datei einrichten).

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

Wenn Sie Ihre CA erstellt haben, können Sie damit signieren, also :

  • Erzeugen eines Schlüssels :

  • Erzeugen eines csr :

  • Signieren :

Ihr Wechsel :

basicConstraints=CA:TRUE # prev value was FALSE

bedeutet, dass die von Ihnen ausgestellten Zertifikate zum Signieren anderer Zertifikate verwendet werden können.

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

OpenSSL wird mit einem Perl-Skript “CA.pl” ausgeliefert, das Ihnen hilft, ein selbstsigniertes Root-“CA”-Zertifikat zu erstellen, zusammen mit dem passenden privaten Schlüssel und ein paar einfachen Dateien und Verzeichnissen, die Ihnen helfen, den Überblick über alle zukünftigen Zertifikate zu behalten, die Sie mit dieser Root-CA signieren (oder ausstellen). Es hilft Ihnen auch, andere Schlüsselpaare und Certificate Signing Requests (CSRs) zu erzeugen und hilft Ihnen, diese CSRs zu verarbeiten (d. h. Zertifikate für sie auszustellen), und mehr.

Beachten Sie, dass viele Produkte verlangen, dass CA-Zertifikate ein bestimmtes Attribut enthalten, das sie als CA-Zertifikate kennzeichnet, oder sie werden nicht als gültige Unterzeichner/Aussteller anderer Zertifikate akzeptiert. Wenn das selbstsignierte Zertifikat, das Sie erstellt haben, dieses Attribut nicht enthält, könnten Sie Probleme haben, dass andere Software es wie ein gültiges Root-CA-Zertifikat behandelt.

Wenn ich mich richtig erinnere, geht die Syntax ungefähr so:

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

Ich habe diesen Beitrag gefunden: https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server

Es ist für Node.JS, aber das Skript in diesem GitHub Repo verwendet openSLL-Befehle, um ein Root-CA-Zert und Domain-Zert zu erstellen.

Ausführen mit: bash make-root-ca-and-certificates.sh 'example.com'

Oder für localhost mit: bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-and-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