Unterschiede zwischen den Revisionen 1 und 2
Revision 1 vom 2004-12-16 23:48:00
Größe: 6129
Autor: anonym
Kommentar: missing edit-log entry for this revision
Revision 2 vom 2012-06-13 21:26:24
Größe: 6129
Autor: anonym
Kommentar: converted to 1.6 markup
Es wurden keine Änderungen gefunden!

{title: Zertifikat-Erstellung mit openssl} {author: Lars} {date: 15. September 2003} {version: 0.1} {abstract: Eine Beschreibung der Erstellung von Zertifikaten fuer den Apache-Webserver, sowie deren Signierung durch eine selbsterstellte Certificate Authority (CA)}

Ein langer Weg ...

Die Erstellung eines Zertifikats ist ein mehrstufiger Vorgang. Im Folgenden werde ich dessen Zwischenergebnisse kurz beschreiben (in Klammern sind die spaeter verwendeten Dateierweiterungen angegeben):

Schluessel (key)
ein (asymmetrisches) rsa-Schluesselpaar mit gewaehlter Schluessellaenge (hier: 1024, groessere Schluessel werden von manchen Browsern nicht verstanden)
Schluesselinformationen (req)
Herkunftsinformationen, die dem Nutzer gezeigt werden, wenn er das Zertifikat annehmen soll; wichtig dabei ist der "Common Name" (CN) - im Falle des Webservers sollte es die URL der betreffenden Domain sein
Certificate Signing Request (csr)
die Kombination aus Schluessel und dazugehoerigen Informationen; dies laesst sich bereits zur Verschluesselung per ssl verwenden, jedoch ist es hier moeglich, die Informationen unabhaengig vom Schluessel zu manipulieren, bzw. umgekehrt
Zertifikat (crt)
der beschriebene "Certificate Signing Request" wird mit dem privaten Schluessel einer Certificate Authority (CA) signiert und ist somit vor unbemerkten Manipulationen geschuetzt
? (pem)

Beispiele siehe /etc/ssl/certs - zum Verifizieren (beispielsweise einer CA) noetig

Die Erstellung des "Certificate Signing Request"

  • openssl genrsa 1024 >$ZIEL.key erzeugt den Schlussel mit 1024 Bit Schluessellaenge

  • durch den zusaetzlichen Parameter -des3 liesse sich der Schluessel symmetrisch per Triple-DES verschluesseln, um unbefugte Verwendung zu verhindern (dies erfordert bei jedem Start des Webservers die Eingabe des Passworts)

  • der Parameter -rand QUELLE erlaubt die Verwendung einer (endlich grossen) Datei als Quelle der genutzten Zufallszahlen zur Schluesselgenerierung

  • openssl req -x509 -key $ZIEL.key -new > $ZIEL.req erfragt die Meta-Informationen

  • mit dem zusaetzlichen Parameter -days X kann die Gueltigkeitsdauer des Zertifikats festgelegt werden (Standard: 30 Tage)

  • cat $ZIEL.key $ZIEL.req > $ZIEL.csr fuegt beides zusammen zum "Certificate Signing Request"

  • dieser laesst sich nun als (unbeglaubigtes) Zertifikat fuer einen SSL-Webserver verwenden

Die Erstellung einer Certificate Authority

Die folgenden Schritte sind nur einmal erforderlich, um die Quelle des Vertrauens zu erschaffen.

  • da openssl einige sehr eigenwillige Bedingungen an die manuelle Verwendung von openssl zur Verwaltung einer CA knuepft, ist die Nutzung eines bereits existierenden Skripts CA.sh nahezu unvermeidlich

  • das Skript kann sich beispielsweise im Verzeichnis /usr/lib/ssl/misc befinden

  • dieses Skript erzeugt beim Aufruf mit dem Parameter -newca das CA-Zertifikat

  • dies sollte mit einem Passwort gesichert werden, um eine Kompromittierung der CA auszuschliessen

Die Signierung des Certificate Signing Request

  • aufgrund der eingeschraenkten Parametrierbarkeit des CA.sh-Skripts muss die vorher erzeugte csr-Datei in das Verzeichnis, in dem sich das Unterverzeichnis "demoCA" befindet, kopiert werden
  • ausserdem muss die Datei jetzt "newreq.pem" heissen
  • nun erzeugt CA.sh -signcert das Zertifikat als "newcert.pem"

Ein Beispiel-Skript

Das folgende Skript erwartet als Parameter den Namen des zu erstellenden Zertifikats (ohne Dateinamen-Erweiterung). (zu finden unter /home/scripts/makeCert.sh) <nowiki> #!/bin/sh CA_DIR=/home/certificates/ # enthaelt das Verzeichnis "demoCA" (siehe unten: CA-Erzeugung) DAUER="-days 365" TMPREQ=/tmp/mein-apache-cert.req TMPRAN=/tmp/mein-apache-cert.random CSR_FILE=$1.csr KEY_FILE=$1.key CRT_FILE=$1.crt

if test -z "$1";      then    echo "Syntax: $0 ZERTIFIKATS-DATEI [CA-Datei]"              echo "  (die Dateienedungen (key, csr, crt) werden automatisch angefuegt)"                   exit 1   fi echo "Erzeuge Zufallszahlen ..." echo "-----------------------------------------------" dd if=/dev/urandom of=$TMPRAN bs=1024 count=1024 || exit 2 sleep 1

echo -e "\nErzeuge den Schluessel ..." echo "-----------------------------------------------" openssl genrsa -rand $TMPRAN 1024 > $KEY_FILE || exit 3 # z.B.: -des3 um Verschluesselung des Zertifikats zu aktivieren  echo -e "\nErzeuge die X509-Informationen ..." echo "-----------------------------------------------" openssl req -x509 -key $KEY_FILE $DAUER -new > $TMPREQ || exit 4 echo -e "\nFuege das Zertifikat zusammen ..." echo "-----------------------------------------------" cat $TMPREQ $KEY_FILE >$CSR_FILE || exit 5 echo -e "\nLoesche temporaere Dateien ..." echo "-----------------------------------------------" rm $TMPRAN $TMPREQ echo -e "\nDie Signierungsanforderung $CSR_FILE wurde erzeugt!"

test -e "$CA_DIR" || exit 0 # nun wird per CA zertifiziert ... # die CA wird erstmalig durch das Skript CA.sh mit dem Parameter "-newca" erstellt AKT_DIR=pwd echo -e "\nDiese wird nun von der CA signiert ...\n" cp $CSR_FILE ${CA_DIR}newreq.pem cd $CA_DIR test -f newcert.pem && rm newcert.pem openssl x509 -x509toreq -in newreq.pem $DAUER -signkey newreq.pem -out tmp.pem || exit 6 openssl ca -policy policy_anything -out newcert.pem -infiles tmp.pem || exit 7 test -f tmp.pem && rm tmp.pem if test ! -s newcert.pem;        then    echo "Fehler: das neue Zertifikat wurde nicht erstellt!"                exit 8  fi rm newreq.pem mv newcert.pem ${AKT_DIR}/$CRT_FILE || exit 9 cd $AKT_DIR rm $CSR_FILE echo -e "\nFertig!" </nowiki>

Namenskonventionen

(falls du ihnen folgen magst)

Country Name [AU]

. [ein Punkt bedeutet leeres Feld]

State or Province [Some-State]
.
Locality Name
Airstrip One
Organization Name [ON]
AG Kommunikation
Organizational Unit
selber ausdenken

ZertifikatErstellung (zuletzt geändert am 2012-06-13 21:26:24 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.