Apache: SSL mit dem Apache
von Steffen Heuschkel
SSL (Secrured Socket Layer) ist eine Technik um Verbindungen über das Internet oder im Netzwerk zu verschlüsseln. Da HTTP im Klartext übertragen wird ist es nicht geeignet um z.B. einen sicheren Webshop zu betreiben. Der Apache lässt sich aber auch mit SSL konfigurieren damit sensible Daten nicht im Klartext übertragen werden.
Für einen sicheren Apache wird OpenSSL benötigt. Dieses gibt es auf der Seite www.openssl.org. Da Windows von Hause aus keine Entwicklungswerkzeuge mitbringt wird im folgenden nur die Installation unter Linux beschreiben. Das gleiche gilt auch für den Apache Webserver. Wer SSL unter Windows einsetzen möchte, benötigt entsprechend eigene Tools zur Umsetzung der OpenSSL-Quellcodes.
Für die aktuelle Apache Version 2.0.54 funktioniert das aktuellste OpenSSL Paket (OpenSSL 0.9.8) leider nicht, also muss eine ältere Version herhalten (OpenSSL-0.9.7g). Das OpenSSL-Paket entpacken, konfigurieren, übersetzen und installieren:
#Konfigurationsbefehl
./config --prefix=/usr/local --openssldir=/usr/local/openssl-0.9.7g
make
make install
Der Apache 2 beinhaltet gegenüber seinem Vorgänger bereits ein SSL-Modul welches sich leicht in den Apache integrieren lässt. Der Konfigurationsbefehl ist ja eigentlich schon bekannt und sieht nur geringfügig anders aus. Neu ist nur --enable-ssl und --with-ssl=/usr/local/openssl mit denen die SSL Unterstützung bei der Übersetzung in den Apache eingefügt werden.
#Konfigurationsbefehl
./configure --prefix=/usr/local/apache2_ssl
--enable-mods-shared=most
--enable-so --enable-ssl -with-ssl=/
#BITTE BEACHTEN: Alles in einer Zeile schreiben
usr/local/openssl-0.9.7g
make
make install
Anschließend muss für den gerade übersetzten Webserver noch ein passendes Zertifikat erstellt werden und die SSL Optionen in der httpd.conf bekannt gemacht werden. Die Pfade zu den Zertifikaten müssen natürlich der Umgebung angepasst werden und auch gegen Diebstahl und neugierige Blicke gesichert werden. Außerdem berauchen wir für SSL noch ein paar Schlüssel, die wie folgt generiert werden:
# generieren eines privaten Serverschlüssels.
openssl genrsa -out server.key -des3 1024
#generieren einer Zertifikatsanfrage mit dem privaten Schlüssel
openssl req -new -key server.key -out server.csr
Wichtig ist dabei "Common Name" bei dem der Domainname oder die IP Adresse des Servers angegeben werden muss damit das Zertifikat auf den richtigen Server zeigt. Diese csr-Datei ist für eine offizielle Zertifikatsanfrage geeignet. Ein selbst unterzeichnetes Zertifikat gibt es mit:
openssl req -new -x509 -days 1460 -key server.key -out server.crt
Hier sollte ebenfalls auf den "Common Name" geachtet werden.
Damit beim Apache start nicht immer das Schlüsselkennwort eingeben werden muss kann ein Serverschlüssel ohne Kennwort erzeugt werden:
openssl rsa -in server.key -out server_neu.key
Außerdem erstellen wir eine Konfigurationsdatei für den SSL-Support mit Namen ssl.conf, die wie folgt aussehen könnte:
#ssl.conf
LoadModule ssl_module modules/mod_ssl.so
Listen 443
#Leichte Beschleunigung bei der SSL Session Cache
SSLSessionCache dbm:/usr/local/apache2/logs/ssl_scache
<VirtualHost _default_:443>
DocumentRoot "/usr/local/apache2/htdocs"
ServerName 192.168.0.11:443
ServerAdmin ServerAdmin@domain1.org
ErrorLog /usr/local/apache2/logs/error_ssl_log
TransferLog /usr/local/apache2/logs/access_ssl_log
# SSL Einschalten
SSLEngine on
# Das Zertifikat für den Server
SSLCertificateFile /usr/local/apache2/conf/server.crt
# Die Schlüsseldatei für den Server
SSLCertificateKeyFile /usr/local/apache2/conf/server.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
# Bereitstellung der Standardvariablen für PHP, SSI und CGI
SSLOptions +StdEnvVars
</Files>
<Directory "/usr/local/apache2/cgi-bin">
# Bereitstellung der Standardvariablen für das CGI Verzeichnis
SSLOptions +StdEnvVars
</Directory>
# Eine eigene SSL Logdatei
CustomLog ssl_log "$t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x %b"
</VirtualHost>
Leider gibt es die vorgefertigten Windows-Installationsdateien nicht mit SSL-Unterstützung. Es finden sich zwar über die Suchmaschinen diverse OpenSSL und mod_ssl Dateien - aber nicht unbedingt aus vertrauenswürdiger Quelle. Deshalb soll hier auf das spätere Kapitel verwiesen werden in welchem Windowspakete vorgestellt werden die SSL Unterstützung bereits integriert haben.