OpenSSL Zertifizierungsstelle - Ubuntu

Aus FAQ LIFE-SESSIONS


Hier möchte ich euch zeigen, wie man ein ROOT-Zertifikat und ein dazugehöriges Zertifikat erstellt. Dies kann man Super im Intranet oder Lokalen Netzwerk verwenden. Damit es keinen Zertifizierungsfehler gibt. Da Google Chrome immer mehr das Zertifikat, das nicht vertrauenswürdigen Zertifikate gesperrt werden. Meiner Meinung eignet sich Linux bzw. Ubuntu super dazu.

Für Ubuntu-Server fallen keine Lizenzkosten an, dass bei einem Windows-Server, Red Hat usw. natürlich schon ist. Ebenso ist die Geschwindigkeit, wenn man einem Zertifikat vorbereitet hat, einfach ungeschlagen. Ein weiterer Grund, man spart sehr viel Ressourcen, mit dem RAM und der CPU, denn es empfiehlt sich, nach dem man ein Zertifikat erstellt hat, den Server einfach herunter zufahren. Dies ist aus Sicherheitsgründen empfehlenswert, den ohne dem Root Zertifizierungsstelle kann man kein Zertifikat ausstellen bzw. auch fälschen.

Update [Bearbeiten | Quelltext bearbeiten]


Wir werden ein Update durchführen damit wir genau wissen, dass wir die neueste Version von OpenSSL installiert wird., im Grunde ist es bei Ubuntu-Server OpenSSL als Standard Repository enthalten.

apt update
apt -y upgrade

Versionskontrolle [Bearbeiten | Quelltext bearbeiten]

openssl version -a
U Openssl 1.png

ROOT Zertifikat [Bearbeiten | Quelltext bearbeiten]


Pfad[Bearbeiten | Quelltext bearbeiten]

Wir werden nun ein Root Zertifikat erstellen. Zuerst erstellen wir einen Ordner, mit dem wir in Zukunft arbeiten.

mkdir /etc/ssl/root/

Berechtigung[Bearbeiten | Quelltext bearbeiten]

Wir werden, aus Sicherheitsgründen eine Berechtigung setzten, damit nur Berechtigte Benutzer lesen, schreiben und ausführen dürfen.

chmod 700 /etc/ssl/root/
chown root:root /etc/ssl/root/

Privater Schlüssel[Bearbeiten | Quelltext bearbeiten]

Einen Private KEY wird benötigt, darauf setzt das Zertifikat auf. (ACHTUNG! Private KEY immer geheim halten, damit kann Zertifikate fälschen). Daher muss auch zwingend ein Passwort hinterlegt werden. Vergessen Sie das Kennwort nicht, ansonsten können Sie kein Zertifikat erstellen oder verlängern.

openssl genrsa -aes256 -out /etc/ssl/root/ca-root-key.pem 4096
Kommando Optionen: genrsa
Wert Beschreibung
-help Drucken Sie eine Nutzungsnachricht aus.
-out filename Geben Sie den Schlüssel in die angegebene Datei aus. Wenn dieses Argument nicht angegeben wird, wird die Standardausgabe verwendet.
-passout arg Gibt die Kennwortquelle für die Ausgabedatei an. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS auf der openssl-Referenzseite.
-aes128|-aes192|-aes256|-aria128|-aria192|-aria256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea Diese Optionen verschlüsseln den privaten Schlüssel mit der angegebenen Verschlüsselung, bevor er ausgegeben wird. Wenn keine dieser Optionen angegeben ist, wird keine Verschlüsselung verwendet. Wenn eine Verschlüsselung verwendet wird, wird eine Passphrase abgefragt, wenn diese nicht über das Argument -passout angegeben wird.
-F4|-3 Der zu verwendende öffentliche Exponent, entweder 65537 oder 3. Der Standardwert ist 65537.
-rand file(s) Eine Datei oder Dateien mit zufälligen Daten, die zum Setzen des Zufallszahlengenerators verwendet werden. Es können mehrere Dateien angegeben werden, die durch ein betriebssystemabhängiges Zeichen getrennt sind. Das Trennzeichen ist; für MS-Windows ,, für OpenVMS und: für alle anderen.
-writerand file Schreibt beim Beenden zufällige Daten in die angegebene Datei. Dies kann mit einem nachfolgenden -rand-Flag verwendet werden.
-engine id Wenn Sie eine Engine (anhand ihrer eindeutigen ID-Zeichenfolge) angeben, versucht genrsa, eine Funktionsreferenz für die angegebene Engine abzurufen, und initialisiert sie bei Bedarf. Die Engine wird dann als Standard für alle verfügbaren Algorithmen festgelegt.
-primes num Geben Sie die Anzahl der Primzahlen an, die beim Generieren des RSA-Schlüssels verwendet werden sollen. Der Parameter num muss eine positive Ganzzahl sein, die größer als 1 und kleiner als 16 ist. Wenn num größer als 2 ist, wird der generierte Schlüssel als 'Multi-Prime'-RSA-Schlüssel bezeichnet, der in RFC 8017 definiert ist.
numbits Die Größe des privaten Schlüssels, der in Bits generiert werden soll. Dies muss die zuletzt angegebene Option sein. Der Standardwert ist 2048, und Werte unter 512 sind nicht zulässig.
U Openssl 2.png

