Howto OpenSSL
Claus Ebert
Version 0.02
Was kann man alles mit OpenSSL anstellen, und vor allem WIE
Hier wird beschrieben, wie man seine eigene Certificate Authority (CA) erstellt (Erstellung eines root Zertifikates und Schlüssel mit dem man Server und Client Zertifikate signieren kann
1.1 Erstellung einer CA (Certificate Authority)
root Zertifikat Erstellung und Wartung
Eine eigene CA ist (speziell zum entwickeln und testen) eine wunderbare Sache.
Clients können unser root Zertifikat importieren (welches Öffentlich zugänglich sein kann)
und mit ihm die Identität des Servers überprüfen.
Viele Applikationen können auch das Gegenteil (der Server überprüft die Idendität des Clients)
Der
Root schlüssel MUSS
allerdings immer sicher verwahrt werden.
das root Zertifikat kann allerdings öffendlich zugänglich gemacht werden (Intranet, Internet)
In folgenden gehe ich davon aus, das OpenSSL unter
/opt/openssl
korrekt installiert ist.
top
1.2 Die Verzeichnisstruktur erstellen
zuerst erstellen wir alle benötigten Verzeichnisse.
mkdir /opt/LocalCA
cd /opt/LocalCA
mkdir certs
mkdir private
chmod 700 private
echo '01' > serial
touch index.txt
top
1.3 CA Kofigurations Datei
Erstellen einer Konfigurationsdatei mit dem wir unser roo-Zertifikat erstellen k&ounl;nnen.
#
# Default configuration to use when one
# is not provided on the command line.
#
[ ca ]
default_ca = local_ca
#
# Default location of directories and
# files needed to generate certificates.
#
[ local_ca ]
dir = /opt/LocalCA
certificate = $dir/cacert.pem
database = $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial = $dir/serial
#
# Default expiration and encryption
# policies for certificates.
#
default_crl_days = 365
default_days = 1825
default_md = md5
policy = local_ca_policy
x509_extensions = local_ca_extensions
#
# Default policy to use when generating
# server certificates. The following
# fields must be defined in the server
# certificate.
#
[ local_ca_policy ]
commonName = supplied
stateOrProvinceName = supplied
countryName = supplied
emailAddress = supplied
organizationName = supplied
organizationalUnitName = supplied
#
# x509 extensions to use when generating
# server certificates.
#
[ local_ca_extensions ]
subjectAltName = DNS:altname.somewhere.com
basicConstraints = CA:false
nsCertType = server
#
# The default policy to use when# The default policy to use when
# generating the root certificate.
#
[ req ]
default_bits = 2048
default_keyfile = /opt/LocalCA/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = root_ca_distinguished_name
x509_extensions = root_ca_extensions
#
# Root Certificate Authority distin-
# guished name. Changes these fields to
# your local environment.
#
[ root_ca_distinguished_name ]
commonName = Local Lab Root Certificate Authority
stateOrProvinceName = Some State
countryName = US
emailAddress = root@somename.somewhere.com
organizationName = Root Certificate Authority
[ root_ca_extensions ]
basicConstraints = CA:true
hier kann das obige Beispile heruntergeladen werden.
Das obige Konfigurations File hat viele Einstellungen, die den Bedürfnissen angepasst werden sollten.
Eins ausführliche Beschreibung befindet sich der OpenSSL Config man-Page.
die einzelnen Werte werden in der
cs, req
und
x509
Man-pages beschrieben.
Folgende Werte sollten vorgenommen werden, wenn man das oblige Beispiel verwenden will:
[ local_ca ]
-
default_days
die Anzahl der Tage die das Client oder Server Zertifikat gültig ist.
-
default_md
der zu benutzende algorhytmus zur Schlüsselerstellung (
md5, sha1
und
mdc2
).
[ local_ca_extensions ]
-
subjectAltName
Alternativer Name unter den das Zertifikat bekannt ist.
Diese Möglichkeit ist sehr hilfreich bei Gateway-Service (smtp oder imap)
wo der Server auf beiden Seiten des Gateways verschiedene Namen kaben soll.
Falls dies nicht benötigt wird sollte diese Option auskommentiert werden.
-
nsCertType
Typ des Zertifikates (client, server). Einige Applikationen akzeptieren nur den "richtigen" Typ
[ root_ca_distinguished_name ]
-
commonName
Der Name unter dem die CA bekannt sein soll
-
stateOrProvinceName
Staat oder Provinz in dem siche die CA befindet
-
countryName
Land in dem siche die CA befindet
-
emailAddress
eMail-Adresse der für alle belange des Zertifikate zuständigen Person
-
organizationName
Der offizielle Name mit die CA bekannt sein soll
top
1.4 Generieren des root Zertifikates und des root-Schlüssels
cd /opt/LocalCA
PATH=/opt/openssl/bin:$PATH
export PATH
OPENSSL_CONF=/opt/LocalCA/LocalCA.cnf
export OPENSSL_CONF
openssl req -x509 -newkey rsa -out cacert.pem -outform PEM -days 1825
Während ddes Erstellens wird nach einem Passwort gefragt
Dieses Passwort sollte auf keinen Fall vergessen werden
Es wird immer dann benötigt wenn ein neues Zertifikat erstellt werden soll, oder fall etwas Signiert wird.
Mit dem obigen Prozess erstellen wir ein selbst signiertes ZXertifikat im PEM format und RSA
public/private Verschlüsselung. Das Zertifikat ist 1825 Tage gültig und die Zertifikate werden unter
/opt/LocalCA/cacert.pem # CA public certificate
/opt/LocalCA/private/cakey.pem # CA private key
gespeichert
top
|