OpenSSL ist eine frei verfügbare Implementierung des SSL/TLS-Protokolls und bietet zahlreiche Funktionen zur Zertifikat-Verwaltung sowie verschiedene kryptographische Funktionen. Es basiert auf dem SSLeay-Paket, das von Eric A. Young und Tim Hudson entwickelt wurde. OpenSSL wird derzeit von einer unabhängigen Gruppe weiterentwickelt.
Das Paket umfaßt mehrere einzelne Applikationen, z.B. zur
Erzeugung von Zertifikaten, von Requests, zur Verschlüsselung usw.
Es gibt zwei Möglichkeiten, das Paket zu kompilieren. Die erste
Möglichkeit faßt die einzelnen Applikationenen zu einem
monolithischen Programm zusammen, openssl
.
openssl
wird dann mit dem Applikationsnamen als Parameter
aufgerufen.
Die zweite Möglichkeit kompiliert die Applikationen als eigenständige Programme, es gibt kein monolithisches Programm.
Alle Angaben zur Übersetzung und Konfiguration des Paketes beziehen sich auf das Betriebssystem SunOS 5.5.1 (Solaris 2.5.1), den C-Compiler gcc-2.7.2.1 und OpenSSL-0.9.2b.
In apps/ca.c
Wenn die ca
-Applikation die Umgebungsvariable
OPENSSL_CONF
(früher SSLEAY_CONF
) auswerten
soll, muß die folgende Änderung in
apps/ca.c
ab Zeile 404 vorgenommen werden:
404 if (configfile == NULL) 405 { 406 /* We will just use 'buf[0]' as a temporary buffer. */
ersetzen durch
404 if (configfile == NULL) 405 configfile = getenv( "OPENSSL_CONF" ); 406 if (configfile == NULL) 407 { 408 /* We will just use 'buf[0]' as a temporary buffer. */
Achtung:
Im Unterschied zum SSLeay-Paket müssen die folgenden Anpassungen
nach der Konfiguration (siehe Übersetzung als Monolith bzw.
Übersetzung als
Programmsammlung) des Pakets erfolgen. Der Übersichtlichkeit
wegen stehen die Anpassungen schon an dieser Stelle.
Das OpenSSL-Paket enthält eine Reihe von Perl-Skripten,
für die der Pfad angepaßt werden kann. Das ist nicht
unbedingt notwendig, da während der Kompilation sämtliche
Skripte durch perl
script.pl
aufgerufen
werden. Allerdings können im späteren Betrieb einige Skripte
durch direkte Angabe des Skriptnamens gestartet werden, so daß
das vorangestellte "perl" entfallen kann.
Die Pfad-Anpassung wird größtenteils durch ein Skript
erledigt. Achtung, nur den Pfad angeben, z.B. /usr/bin
wenn der Pfad /usr/bin/perl
lautet:
perl util/perlpath.pl
/neuer/pfad
In zwei Skripten muß der Pfad von Hand geändert werden:
apps/der_chop
, Zeile 1 änderncrypto/bf/asm/bf-686.pl
, Zeile 2
löschenUm den auf /usr/local/ssl
voreingestellten
Installationspfad zu ändern, müssen die Pfadangaben in
einigen Dateien geändert werden. Auch wenn nicht mit
make
install
installiert wird, müssen die
Pfadangaben angepaßt werden, weil sonst möglicherweise Pfade
einkompiliert werden, die nicht gewollt sind. Die Pfadanpassungen
erfolgen am einfachsten mit folgendem Befehl:
perl util/ssldir.pl
/new/ssl/home
Alternativ kann die Anpassung von Hand erfolgen:
crypto/cryptlib.h
, Zeilen 88, 89, 90 und
91tools/c_rehash
, Zeile 11Makefile.ssl
, Zeile 139util/mk1mf
, Zeile 8Mit
perl Configure solaris-sparc-gcc
wird das Paket für die Übersetzung konfiguriert. Alternativ dazu bietet sich die Möglichkeit einer automatischen Erkennung mit dem Befehl
sh config
Nach Abschluß der Konfiguration wird ein Hinweis ausgegeben, daß das OpenSSL-Programm (noch) nicht verfügbar ist:
c_rehash: rehashing skipped ('openssl' program not available)
Das liegt daran, daß das Konfigurations-Skript versucht
Hash-Links auf einige Zertifikate zu setzen, wozu das Programm
openssl
(welches ja erst noch kompiliert werden soll)
benötigt wird. Nachdem das Programm übersetzt wurde, kann
dieser Vorgang mit dem untenstehenden Befehl ("make
rehash
") nachgeholt werden.
Achtung:
Bevor folgende Schritte durchgeführt werden, sollten jetzt die
unter Anpassungen aufgeführten
Änderungen vorgenommen werden.
Mit
make clean ; make errors ; make
wird das Paket übersetzt. Durch make
errors
wird numerischen Fehlercodes ein kurzer, beschreibenender
Fehlertext zugeordnet. Nun sollte noch
make rehash ; make test
aufgerufen werden. Durch das erste Kommando make
rehash
werden die oben erwähnten Hash-Werte in einem
Demo-Verzeichnis wiederhergestellt, welche für den folgenden
Testlauf gebraucht werden. Mit make
test
werden umfangreiche Tests des Paketes durchgeführt. Erfolgte der
Testlauf im Sinne der Tests fehlerfrei, kommt abschließend eine
Meldung ähnlich der folgenden:
OpenSSL 0.9.2b 22 Mar 1999 built on: Thu Apr 8 12:26:12 MET DST 1999 platform: solaris-sparc-gcc options: bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) idea(int) blowfish(ptr) compiler: gcc -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN `test' is up to date.
Die Installation erfolgt durch das Kommando
make install
Achtung:
In $(SSLDIR)
muß noch das Verzeichnis
newcerts
angelegt werden. Der install
-Befehl
erzeugt es nicht. Das Verzeichnis wird aber von der
Default-Konfigurationsdatei openssl.cnf
(s.u.) verlangt,
um dort die erzeugten Zertifikate abzulegen.
Wer etwas mehr Kontrolle über die Installation haben will, kann sich an folgendes Verfahren halten:
Für die Installation muß zunächst ein
Zielverzeichnis erzeugt werden, in dem Programme, Bibliotheken usw.
installiert werden können. Der Pfad dieses Verzeichnisses sollte
günstigerweise mit dem vor der Kompilierung angegebenen
übereinstimmen. In diesem Verzeichnis werden dann die
Verzeichnisse bin
, crl
, certs
,
lib
, newcerts
, private
erzeugt.
Bei Bedarf kann auch noch ein Verzeichnis include
erzeugt
werden, in das dann die Header-Dateien der OpenSSL-Bibliotheken kopiert
werden. Das ist sinnvoll, wenn die ergänzenden Programme von Steve
Henson (siehe pfx und pkcs12) eingesetzt bzw. kompiliert
werden sollen. Anschließend werden die Dateien kopiert (im
folgenden $(SSLDIR) = Installationspfad von OpenSSL):
cp libcrypto.a libssl.a apps/openssl.cnf
$(SSLDIR)/lib/
chmod 644 $(SSLDIR)/lib/*
cp tools/c_* apps/der_chop apps/CA.sh apps/openssl
$(SSLDIR)/bin/
chmod 755 $(SSLDIR)/bin/*
cp include/* $(SSLDIR)/include/
e_os.h
, date.h
und
rsaref.h
werden nicht benötigt und sollten gelöscht
werden:rm $(SSLDIR)/include/e_os.h $(SSLDIR)/include/date.h
$(SSLDIR)/include/rsaref.h
chmod 644 $(SSLDIR)/include/*
Jetzt muß noch eine Datei angelegt werden, die die aktuelle Seriennummer des herauszugebenden Zertifikats in hexadezimaler Form enthält:
echo "01" > $(SSLDIR)/serial
Dann muß noch eine Indexdatei für die erzeugten Zertifikate angelegt werden:
touch $(SSLDIR)/index.txt
Die beiden Dateien serial
und index.txt
werden nach jeder erfolgreichen Zertifizierung eines Requests durch das
Programm ca
geändert, d.h. die Seriennummer in
serial
wird um den Wert eins erhöht, und in
index.txt
wird das herausgegebene Zertifikat registriert (siehe
index.txt
).
Es ist wichtig, daß die OpenSSL-Konfigurationsdatei
$(SSL_DIR)/lib/openssl.cnf
vor dem Benutzen der
OpenSSL-Applikationen durchgesehen und den Erfordernissen
angepaßt wird. Siehe Beispiel im Anhang opsenssl.cnf
.
Mit
perl Configure solaris-sparc-gcc
wird das Paket für die Übersetzung konfiguriert. Alternativ dazu bietet sich die Möglichkeit einer automatischen Erkennung mit dem Befehl
sh config
Nach Abschluß der Konfiguration wird ein Hinweis ausgegeben, daß das OpenSSL-Programm (noch) nicht verfügbar ist:
c_rehash: rehashing skipped ('openssl' program not available)
Das liegt daran, daß das Konfigurations-Skript versucht,
Hash-Links auf einige Zertifikate zu setzen, wozu das Programm
openssl
(welches ja erst noch kompiliert werden soll)
benötigt wird. Nachdem das Programm übersetzt wurde, kann
dieser Vorgang mit untenstehenden Befehl ("make
rehash
") nachgeholt werden.
Achtung:
Bevor folgende Schritte durchgeführt werden, sollten jetzt die
unter Anpassungen aufgeführten
Änderungen vorgenommen werden.
Mit
make clean ; make errors ; make
wird das Paket übersetzt. Durch make
errors
wird numerischen Fehlercodes ein kurzer, den Fehler
beschreibenden, Fehlertext zugeordnet. Nun sollte noch
make rehash ; make test
aufgerufen werden. Durch das erste Kommando make
rehash
werden die oben erwähnten Hash-Werte in einem
Demo-Verzeichnis wiederhergestellt, welche für den folgenden
Testlauf gebraucht werden. Mit make
test
werden umfangreiche Tests des Paketes durchgeführt. Erfolgte der
Testlauf im Sinne der Tests fehlerfrei, kommt abschließend eine
Meldung ähnlich der folgenden:
OpenSSL 0.9.2b 22 Mar 1999 built on: Thu Apr 8 12:26:12 MET DST 1999 platform: solaris-sparc-gcc options: bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) idea(int) blowfish(ptr) compiler: gcc -O3 -fomit-frame-pointer -mv8 -Wall -DB_ENDIAN `test' is up to date.
Jetzt ist das komplette Paket übersetzt; die Übersetzung
diente aber nur dazu, die Bibliotheken libssl.a
und
libcrypto.a
im Quellverzeichnis zu erzeugen. Die einzelnen
Applikationen werden am einfachsten mit folgendem Shell-Skript im
Quell-Verzeichnis übersetzt:
#!/bin/sh -x for i in asn1pars ca ciphers crl crl2p7 dgst dh dsa dsaparam enc errstr gendh \ gendsa genrsa nseq pkcs7 req rsa sess_id speed verify version x509 do gcc -Icrypto -Iinclude -fomit-frame-pointer -mv8 -Wall -o out/$i \ apps/$i.c apps/apps.c libssl.a libcrypto.a done
Zwei Applikationen sind noch aus Kompatibilitätsgründen mit der OpenSSL-Installation als Monolith umzubenennen:
mv out/asn1pars out/asn1parse
mv out/crl2p7 out/crl2pkcs7
Für die folgenden Applikationen war die Übersetzung mit dieser Methode nicht erfolgreich:
s_client, s_server, s_time
Eine Beschreibung der Funktion der einzelnen Applikationen findet sich im Anhang OpenSSL-Parameter.
Für die Installation muß zunächst ein
Zielverzeichnis erzeugt werden, in dem Programme, Bibliotheken usw.
installiert werden können. Der Pfad dieses Verzeichnisses sollte
günstigerweise mit dem vor der Kompilierung angegebenen
übereinstimmen. In diesem Verzeichnis werden dann die
Verzeichnisse bin
, crl
, certs
,
lib
, newcerts
, private
erzeugt.
Bei Bedarf kann auch noch ein Verzeichnis include
erzeugt werden, in das dann die Header-Dateien der OpenSSL-Bibliotheken
kopiert werden. Das ist sinnvoll, wenn die ergänzenden Programme
von Steve Henson (siehe pfx und
pkcs12) eingesetzt bzw.
kompiliert werden. Anschließend werden die Dateien kopiert
(im folgenden $(SSLDIR) = Installationspfad von OpenSSL):
cp libcrypto.a libssl.a apps/openssl.cnf
$(SSLDIR)/lib
chmod 644 $(SSLDIR)/lib/*
cp tools/c_* apps/der_chop apps/CA.sh out/*
$(SSLDIR)/bin
chmod 755 $(SSLDIR)/bin/*
cp include/* $(SSLDIR)/include
e_os.h
, date.h
und
rsaref.h
werden nicht benötigt und sollten gelöscht
werden:rm $(SSLDIR)/include/e_os.h $(SSLDIR)/include/date.h
$(SSLDIR)/include/rsaref.h
chmod 644 $(SSLDIR)/include/*
Jetzt muß noch eine Datei angelegt werden, die die aktuelle Seriennummer des herauszugebenden Zertifikats in hexadezimaler Form enthält:
echo "01" > $(SSLDIR)/serial
Dann muß noch eine Indexdatei für die erzeugten Zertifikate angelegt werden:
touch $(SSLDIR)/index.txt
Die beiden Dateien serial
und index.txt
werden nach jeder erfolgreichen Zertifizierung eines Requests durch das
Programm ca
geändert, d.h. die Seriennummer in
serial
wird um eins erhöht und das herausgegebene
Zertifikat wird in index.txt
registriert (siehe index.txt).
Es ist wichtig, daß die OpenSSL-Konfigurationsdatei
$(SSL_DIR)/lib/openssl.cnf
vor dem Benutzen der
OpenSSL-Applikationen durchgesehen und den Erfordernissen
angepaßt wird. Siehe Beispiel im Anhang openssl.cnf
.