{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"

Die Erstellung einer Certificate Authority

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

Die Signierung des Certificate Signing Request

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.