Apache ist der am meisten verwendete WebServer laut Netcraft.

Homepage: http://httpd.apache.org/

Lizenz: Apache Software License

Derzeit sind 2 Hauptversionen von Apache im breiten Einsatz: Apache1 (1.3.xx) und Apache2 (2.0.xx).

Auch das LinuxWiki läuft mit Apache - allerdings wird die Hauptarbeit von MoinMoin gemacht (Python-CGI).

Tipps & Tricks

Bücher zum Thema

Ich habe hier ein sehr gutes Buch über Apache zu empfehlen: Der Apache Webserver; Lars Eilebrecht, Nikolaus Rath, Thomas Rohde; Verlag: mitp; 3-8266-0829-1 -- JanRoehrich 2002-10-06 21:09:14

Ein weiteres Buch: L.Stein and D. MacEachern. Writing Apache Modules with Perl and C. O'Reilly, 1999, 1-5659-2567-X

Es gibt ein Projekt am Hasso-Plattner-Institut Potsdam zur Modellierung des Apache - nicht so sehr interessant für Leute, die Apache nur benutzen, sondern für die, die wissen wollen, wie er "innendrin" funktioniert: http://apache.hpi.uni-potsdam.de/

Apache 2.x & SSL/https

Schnelle Methode

Hier werden die Linux-Distributions eigenen Pakete von Apache und openssl genutzt. Ein Verzeichnis ist anzulegen für die Schlüssel und die Konfiguration, z.B. unter /home/ca. Dorthin muss die openssl.cnf und die CA.pl kopiert werden, zu finden sind diese mit find / -name CA.pl}} und {{{find / -name openssl.cnf

Unter Debian/Ubuntu wäre das z.B.

cp /usr/lib/ssl/openssl.cnf /usr/lib/ssl/misc/CA.pl /home/ca

Nun können die beiden Dateien angepasst werden wenn das gewünscht ist, z.B. wenn die Zertifikate länger als ein Jahr gültig sein sollen.

Nun un das Verzeichnis /home/ca gehen und aufrufen:

./CA.pl -newca
./CA.pl -newreq
./CA.pl -signreq
./CA.pl -pkcs12 "Meine Webseite"

Hier ist nun einiges zu beantworten, wichtig ist insbesondere Common Name (eg, YOUR name), hier muss der Name des Webservers eingetragen werden, wie linuxwiki.de.

Die Zertifikate sind damit erstellt, es fehlt nur noch ein Server-Key, der kein Passwort enthält.

Dieser Schlüssel wird erzeugt mit:

openssl rsa -in newkey.pem -out newkeyohnePW.key

Ausführliche Methode

Da man die meisten Erklärungen für mod_ssl in Verbindung für Apache 1.3.x erhält, soll hier eine kurze Anleitung dafür gegeben werden, wie man das für Apache 2.x macht. Apache 2 hat den Vorteil, das mod_ssl gleich mitgeliefert wird. Zur Zertifikats erstellung ist trotzdem noch eine weitere Software nötig, nämlich OpenSSL. Als erstes muss Apache entpackt und konfiguriert werden. Wichtig sind dabei folgende Optionen: "--enable-ssl" und "--with-ssl=[DIR]". Dabei muss in "[DIR]" der Pfad zu den 'Source'dateien von OpenSSL sein. Es muss auch der absolute Pfad sein, ansonsten bricht das konfigurieren ab. Danach ruft man wie gewohnt "make" und "make install" auf.

Nun muss man OpenSSL kompilieren, hierzu reicht im Grunde der ganz normale Aufruf, ohne bestimmte Parameter. Dann müssen wir zunächst ein Zertifikat erstellen. Genauere Informationen zu den Zertifikaten und den Spezifikationen gibt es auf der mod_ssl-Seite. Man sollte wirklich wissen, wie SSL funktioniert, aber das hier zu erklären sprengt den Rahmen. Um uns erstmal einen Key zu erstellen, benutzen wir die mit OpenSSL gelieferte Funktion (die standardmäßig in den /bin Ordner kopiert wird). Mit diesem Aufruf:

openssl genrsa -des3 -rand file1:file2:file3 -out www.example.com.key 1024

generiert man einen Schlüssel. Wobei "genrsa" der Befehl ist zum Schlüssel erstellen. "-des3" ist optional und besagt, dass der Schlüssel durch ein Passwort geschützt wird. Dies ist ""dringend"" empfohlen, auch wenn man bei jedem Start von Apache dann das Passwort eingeben muss. "-rand" sucht sich aus den Dateien file1, file2, file3 dann Bytes zum Verschlüsseln. Hierbei kann eine biliebige Anzahl von Dateien getrennt durch ":" angegeben werden. Sie sollten doch sehr zufällig ausgewählt und relativ groß sein. "-out" legt fest, in welche Datei der key gespeichert werden kann. Lässt man das weg, wird er angezeigt. Die "1024" gibt die Länge des Schlüssels (in Bit) an. Danach müssen wir uns einen "Certificate Signing Request" erstellen, dies geschieht durch dieses Kommando:

openssl req -new -key www.example.com.key -out www.example.com.csr

Wobei der Dateiname hinter "-key" natürlich auf die eben erstellte .key Datei zeigt.

Dieses Script fragt nun nach ein paar Daten, die wahrheitsgemäß angegeben werden müssen. Bei "Common Name" muss unbedingt die Adresse stehen, die der Benutzer später aufruft, sonst wird eine Warnung an den User ausgegeben. Nun kann man diese csr-Datei an einen sog. CA senden, der dann ein Zertifikat erstellt. Über den genauen Ablauf kann man sich bei VeriSign oder Thawte informieren. Es gibt natürlich noch weitere CAs.

Es gibt aber auch die Möglichkeit sich sein Zertifikat selbst zu erstellen. Dafür führt man diesen Befehl aus:

openssl x509 -req -days 30 -in www.example.com.csr -signkey www.example.com.key -out www.example.com.cert

Hierbei ist bei "-in" und "-signkey" die eben erstellten Dateien zu benutzen. In der Datei von "-out" wird dann das Zertifikat erstellt. Der Parameter "-days" gibt an, wann das Zertifikat abläuft (also in wievielen Tagen).

Nun muss man noch zwei Dateien kopieren. Bei der Standardinstallation muss das Zertifikat nach /usr/local/ssl/certs und der key nach /usr/local/ssl/private.

Einbinden der Zertifikate in Apache

Danach folgt das, was am meisten Zeit beansprucht. Das wirkliche Konfigurieren des Indianers anhand der .conf-Dateien. Es gibt in dem /conf Ordner des Apachen eine ssl.conf, die die Standardeinstellungen bestimmt. Diese können wir erstmal so lassen, bis auf den Bereich über den Virtual Host - diesen kommentieren wir komplett mit "#" aus (also vom Beginn der <Virtualhost> Container bis zum </Virtualhost>). Nun gehen wir zu unserer eigenen Definition unserer Virtualhosts. Ich hatte sie in einer speziellen eigenen Datei namens vhosts.conf. Nun erstellen wir ganz normal einen vHost (die Einstellungsmöglichkeiten sind sehr zahlreich), fügen aber folgendes ein:

SSLEngine On
SSLProtocol +all
SSLCiphersuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificatefile /pfad/zum/zertifikat.cert
SSLCertificatekeyfile /Pfad/zum/schluessel.key

An dem Container <virtualhost> muss zu der IP noch der Port 443 eingetragen werden. Dann den Apachen neu starten und schauen, ob er richtig startet - danach ausprobieren. Es sollte die Meldung über das Zertifikat kommen.

Dies ist jetzt nur eine Standardanleitung. Man sollte sich, wenn man es wirklich produktiv einsetzen will, auf jeden Fall ein paar Dokumentationen durchlesen (insbesondere die Sicherheit betreffend). Gute Seiten dafür sind die Seiten für Apache und die Seite von mod_ssl (s.o.).

Verwandte Projekte

Fragen & Antworten

Frage: Weiß vielleicht jemand, wie ich mehrere VirtualHosts via SSL mit unterschiedlichen Zertifikaten ansprechen kann? Zur Zeit benutze ich Apache 1.3.26. Einerseits habe ich aus einer Doku von 1und1, dass man nur einen SSL VirtualHost mit dem Apache betreiben kann (http://server.1und1.com/root_server/howto/6.html), andererseits würden dann Direktiven wie z.B. SSLEngine oder SSLCertificateFile, welche innerhalb einer VirtualHost Konfiguration benutzt werden in dieser Form nicht benötigt. Beim Ausprobieren mit verschiedenen Subdomains wurde mir zwar die richtige Seite geliefert, aber immer nur das Zertifikat des ersten Virtual Hosts. Kennt sich jemand mit dem Problem aus und hat eventuell eine Beispielkonfig für mich? In der Apachedoku bin ich bisher nicht fündig geworden, könnte aber auch an meinen mangelhaften Englischkenntnissen liegen. Vielen Dank im voraus, NeoLex

Frage: Wo finde ich ne gute Anleitung, wie zwei Apache Instanzen auf einem System laufen lassen kann. Ich brauche das weil ich durch eigene Entwicklungen auf Version 2.0.40 festgelegt bin, andererseits aber für eine Seite LDAP Authentifizierung brauche, welche ers ab Version 2.0.41 enthalten ist. -- JanRoehrich 2003-07-17 13:12:52

Ich habe ein kleines Problem. Mein Apache ignoriert meine .htaccess. Was muß ich aktivieren, damit er sie nicht mehr ignoriert? -- ChristianNill

Bei dem Apache von Debian Woody ist der Content-Length header kaput. Bei Dateien >2G ist er negativ. Bug? Was kann man tun?

Frage: Wie bring ich den Apache2 dazu perl auszuführen? -- ThomasHochstetter 2004-05-14 16:59:46


siehe auch WebServer, ApacheTop


KategorieServer CategoryCategory

Apache (zuletzt geändert am 2010-11-27 12:00:07 durch 178)