ROOT Zertifikat[Bearbeiten | Quelltext bearbeiten]

Nun erstellen wir das eigentliche ROOT-Zertifikat, in dem Format PEM. Ihr müsst noch ein paar persönliche Information ausfüllen, damit das Zertifikat auch sauber Arbeiten kann.

openssl req -x509 -new -nodes -extensions v3_ca -key /etc/ssl/root/ca-root-key.pem -days 3650 -out /etc/ssl/root/ca-root.pem -sha512
Kommando Optionen: req
Wert Beschreibung
-inform DER|PEM Dies gibt das Eingabeformat an. Die DER-Option verwendet ein ASN1 DER-codiertes Formular, das mit PKCS#10 kompatibel ist. Das PEM-Formular ist das Standardformat: Es besteht aus dem DER-Format base64, das mit zusätzlichen Kopf- und Fußzeilen codiert ist.
-outform DER|PEM Dies gibt das Ausgabeformat an. Die Optionen haben dieselbe Bedeutung wie die Option -inform.
-in filename Dies gibt den Eingabedateinamen an, aus dem eine Anforderung oder Standardeingabe gelesen werden soll, wenn diese Option nicht angegeben ist. Eine Anforderung wird nur gelesen, wenn die Erstellungsoptionen (-new und -newkey) nicht angegeben sind.
-passin arg Die Kennwortquelle der Eingabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.
-out filename Dies gibt den Ausgabedateinamen an, in den standardmäßig geschrieben werden soll, oder die Standardausgabe.
-passout arg Die Kennwortquelle der Ausgabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.
-text Druckt die Zertifikatsanforderung in Textform aus.
-subject Druckt den Betreff der Anfrage aus (oder den Betreff des Zertifikats, wenn -x509 angegeben ist)
-pubkey Gibt den öffentlichen Schlüssel aus.
-noout Diese Option verhindert die Ausgabe der codierten Version der Anforderung.
-modulus Diese Option druckt den Wert des Moduls des in der Anforderung enthaltenen öffentlichen Schlüssels aus.
-verify Überprüft die Signatur auf der Anfrage.
-new Diese Option generiert eine neue Zertifikatanforderung. Der Benutzer wird zur Eingabe der relevanten Feldwerte aufgefordert. Die tatsächlich angeforderten Felder sowie ihre maximale und minimale Größe werden in der Konfigurationsdatei und allen angeforderten Erweiterungen angegeben. Wenn die Option -key nicht verwendet wird, wird ein neuer privater RSA-Schlüssel unter Verwendung der in der Konfigurationsdatei angegebenen Informationen generiert.
-subj arg Ersetzt das Betrefffeld der Eingabeanforderung durch angegebene Daten und gibt die geänderte Anforderung aus. Das Argument muss wie folgt formatiert sein: /type0=value0/type1=value1/type2=..., Zeichen dürfen durch \ (Backslash) maskiert werden, Leerzeichen werden nicht übersprungen.
-rand file(s) eine Datei oder Dateien mit zufälligen Daten, die zum Setzen des Zufallszahlengenerators verwendet werden, oder ein EGD-Socket (siehe RAND_egd). Es können mehrere Dateien angegeben werden, die durch ein betriebssystemabhängiges Zeichen getrennt sind. Das Trennzeichen ist; für MS-Windows ,, für OpenVMS und: für alle anderen.
-newkey arg Diese Option erstellt eine neue Zertifikatanforderung und einen neuen privaten Schlüssel. Das Argument hat eine von mehreren Formen. rsa: nbits, wobei nbits die Anzahl der Bits ist, generiert einen RSA-Schlüssel mit einer Größe von nbits. Wenn n Bits weggelassen werden, d.h. -newkey rsa angegeben, die in der Konfigurationsdatei angegebene Standardschlüsselgröße wird verwendet. Alle anderen Algorithmen unterstützen das Formular -newkey alg: file, wobei file eine Algorithmusparameterdatei sein kann, die mit dem Befehl genpkey -genparam oder einem X.509-Zertifikat für einen Schlüssel mit geeignetem Algorithmus erstellt wurde. param: file generiert einen Schlüssel unter Verwendung der Parameterdatei oder der Zertifikatdatei, der Algorithmus wird durch die Parameter bestimmt. Algname: Dateiverwendungsalgorithmus Algname und Parameterdatei Datei: Die beiden Algorithmen müssen übereinstimmen, sonst tritt ein Fehler auf. algname verwendet nur den Algorithmus algname, und Parameter sollten bei Bedarf über den Parameter -pkeyopt angegeben werden. dsa: Dateiname generiert einen DSA-Schlüssel unter Verwendung der Parameter in der Datei Dateiname. ec: Dateiname generiert EC-Schlüssel (kann sowohl mit ECDSA- als auch mit ECDH-Algorithmen verwendet werden), gost2001: Dateiname generiert GOST R 34.10-2001-Schlüssel (erfordert die in der Konfigurationsdatei konfigurierte ccgost-Engine). Wenn nur gost2001 angegeben wird, sollte ein Parametersatz durch den Parametersatz -pkeyopt angegeben werden: X.
-pkeyopt opt:value Setzen Sie die Option opt des öffentlichen Schlüsselalgorithmus auf value. Die genauen unterstützten Optionen hängen vom verwendeten Public-Key-Algorithmus und seiner Implementierung ab. Weitere Informationen finden Sie unter KEY GENERATION OPTIONS auf der genpkey-Handbuchseite.
-key filename Dies gibt die Datei an, aus der der private Schlüssel gelesen werden soll. Es werden auch private Schlüssel im PKCS#8-Format für Dateien im PEM-Format akzeptiert.
-keyform PEM|DER Das Format der privaten Schlüsseldatei, das im Argument -key angegeben ist. PEM ist die Standardeinstellung.
-keyout filename Dies gibt den Dateinamen an, in den der neu erstellte private Schlüssel geschrieben werden soll. Wenn diese Option nicht angegeben ist, wird der in der Konfigurationsdatei vorhandene Dateiname verwendet.
-nodes Wenn diese Option angegeben ist, wird ein privater Schlüssel, der erstellt wird, nicht verschlüsselt.
-[digest] Dies gibt den Nachrichten-Digest an, mit dem die Anforderung signiert werden soll (z. B. -md5, -sha1). Dies überschreibt den in der Konfigurationsdatei angegebenen Digest-Algorithmus. Einige Algorithmen mit öffentlichem Schlüssel können diese Auswahl überschreiben. Beispielsweise verwenden DSA-Signaturen immer SHA1, GOST R 34.10-Signaturen verwenden immer GOST R 34.11-94 (-md_gost94).
-config filename Dadurch kann eine alternative Konfigurationsdatei angegeben werden. Dies überschreibt den Dateinamen zur Kompilierungszeit oder einen in der Umgebungsvariablen OPENSSL_CONF angegebenen.
-subj arg Legt den Betreffnamen für eine neue Anforderung fest oder ersetzt den Betreffnamen bei der Verarbeitung einer Anforderung. Das Argument muss wie folgt formatiert sein: /type0=value0/type1=value1/type2=..., Zeichen dürfen durch \ (Backslash) maskiert werden, Leerzeichen werden nicht übersprungen.
-multivalue-rdn Diese Option bewirkt, dass das Argument -subj mit voller Unterstützung für mehrwertige RDNs interpretiert wird. Beispiel: /DC = org/DC = OpenSSL/DC=Benutzer/UID=123456+CN=JohnDoe. Wenn -multi-rdn nicht verwendet wird, lautet der UID-Wert 123456 + CN = John Doe.
-x509 Diese Option gibt ein selbstsigniertes Zertifikat anstelle einer Zertifikatanforderung aus. Dies wird normalerweise verwendet, um ein Testzertifikat oder eine selbstsignierte Stammzertifizierungsstelle zu generieren. Die dem Zertifikat hinzugefügten Erweiterungen (falls vorhanden) sind in der Konfigurationsdatei angegeben. Sofern nicht mit der Option set_serial angegeben, wird eine große Zufallszahl für die Seriennummer verwendet. Wenn eine vorhandene Anforderung mit der Option -in angegeben wird, wird sie in das selbstsignierte Zertifikat konvertiert, andernfalls wird eine neue Anforderung erstellt.
-days n Wenn die Option -x509 verwendet wird, gibt dies die Anzahl der Tage an, für die das Zertifikat zertifiziert werden soll. Der Standardwert beträgt 30 Tage.
-set_serial n Seriennummer, die bei der Ausgabe eines selbstsignierten Zertifikats verwendet werden soll. Dies kann als Dezimalwert oder Hexadezimalwert angegeben werden, wenn 0x vorangestellt ist. Es ist möglich, negative Seriennummern zu verwenden, dies wird jedoch nicht empfohlen.
-extensions section
-reqexts section Diese Optionen geben alternative Abschnitte an, um Zertifikatserweiterungen (falls die Option -x509 vorhanden ist) oder Zertifikatsanforderungserweiterungen einzuschließen. Auf diese Weise können mehrere verschiedene Abschnitte in derselben Konfigurationsdatei verwendet werden, um Anforderungen für verschiedene Zwecke anzugeben.
-utf8 Diese Option bewirkt, dass Feldwerte als UTF8-Zeichenfolgen interpretiert werden. Standardmäßig werden sie als ASCII interpretiert. Dies bedeutet, dass die Feldwerte, unabhängig davon, ob sie von einem Terminal angefordert oder aus einer Konfigurationsdatei abgerufen werden, gültige UTF8-Zeichenfolgen sein müssen.
-nameopt option Option, die bestimmt, wie die Betreff- oder Ausstellernamen angezeigt werden. Das Optionsargument kann eine einzelne Option oder mehrere durch Kommas getrennte Optionen sein. Alternativ kann der Schalter -nameopt mehrmals verwendet werden, um mehrere Optionen festzulegen. Weitere Informationen finden Sie auf der x509-Handbuchseite.
-reqopt Passen Sie das mit -text verwendete Ausgabeformat an. Das Optionsargument kann eine einzelne Option oder mehrere durch Kommas getrennte Optionen sein. Siehe Löschen des Parameters -certopt im Befehl x509.
-asn1-kludge Standardmäßig gibt der Befehl req Zertifikatanforderungen aus, die keine Attribute im richtigen PKCS # 10-Format enthalten. Bestimmte Zertifizierungsstellen akzeptieren jedoch nur Anforderungen, die keine Attribute in einer ungültigen Form enthalten: Diese Option erzeugt dieses ungültige Format. Genauer gesagt werden die Attribute in einer PKCS # 10-Zertifikatanforderung als SET OF-Attribut definiert. Sie sind nicht OPTIONAL. Wenn also keine Attribute vorhanden sind, sollten sie als leeres SET von codiert werden. Das ungültige Formular enthält nicht das leere SET OF, während das richtige Formular dies tut. Es ist zu beachten, dass nur noch sehr wenige Zertifizierungsstellen die Verwendung dieser Option erfordern.
-no-asn1-kludge Umgekehrter Effekt von -asn1-kludge
-newhdr Fügt das Wort NEU zu den Kopf- und Fußzeilen der PEM-Datei in der ausgegebenen Anforderung hinzu. Einige Software (Netscape-Zertifikatsserver) und einige Zertifizierungsstellen benötigen dies.
-batch Nicht interaktiver Modus.
-verbose Drucken Sie zusätzliche Details zu den ausgeführten Vorgängen aus.
-engine id Wenn Sie eine Engine angeben (anhand ihrer eindeutigen ID-Zeichenfolge), versucht req, eine Funktionsreferenz für die angegebene Engine abzurufen, und initialisiert sie bei Bedarf. Die Engine wird dann als Standard für alle verfügbaren Algorithmen festgelegt.
-keygen_engine id Gibt eine Engine (anhand ihrer eindeutigen ID-Zeichenfolge) an, die für Schlüsselgenerierungsvorgänge verwendet wird.
U Openssl 3.png

Konvertieren[Bearbeiten | Quelltext bearbeiten]

Wir müssen noch in ein allgemein gültiges Format konvertieren, damit Windows, Linux und diverse Appliance das Root Zertifikat, wo wir es importieren möchten lesen können. Ich gebe euch ein paar Befehlszeilen, womit ihr es in ein, für euch benötigtes Format konvertieren könnt.

CRT-Format[Bearbeiten | Quelltext bearbeiten]
openssl x509 -in /etc/ssl/root/ca-root.pem -outform der -out /etc/ssl/root/ca-root-crt.crt
PEM-Format[Bearbeiten | Quelltext bearbeiten]
openssl x509 -in  /etc/ssl/root/ca-root-crt.crt -outform PEM -out /etc/ssl/root/ca-root-pem.pem
U Openssl 4.png

Finish[Bearbeiten | Quelltext bearbeiten]


Wir haben nun ein ROOT-Zertifikat und können nach Belieben Zertifikate erstellen.

U Openssl 5.png