it-swarm.com.de

Wie erstelle ich meine eigene Zertifikatskette?

Ich möchte meinen eigenen OCSP-Responder einrichten (nur zu Testzwecken). Dazu muss ich ein Stammzertifikat und ein paar daraus generierte Zertifikate haben.

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

Bearbeiten
Rückblickend ist meine Frage noch nicht vollständig beantwortet. Um das Problem zu klären, stelle ich meine Zertifikatskette folgendermaßen dar:

WURZEL -> A -> B -> C -> ...

Ich kann derzeit die ROOT- und A-Zertifikate erstellen, habe aber noch nicht herausgefunden, wie eine längere Kette erstellt werden kann.

Mein Befehl zum Erstellen des Stammzertifikats 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

Zertifikat A wird folgendermaßen 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 Stammzertifikat ab, für das er die erforderlichen Informationen in der Konfigurationsdatei openssl findet.

Zertifikat B muss sich jedoch nur auf A verlassen, das nicht in der Konfigurationsdatei registriert ist, sodass der vorherige Befehl hier nicht funktioniert.

Welche Befehlszeile sollte ich zum Erstellen von Zertifikaten ab B verwenden?

Bearbeiten
Ich fand die Antwort in diesem Artikel . 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.

57
StackedCrooked

Sie können OpenSSL direkt verwenden.

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

    openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
    
  2. Erstellen Sie Ihr selbstsigniertes CA-Zertifikat:

    openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
    
  3. Stellen Sie ein Client-Zertifikat aus, indem Sie zuerst den Schlüssel generieren, ihn dann anfordern (oder einen von einem externen System bereitgestellten verwenden) und dann das Zertifikat mit dem privaten Schlüssel Ihrer Zertifizierungsstelle signieren:

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

(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.)

27
twk

Nachdem Sie Ihre Zertifizierungsstelle erstellt haben, können Sie sie folgendermaßen signieren:

  • Erstellen Sie einen Schlüssel:

    openssl genrsa -out key_A.key  1024
    
  • Erstellen Sie eine csr:

    openssl req -new -key key_A.key -out csr_A.csr
    You are about to be asked to enter information etc....
    
  • Unterschreib es :

    openssl x509 -req -days 365 -in csr_A.csr -CA CA_certificate_you_created.crt \
    -CAkey CA_key_you_created.key -set_serial 01 -out crt_A.crt
    

    und so weiter * _A durch * _B und CA_certificate_you_created.crt durch crt_A.crt und CA_key_you_created.key durch key_A.key ersetzen

Dein Wechsel:

basicConstraints=CA:TRUE  # prev value was FALSE

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

12
Mr_and_Mrs_D

OpenSSL enthält ein Perl-Skript "CA.pl", mit dem Sie ein selbstsigniertes Root-Zertifikat CA zusammen mit dem zugehörigen privaten Schlüssel erstellen können. plus ein paar einfache Dateien und Verzeichnisse, um zukünftige Zertifikate, die Sie mit dieser Stammzertifizierungsstelle signieren (auch bekannt als Problem), im Auge zu behalten. Sie können auch andere Schlüsselpaare und Zertifikatsignierungsanforderungen (Certificate Signing Requests, CSRs) generieren und diese CSRs verarbeiten (dh Zertifikate ausstellen) und vieles mehr.

Beachten Sie, dass für viele Produkte CA-Zertifikate ein bestimmtes Attribut enthalten müssen, das sie als CA-Zertifikate kennzeichnet, oder dass sie nicht als gültige Unterzeichner/Aussteller anderer Zertifikate akzeptiert werden. Wenn das selbstsignierte Zertifikat, das Sie erstellt haben, dieses Attribut nicht enthält, können Sie möglicherweise andere Software nicht dazu bringen, es wie ein gültiges Stammzertifizierungsstellenzertifikat zu behandeln.

Wenn ich mich richtig erinnere, sieht die Syntax ungefähr so ​​aus:

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    
8
Spiff

Sie können das in einem Befehl tun:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

Sie können auch -nodes (kurz für no DES) hinzufügen, wenn Sie Ihren privaten Schlüssel nicht mit einer Passphrase schützen möchten. Andernfalls werden Sie zur Eingabe eines Kennworts mit mindestens 4 Zeichen aufgefordert.

Den Parameter days (365) können Sie durch eine beliebige Zahl ersetzen, um das Ablaufdatum zu beeinflussen. Es fordert Sie dann zur Eingabe von "Country Name" auf, aber Sie können einfach drücken Enter und akzeptieren Sie die Standardeinstellungen.

Fügen Sie -subj '/CN=localhost' hinzu, um Fragen zum Inhalt des Zertifikats zu unterdrücken (ersetzen Sie localhost durch Ihre gewünschte Domain).

Selbstsignierte Zertifikate werden nicht von Dritten validiert, es sei denn, Sie importieren sie zuvor in die Browser. Wenn Sie möchten, dass Ihr Zertifikat von Browsern ohne installierte Zertifikatskette akzeptiert wird, sollten Sie ein Zertifikat verwenden, das von einer Zertifizierungsstelle (Zertifizierungsstelle) signiert ist.

0
vharron