Da es also keinen sachlichen Grund für einen Windows-Server gibt, befasst sich diese Seite auch nicht mit Apache in einer Windows-Umgebung.
- Installation
- Konfigurationsdateien für Websites
- Module
- Private Konfiguration mit .htaccess
- HTTPS-Der verschlüsselte Zugriff
- Konfigurieren des Apachen für HTTPS
Installation
Jedes Linux hat Apache in seinem Repository. Da das Repository die denkbar sicherste Quelle ist, sollte der Apache von dort installiert werden.Debian, Ubuntu und Linux Mint verwenden das Tool apt-get für die Installation seiner Pakete. Das Apache-Paket heißt apache2. Die Installation erfolgt mit dem Befehl:
apt-get install apache2Im weiteren Verlauf der Seite wird von einer Debian-Installation ausgegangen, die auch der unter einem Ubuntu-Server entspricht. Einige Linux-Versionen unterscheiden sich in Details.
Red Hat und CentOS
Red Hat und CentOS verwenden das Tool yum und das Apache-Paket heißt dort httpd, weil Apache ein HTTP-Server (oder Daemon) ist.yum install httpdEntsprechend heißt das Konfigurationsverzeichnis bei Red Hat und CentOS auch /etc/httpd.
SUSE und OpenSUSE
Umgebung und Pfade
- /etc/apache2: Konfigurationsdateien
- /var/www/html: Die Webseiten, die der Apache anzeigt. Darin liegt bereits nach der Installtion eine Datei index.html.
- /var/log/apache2: Fehlermeldungen und Protokolle des Apache
Test und Neustart
Ob der Apache auf dem lokalen Computer läuft, lässt sich einfach durch einen dort gestarteten Browser, beispielsweise Firefox prüfen. Man gibt in die Adressleiste einfach localhost ein und es meldet sich die Standardseite, die von Apache bei der Installation hinzugefügt wird.Bei Änderungen an der Konfiguration muss der Apache neu gestartet werden. Dazu verwendet man das Kommando:
systemctl restart apache2Im Allgemeinen ist es auch noch möglich, die System-V-Startskripte zu verwenden.
/etc/init.d/apache2 restart
Konfigurationsdateien für Websites
Die Konfiguration eines Apachen erfolgt im Verzeichnis /etc/apache2.Für jede Präsenz wird typischerweise eine eigene Konfigurationsdatei erstellt. und im Verzeichnis /etc/apache2/sites-available abgelegt.
Damit die Konfigurationsdatei aber wirksam wird, muss sie im Verzeichnis /etc/apache2/sites-enabled erscheinen. Anstatt die Dateien zu verschieben, wird üblicherweise ein symbolischer Link auf die jeweilige Datei des Verzeichnisses sites-available angelegt. Änderungen in einer der beiden Verzeichnisse gelten so für beide und die Konfiguration der Site läuft nicht auseinander. Ein solcher symbolischer Link wird wie folgt angelegt:
cd /etc/apache2/sites-enabled ln -s ../sites-available/meineseiteDie Struktur der Verzeichnisse sieht folgendermaßen aus:
/etc/apache2 sites-enabled sites-availableDateien in den enabled-Verzeichnissen sind normalerweise symbolische Links auf Dateien im parallelen available-Verzeichnis.
Geltungsbereiche
Für jede Website wird sinnvollerweise eine eigene Konfigurationsdatei angelegt. Sie beginnt mit dem Schlüsselwort VirtualHost. Ihm folgen der Hostname, ein Doppelpunkt und die Portnummer.<VirtualHost *:80> ... Direktiven ... </VirtualHost>
- Der Stern besagt, dass es egal ist, unter welchem Namen der Server angesprochen wurde. Wie das Schlüsselwort VirtualHost schon vermuten lässt, ist es möglich, einen Webserver verschiedene - virtuelle - Hostnamen zu bedienen. Wir vor den Doppelpunkt beispielsweise www.willemer.de gestellt, wird diese Konfiguration nur verwendet, wenn als Adressnamen www.willemer.de verwendet wurde. Es können durchaus mehrere Namen, auch Domainnamen beispielsweise per DNS auf einen Server umgeleitet werden.
- Die Portnummer hinter dem Doppelpunkt ist standardmäßig 80, da HTTP standardmäßig auf 80 bedient wird. Durch Ändern dieser Nummer können weitere Ports bedient werden.
Jeder Pfad kann einzeln konfiguriert werden. Dazu wird ein Bereich mit dem Schlüsselwort Directory gekennzeichnet. Es folgt der Pfad des Aufrufs. Erfolgt der Aufruf per www.firma.de/produkte, kann der Bereich der Produkte gesondert behandelt werden, indem Folgendes definiert wird:
<Directory /produkte> ... Direktiven ... </Directory>
Direktiven
- DirectoryIndex index.html index.htm
Die Dateinamen hinter DirectoryIndex werden automatisch geladen, wenn nur der Pfad angegeben ist. - Options +Option -Option Option
Steht + wird Option eingeschaltet. Bei - wird es abgeschaltet. Steht nichts wird ein + ergänzt.- FollowSymLinks: Folgt auch symbolischen Links.
- Indexes: Die in DirectoryIndex genannten Dateien werden geladen, wenn nur der Pfad angeben wird.
- ExecCGI: Erlaubt die Ausführung von CGI-Programmen.
- AllowOverride All
erlaubt, dass im Directory eine Datei namens .htaccess als lokale Konfigurationsdatei verwendet wird.- None: (Standard) .htaccess-Dateien werden ignoriert.
- All: Die Konfigurationen in .htaccess überschreiben die Konfiguration.
- AuthConfig: .htaccess kontrolliert die Authentifizierung des Benutzers mit Kennung und Passwort.
- FileInfo: Eigene Dateitypen sind erlaubt. Jedes Directory kann eigene Fehlermeldungen generieren.
- Allow all
Legt fest, wer den Webserver überhaupt ansprechen darf.- all: Die Benutzung wird nicht eingeschränkt.
- from: Es folgt eine Netzwerkadresse. Allow from 192.168.109.0 erlaubt also den Zugriff aus dem lokalen Netzwerk 192.168.109.0. Mehrere Adressen können durch Leerzeichen getrennt angegeben werden. Auch Hostnamen sind erlaubt.
- Deny All
Beschränkt den Zugriff analog zu Allow. - Order deny,allow
Erklärt die Reihenfolge von Deny und Allow. Hier gelten zunächst alle Verbote von Deny. Anschließend werden die Allow-Regeln als Ausnahme zugelassen.
Module
Apache kann durch Module erweitert werden. Am bekanntesten dürfte das Interpretermodul für die Sprache PHP sein. Für dieses, wie für alle anderen Module, gibt es je eine Datei php.conf und eine Datei php.load. Die erstere konfiguriert das Modul und ist modulspezifisch, die zweite Datei gibt an, wo sich das Modul befindet und wie es geladen wird.Auch die Module werden in zwei Verzeichnissen enabled und available abgelegt und werden analog zu sites verwaltet.
/etc/apache2 mods-enabled mods-available
Private Konfiguration mit .htaccess
Wurde in der Konfiguration die Direktive AllowOverride freigeschaltet, kann im Datenverzeichnis eine Datei .htaccess abgelegt werden, die Konfigurationen auf Verzeichnisebene erlaubt. Das ist insbesondere interessant, wenn man eine Webpräsenz bei einem Provider hat, dessen Apache sich der eigenen Konfiguration entzieht.
-
ErrorDocument 404 /fehler404.html
Der HTTP-Fehler 404 (File not found) wird auf eine eigene HTML-Datei umgelenkt, die den Fehler dem Anwender meldet. -
AuthType Basic AuthName "Einloggen, bitte" AuthUserFile /var/www/sicher/.htpasswd require valid-user
- AuthType Basic
erlaubt die Verwendung einer lokalen Passwortdatei. - AuthName "Meldung"
erscheint als Überschrift in der Dialogbox, die den Anwender nach Benutzerkennung und Passwort fragt. - AuthUserFile Datei
gibt den Dateiname inklusive Pfad der Passwortdatei an. - require valid-user
legt fest, dass nur korrekte Anmeldungen Zugriff auf dieses Verzeichnis erhalten.
- AuthType Basic
htpasswd -c /var/www/sicher/.htpasswd paul
HTTPS-Der verschlüsselte Zugriff
Bei der HTTP-Kommunikation über den Port 80 werden alle Daten im Klartext übertragen. Das ist insbesondere bei der Eingabe von Passwörtern nicht gut. Für einen verschlüsselten Transport wird HTTPS verwendet, das über den Port 443 kommuniziert.HTTPS bietet gegenüber HTTP zwei wichtige Eigenschaften:
- Die Übertragung ist verschlüsselt.
- Der Server weist sich gegenüber dem Client als verlässliche Quelle aus.
Verschlüsselung über das Zertifikat
- Der Server sendet dem Client, also dem Browser, bei Verbindungsaufnahme den öffentlichen Teil seines Zertifikats. Das Zertifikat enthält den Domain-Namen der Webseite.
- Der Client prüft, ob Zertifikat und Domain-Namen zusammenpassen und kann aufgrund der anderen Zertifikatsinhalte feststellen, wer der Eigner ist.
- Auf der Basis dieses Zertifikats kann eine asymmetrische Verschlüsselung stattfinden. Der Client verschlüsselt mit dem öffentlichen Schlüssel des Zertifikats. Dies kann dann nur durch den privaten Schlüssel des Zertifikats entschlüsselt werden.
- Unter dieser Verschlüsselung wird ein zufälliger symmetrischer Schlüssel ausgetauscht, der für den weiteren Verlauf der Verschlüsselung verwendet wird. Die symmetrische Verschlüsselung ist weniger prozessorbelastend und darum auch schneller.
Zertifizierung der Zertifikate
Damit der Client die Echtheit des Zertifikats prüfen kann, müsste er jedes Zertifikat eines Webservers weltweit mit sich führen. Das ist nicht machbar.Wie bei einem Personalausweis, der durch den Stempel des Ausstellerlandes autorisiert wird, geht man bei Zertifikaten vor. Es gibt es Zertifikatsautorisierungsstellen (CA - Certificat Authority), die Zertifikate quasi zertifizieren.
Dazu sendet man sein Zertifikat an die CA, die mit ihrem privaten Schlüssel das Zertifikat autorisiert. Parallel macht die CA-Stelle ihren öffentlichen Schlüssel verfügbar. Beispielsweise enthält ein Browser bereits eine Bibliothek der relevanten CA-Stellen. Zeigt der öffentliche CA-Schlüssel, dass das Zertifikat von einer bekannten CA-Stelle autorisiert wurde, kann der Client das Zertifikat bedenkenlos verwenden.
Für das eigene Netzwerk kann man das CA-Zertifikat auch selbst erstellen. Das ist bei Intranet-Anwendungen durchaus sinnvoll, weil die meisten Browser auf Zertifikate ohne bekannte CA sehr aufgeregt reagieren, was sich leicht auf die Anwender überträgt, die mit Warnungen überhäuft werden.
- Der private CA-Key wird benötigt, um das Zertifikat zu autorisieren.
- Der öffentliche CA-Key muss zum Browser, damit er bestätigt, dass das Zertifikat autorisiert ist. Aber auch der Server benötigt ein Exemplar.
Browser-Einbindung
Beim Firefox wird der öffentliche CA-Key über die drei waagerechten Striche, die neuerdings ein Menü darstellen sollen und dann über folgende Schritte eingefügt.- Einstellungen|Erweitert|Zertifikate
- Dort wählen Sie den Button Zertifikate anzeigen.
- Klicken Sie auf den Reiter Zertifizierungsstellen.
- Dort wählen Sie den Button Importieren. In der nun erscheinenden Dateiauswahlbox können Sie die Datei auswählen.
Webserver mit kombinierten Schlüsseln
Bei einigen Webservern kann der öffentliche CA-Schlüssel nicht separat eingebunden werden. In diesen Fällen ist es möglich, den öffentlichen CA-Schlüssel direkt an das öffentliche Zertifikat anzuhängen. Das funktioniert mit einem einfachen Linux-Standardbefehl:cat ca-pub.pem >> zertifikat-pub.pem
Konfigurieren des Apachen für HTTPS
Für den Apachen liegt nach der Installation bereits eine Default-Konfiguration für SSL unter /etc/apache2/sites-available/default-ssl.conf vor. Diese Konfiguration muss nur angepasst und aktiviert werden. Abgesehen von Kommentaren enthält sie folgende Einträge:<IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key </VirtualHost> </IfModule>Zunächst prüft die Konfiguration, ob das Modul mod_ssl installiert ist. Das ist der Fall, wenn das Modul installiert wurde. In der Folgezeile der Konfiguration wird der Zugriff für den Port 443 zugelassen, dem Standard-Port von HTTPS. Die anderen Einträge unterscheiden sich nicht von der Standardkonfiguration, nur die mit SSL beginnenden Direktiven sind neu. Sie sollten auf die erstellten Dateien verweisen. Und lauten anschließend so:
SSLCertificateFile /etc/apache2/ssl/zertifikat-pub.pem SSLCertificateKeyFile /etc/apache2/ssl/zertifikat-priv.pem ... SSLCertificateChainFile: /etc/apache2/ssl/ca-pub.pemNatürlich müssen zuvor die Dateien in die angegebenen Verzeichnisse geschoben werden.
Die so angepasste Datei liegt im Verzeichnis sites-available, muss aber noch im parallelen Verzeichnis sites-enabled auftauchen. Das macht man nach guter UNIX-Sitte mit einem symbolischen Link:
cd /etc/apache2/sites-enabled ln -s ../sites-available/default-ssl.conf 001-ssl.confDas Apache-Modul für mod_ssl wird, falls noch nicht vorhanden, installiert.
apt install libapache2-mod-gnutlsDas Modul SSL wird freigeschaltet.
a2enmod sslNach allen Konfigurationsänderungen muss der Apache neu gestartet werden:
systemctl restart apache2