OpenSSL Zertifizierungsstelle

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.


Inhaltsverzeichnis

  1. Update
    1. Versionskontrolle
  2. ROOT Zertifikat
    1. Pfad
    2. Berechtigung
    3. Privater Schlüssel
    4. ROOT Zertifikat
    5. Konvertieren
      1. CRT-Format
      2. PEM-Format
  3. Finish

Update

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.

sudo apt update
sudo apt -y upgrade

Versionskontrolle

openssl version -a

ROOT Zertifikat

Pfad

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

sudo mkdir /etc/ssl/root/

Berechtigung

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

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

Privater Schlüssel

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.

sudo openssl genrsa -aes256 -out /etc/ssl/root/ca-root-key.pem 4096
WertBeschreibung
-helpDrucken Sie eine Nutzungsnachricht aus.
-out filenameGeben Sie den Schlüssel in die angegebene Datei aus. Wenn dieses Argument nicht angegeben wird, wird die Standardausgabe verwendet.
-passout argGibt 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|-ideaDiese 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|-3Der 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 fileSchreibt beim Beenden zufällige Daten in die angegebene Datei. Dies kann mit einem nachfolgenden -rand-Flag verwendet werden.
-engine idWenn 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 numGeben 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.
numbitsDie 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.
sudo genrsa <Kommando>

ROOT Zertifikat

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.

sudo 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
WertBeschreibung
-[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).
-asn1-kludgeStandardmäß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.
-batchNicht interaktiver Modus.
-config filenameDadurch kann eine alternative Konfigurationsdatei angegeben werden. Dies überschreibt den Dateinamen zur Kompilierungszeit oder einen in der Umgebungsvariablen OPENSSL_CONF angegebenen.
-days nWenn 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.
-engine idWenn 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.
-extensions section
-in filenameDies 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.
-inform DER|PEMDies 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.
-key filenameDies 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|DERDas Format der privaten Schlüsseldatei, das im Argument -key angegeben ist. PEM ist die Standardeinstellung.
-keygen_engine idGibt eine Engine (anhand ihrer eindeutigen ID-Zeichenfolge) an, die für Schlüsselgenerierungsvorgänge verwendet wird.
-keyout filenameDies 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.
-modulusDiese Option druckt den Wert des Moduls des in der Anforderung enthaltenen öffentlichen Schlüssels aus.
-multivalue-rdnDiese 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.
-nameopt optionOption, 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.
-newDiese 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.
-newhdrFü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.
-newkey argDiese 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.
-no-asn1-kludgeUmgekehrter Effekt von -asn1-kludge
-nodesWenn diese Option angegeben ist, wird ein privater Schlüssel, der erstellt wird, nicht verschlüsselt.
-nooutDiese Option verhindert die Ausgabe der codierten Version der Anforderung.
-out filenameDies gibt den Ausgabedateinamen an, in den standardmäßig geschrieben werden soll, oder die Standardausgabe.
-outform DER|PEMDies gibt das Ausgabeformat an. Die Optionen haben dieselbe Bedeutung wie die Option -inform.
-passin argDie Kennwortquelle der Eingabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.
-passout argDie Kennwortquelle der Ausgabedatei. Weitere Informationen zum Format von arg finden Sie im Abschnitt PASS PHRASE ARGUMENTS in openssl.
-pkeyopt opt:valueSetzen 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.
-pubkeyGibt den öffentlichen Schlüssel aus.
-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.
-reqexts sectionDiese 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.
-reqoptPassen 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.
-set_serial nSeriennummer, 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.
-subj argErsetzt 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.
-subj argLegt 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.
-subjectDruckt den Betreff der Anfrage aus (oder den Betreff des Zertifikats, wenn -x509 angegeben ist)
-textDruckt die Zertifikatsanforderung in Textform aus.
-utf8Diese 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.
-verboseDrucken Sie zusätzliche Details zu den ausgeführten Vorgängen aus.
-verifyÜberprüft die Signatur auf der Anfrage.
-x509Diese 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.
sudo req <Kommando>

Konvertieren

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

sudo openssl x509 -in /etc/ssl/root/ca-root.pem -outform der -out /etc/ssl/root/ca-root-crt.crt

PEM-Format

sudo openssl x509 -in  /etc/ssl/root/ca-root-crt.crt -outform PEM -out /etc/ssl/root/ca-root-pem.pem

Finish

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

Schreibe einen Kommentar

%d Bloggern gefällt das: