SSL-Proxy unter Debian (Etch) einrichten

Ein SSL-Proxy ist teilweise sehr nützlich, wenn man mehrere Domains mit einem einzigen SSL-Zertifikat (und nur einer IP) absichern möchte. Dieses Howto beschreibt das Vorgehen anhand eines typischen Debian-Servers mit Apache2.

Achtung: Ich übernehme keinerlei Verantwortung für eventuelle Fehler und/oder Ausfälle die durch dieses Howto entstehen.

Zunächst habe ich beim [Server Support Forum](http://serversupportforum.de/forum/faqs-anleitungen/2558-howto-ssl-proxy.html) ein vorhandenes Howto gelesen und einige Schritte daraus übernommen. Allerdings sind die Angaben dort für ein Confixx-System und auch recht veraltet.

Wenn das SSL-Modul für den Apache aktiviert ist, sollte unter „/etc/apache2/sites-enabled/“ bereits ein Symlink „000-default-ssl“ liegen. Wenn nicht legen wir einfach einen neuen vHost an:

# vim /etc/apache2/sites-available/000-default-ssl

und füllen ihn mit diesem Inhalt:


RewriteLock /var/lock/rewrite.lock

DocumentRoot „/var/www/dein-ssl-root/“
ServerName ssl.domain.de
ServerAdmin admin@domain.de
# SuexecUserGroup www-user www-user

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /etc/apache2/ssl.crt/server.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/server.key

SSLEngine on

# Rewrite-Engine einschalten fuer Umschreiben der URL
RewriteEngine on

# Logging ausschalten mit folgenden Zeilen:
#RewriteLog /dev/null
#RewriteLog 0
RewriteLog /var/log/apache2/sslproxy.log
RewriteLogLevel 1

RewriteMap lowercase int:tolower
# RewriteMap für die Domainnamen, welche SSL erhalten sollen
RewriteMap domaindb txt:/etc/apache2/ssldomains
RewriteRule ^/icons/(.+) – [L]
# Fuer MS Internet Explorer ab Version 6
RewriteRule ^/w3c/(.+) – [L]
# Kundendomain in Kleinbuchstaben umwandeln (fuer Datenbank-Lookup)
RewriteRule ^/([^/]+)/(.*) /${lowercase:$1}/$2 [S=1]
RewriteRule ^/(.*) /${lowercase:$1}
# Per Proxy Verbindung zu http://kundendomain/… aufbauen.
# Wahlweise auch http://www.kundendomain/…
# Falls Kundendomain ohne abschliessenden „/“ angegeben,
# „/“ anhaengen und Redirect erzwingen, d.h. Browser soll es
# mit „kundendomain/“ nochmal versuchen.
# Für den Fall, dass der „Pfad“ nicht in der domaindb gefunden wurde,
# ssl.domain/Pfad anzeigen.
RewriteRule ^/www\.([^/]+)/(.*) /${domaindb:$1|%{HTTP_HOST}/$1}/$2 [S=2]
RewriteRule ^/([^/]+)/(.*) /${domaindb:$1|%{HTTP_HOST}/$1}/$2 [S=1]
RewriteRule ^/(.+) /$1/ [R,L]
RewriteRule ^/(.*) http://$1 [P,L]


Danach legen wie eine Datei an, die die Zuweisung von URLs zu Domains übernimmt. Bei mir liegt diese unter „/etc/apache2/ssldomains“ und ist nach diesem Schema aufgebaut:

#Pfad -> Domain
domain.de www.domain.de
admin www.admin.domain.de
was-auch-immer www.nocheinedomain.de

Nach einem „:wq“ aktivieren wir noch die nötigen Module und den Virtualhost im Apachen (falls noch nicht geschehen):

# a2enmod proxy
# a2enmod proxy_http
# a2enmod rewrite
# a2ensite 000-default-ssl

Wichtig: Das Proxy-Modul verbietet standardmäßig jeden Zugriff, und das ist gut so. Für unsere SSL-Domain müssen wir den Zugriff allerdings erlauben.

# vim /etc/apache2/mods-enabled/proxy.conf

Aus dem hier


AddDefaultCharset off
Order deny,allow
Deny from all
#Allow from .example.com

wird das:


AddDefaultCharset off
Order deny,allow
#Deny from all
Allow from ssl.domain.de

Daß die Domains, Pfade und die IP-Adresse an die eigenen Bedürfnisse angepasst werden müssen sollte klar sein. Jetzt noch den Apache neu laden und der SSL-Proxy sollte laufen.

# /etc/init.d/apache2 force-reload

Aufruf mit „https://ssl.domain.de/domain.de“ usw.

Ich hoffe das Howto war hilfreich 🙂

—–

Übrigens: Wenn Sie einen xt:Commerce Shop mit einem SSL-Proxy betreiben möchten, dann müssen Sie die interne SSL-Erkennung umgehen, da der Browser ja nicht direkt mit der Webseite über SSL kommuniziert. Dazu in der „includes/application_top.php“ dies hier ändern (steht ziemlich am Anfang):

//workaround for ssl-proxy
$request_type = (isset($_SERVER[‚HTTP_X_FORWARDED_SERVER‘])) ? ‚SSL‘ : ‚NONSSL‘;
//$request_type = (getenv(‚HTTPS‘) == ‚1‘ || getenv(‚HTTPS‘) == ‚on‘) ? ‚SSL‘ : ‚NONSSL‘;

5 Kommentare

  1. Vielen Dank für dieses HowTo. Auf meinem Server gibt es allerdings ein Problem mit dem „Allow from ssl.domain.de“, weil hier die IP bzw. Domain des Besuchers geprüft wird (also z.B. die Domain des Internetanbieters) anstatt der Domain aus der URL. Wo kann man das umstellen?

  2. Danke für Dein Howto, hat prima geklappt. Alle Domains die ich in die ssldomains eintrage sind per SSL erreichbar. Allerdings ist die SSL-Domain selbst nicht zu erreichen, beim Aufruf von ssl.domain.de kommt „Bad Request
    Your browser sent a request that this server could not understand.“ gibt es dafür eine Lösung, Danke Gruß Stephan

  3. Danke für das Howto, habe das so umgesetzt, jedoch kommt beim ssl.host

    You don’t have permission to access / on this server.

    Im Serverlog steht

    client denied by server configuration: proxy:http://

  4. Wenn Du die Meldung „You don’t have permission to access / on this server.“ erhältst, dann ändere in der proxy.conf aus

    in die IP Adresse, auf der Dein SSL-Proxy läuft inkl. Port.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert