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 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:

<IfModule mod_rewrite.c>
<IfModule mod_ssl.c>

RewriteLock     /var/lock/rewrite.lock

<VirtualHost 111.222.333.444:443>

  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]
</VirtualHost>

</IfModule>
</IfModule>

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

    <Proxy *>
            AddDefaultCharset off
            Order deny,allow
            Deny from all
            #Allow from .example.com
    </Proxy>

wird das:

    <Proxy *>
            AddDefaultCharset off
            Order deny,allow
            #Deny from all
            Allow from ssl.domain.de
    </Proxy>

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';
Getagged mit: , , , ,
5 Kommentare zu “SSL-Proxy unter Debian (Etch) einrichten
  1. Mr. Bean sagt:

    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. Stephan sagt:

    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. Anonymous sagt:

    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. Carsten sagt:

    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.

  5. Carsten sagt:

    Ändere den Teil (proxy *) in (proxy 111.222.333.444:443) mit Deiner IP. Und natürlich eckigen Klammern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.