SSL-Zertifikate erstellen und mit Apache nutzen

In der Kommunikation zwischen Client und Server werden Zertifikate benötigt, wenn sichergestellt werden soll, dass sich die Parteien vertrauen können. Ein Zertifikat muss von einer Zertifizierungsstelle (Certification Authority, CA) signiert werden; die CA bürgt für die Echtheit des Zertifikats.

Es soll ein SSL-Zertifikat (X.509) erstellt werden. Unabhängig davon, ob das Zertifikat von einer externen CA oder selbst signiert werden soll, muss zuerst immer eine Bürgschaftsanfrage (certificate request, CSR) generiert werden.

$ openssl req -new -nodes -keyout private_key.pem -out private_key.pem -days 365
Generating a 1024 bit RSA private key
…………………….++++++
……….++++++
writing new private key to ‘private_key.pem’
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‘.’, the field will be left blank.
—–
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Berlin
Locality Name (eg, city) []:Berlin
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:example.com
Email Address []:webmaster@example.com

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Der Befehl erstellt den privaten Schlüssel und das CSR in einer Datei. Auf die Angabe eines Passworts wurde aus praktischen Gründen verzichtet. Würde ein privater Schlüssel mit Passwort in einen Serverdienst eingebunden werden, müsste das Passwort bei jedem Start des Dienstes erneut eingegeben werden. Da der private Schlüssel somit ungeschützt ist, muss er unbedingt vor fremden Zugriffen geschützt werden.

Nun kann das CSR an die CA übergeben und signiert werden. Eine gemeinschaftsbetriebene, nicht-kommerzielle Zertifizierungsstelle, die kostenfrei X.509-Zertifikate für verschiedene Einsatzgebiete ausstellt ist CAcert.

—–BEGIN CERTIFICATE REQUEST—–
ICHBINUNGÜLTIG9tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCu/ppznA8u
DD0UzHX/YQj5doqi2vWvGNhg849RJpbJ/+vlW/ZhkBTJ6M8ry/dzg1lp+XK08kkK
BgNVBAcTBkJlcmxpbjEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRk
MRQwEgYDVQQDEwtleGFtcGxlLmNvbTEkMCIGCSqGSIb3DQEJARYVd2VibWFzdGVy
pLZMP3XDjvFkZW8F22Aq3ySBaLGagKHxvwIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
Eob45fj1XE9AOqTAT8noFcdK1uixXsgPYfqNiQrVXfAunoiLUhYYFYXRc1qAI3dA
MIIBzzCCATgCAQAwgY4xCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZCZXJsaW4xDzAN
gYEAn/HkOtZyMCLZRkhG1Prph/1hbLilyARVul+s8Z/J+TnAWw6fxcyDpXGDTfNj
FDj7WXcxZ+pfPF9lzfz8mI3NLNr8BSx/ejM7qHAjcie+RUkUQo2KToSFv2D9w6cq
2eZW3F9helt3qae8hXBfbSTORYozLRF8c+ZQHKkCJJjoZUs=
—–END CERTIFICATE REQUEST—–

Nach einer Identitätsprüfung wird die Zertifizierungsstelle ein signiertes, öffentliches Zertifikat zurückgeben, das zusammen mit dem privaten Schlüssel benutzt werden kann. Das Zertifikat kann in die oben genannte Datei kopiert werden.

Um das Zertifikat für eine sichere Verbindung mit HTTPS zu verwenden, muss es auf den Server kopiert und im Webserver eingebunden werden. Im Beispiel wird ein Apache2 auf einem Debian GNU/Linux verwendet.

# cp private_key_and_certificate.pem /etc/apache2/ssl/example.com.pem
# chmod 600 /etc/apache2/ssl/example.com.pem

Im Webserver wird das Zertifikat mit der Direktive SSLCertificateFile eingebunden.

NameVirtualHost *:443
<VirtualHost *:443>
ServerAdmin webmaster@example.com
ServerName example.com
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/example.com.pem
</VirtualHost>

Damit sind alle Vorbereitungen beendet und die sichere Verbindung kann genutzt werden.

Installation von Oracle Database XE auf Ubuntu Linux

Die Installation von Oracle® Database Express Edition 10g Release 2 (10.2) for Linux erfolgt auf Ubuntu Linux (feisty) wie in der Anleitung des Herstellers beschrieben.
Nicht in der Anleitung erwähnt wird, dass es auch ein Debian repository für Oracle XE gibt, das sich mit folgendem Eintrag in der Datei /etc/apt/sources.list nutzen lässt.

deb http://oss.oracle.com/debian unstable main non-free

Der für Secure-APT benötigte Public Key (2E2BCDBCB38A8516) wird geladen, geprüft und installiert.

# wget -q http://oss.oracle.com/el4/RPM-GPG-KEY-oracle
# gpg –import RPM-GPG-KEY-oracle
gpg: key B38A8516: public key “Oracle OSS group (Open Source Software group) ” imported
gpg: Total number processed: 1
gpg: imported: 1
# gpg –fingerprint build@oss.oracle.com
pub 1024D/B38A8516 2006-09-05 [expires: 2011-09-04]
Key fingerprint = 1122 A29A B257 825F 322C 234E 2E2B CDBC B38A 8516
uid Oracle OSS group (Open Source Software group)
sub 2048g/0042D4F4 2006-09-05 [expires: 2011-09-04]
# gpg –armor –export B38A8516 | apt-key add -
OK

Nun kann das Paket installiert werden.

# aptitude install oracle-xe-universal

Die Oracle Datenbank erwartet bei 512 Megabyte oder mehr RAM mindestens ein Gigabyte Swap space. Der erforderliche Speicher stand auf dem System nicht zur Verfügung und so wurde der Swap durch eine Datei erweitert. Offenbar findet die Überprüfung der Größe des Swap-Speichers nur bei der Installation und nicht beim Betrieb der Datenbank statt. Somit wird das Swap-File nur für die Installation benötigt.
Ist die Installation abgeschlossen, muss die Datenbank mit folgendem Befehl konfiguriert werden.

# /etc/init.d/oracle-xe configure

Weiterhin sind die Umgebungsvariablen für Oracle-Benutzer zu setzen. Bei dieser Installation soll allein der Benutzer oracle die Datenbank benutzen. Hierzu wird in das .bash_profile des Benutzers ein Skript eingebunden, dass alle benötigten enviroment variables setzt.

# echo ". /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh" >> /usr/lib/oracle/xe/.bash_profile

Die Installation lief scheinbar erfolgreich durch und es wurde der fehlerfreie Start des Oracle Net Listener und der Oracle Database 10g Express Edition Instance gemeldet. Tatsächlich brachen alle Oracle-Prozesse sofort ab, weil der Net Listener keine Verbindung zum target host aufbauen konnte.
Die Ursache war in der Datei /etc/hosts zu finden. Da der Ursprung des Fehlers in der Datei unklar ist, sei der Hinweis auf sie an dieser Stelle ausreichend.
Ist die Oracle-Datenbank erfolgreich installiert und konfiguriert worden, kann es losgehen. Da der Benutzer oracle Mitglied der Gruppe dba ist, muss kein Passwort eingegeben werden.

# su – oracle
$ sqlplus sys as sysdba

SQL*Plus: Release 10.2.0.1.0 – Production on Fri Aug 10 22:04:28 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0 – Production

SQL>

Swap erweitern durch Dateien

Wenn die als Swap zur Verfügung stehende Festplattenpartition zu klein ist, kann der Swap-Speicher durch Dateien im Linux-Filesystem erweitert werden. Dieser Weg sollte selbstverständlich nur eine Ausnahme darstellen, da ein Swap-Speicher in einer Datei noch langsamer als ohnehin schon ist.

Um eine Swap-Datei hinzuzufügen ist wie folgt vorzugehen:

Zuerst wird eine Datei der gewünschten zusätzlichen Swap-Größe erstellt (hier 1GB).

# dd if=/dev/zero of=/swap-file bs=1024 count=1048576

Nun wird ein Swap-Bereich in der Datei erstellt…

# mkswap /swap-file

… und aktiviert.

# swapon /swap-file

Damit das neue Swap-File beim Booten aktiviert wird, muss folgender Eintrag der Datei /etc/fstab hinzugefügt werden:

/swap-file swap swap defaults 0 0