Mittwoch, 28. Januar 2015

https-Webserver unter Ubuntu 14.04 mit VirtualHosts

Problem:

Wie stellt man für einzelne VirtualHosts (in meinem Fall: Eine Moodle-Installation) die SSL-Verschlüsselung ein, ohne dass andere VirtualHosts unter der gleichen IP (in meinem Fall: Eine Joomla-Installation) betroffen sind?

Vorgehen:

  • Wie bei heise-online hervorragend beschrieben ein SSL-Zertifikat erstellen (kostenlos, recht einfach und problemlos bei StartSSL). Der Dateiname kann dabei die URL sein, muss aber nicht. Die 3 Dateien (Zertifikat, Schlüssel und Intermediate-Zertifikat)
  • Das SSL-Modul von Apache laden und die Konfiguration neu einlesen
sudo a2enmod ssl
sudo service apache2 force-reload 
  •  Wenn nicht schon vorhanden, neue VirtualHosts anlegen:
    • Die Datei /etc/apache2/sites-available/000-default.conf zweimal kopieren nach /etc/apache2/sites-available/www.domain1.de.conf und ...../www.domain2.de.conf
    • (Mindestens) folgende Angaben eintragen (in meinem Fall ist Domain1 die moodle-Installation und Domain2 die joomla-Installation)
    • Achtung: [ und ] bitte durch < und > ersetzen! Lässt sich im blöden Blogger-Editor nicht richtig formatieren!!!
[VirtualHost *:80´]
ServerName www.servername1.de
DocumentRoot /var/www/moodle/
[Directory /var/www/moodle]
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
[/Directory]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
[/VirtualHost]

[VirtualHost *:443]
ServerName www.servername1.de
DocumentRoot /var/www/moodle/
[Directory /var/www/moodle]
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
[/Directory]
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
SSLEngine on
SSLCertificateFile /etc/ssl/certs/moodle.crt
SSLCertificateKeyFile /etc/ssl/private/moodle.key
SSLCertificateChainFile /etc/ssl/certs/sub.class1.server.ca.pem
[/VirtualHost]
    • Das Entsprechende auch mit der zweiten Seite machen, allerdings nur mit dem ersten VirtualHost auf Port 80, wenn die zweite Seite nicht auch verschlüsselt werden soll.
    • Die neuen Seiten in Apache aktivieren:
sudo a2ensite www.domain1.de.conf
sudo a2ensite www.domain2.de.conf
sudo service apache2 force-reload 
  • Ab sofort sollte sich die Webseite auch über https://www.domain1.de aufrufen lassen. Will man das zum Standardverhalten machen (Weiterleitung von http auf https), findet sich hier eine ausreichende Anleitung dafür.
  • Anmerkung für Moodle: In Moodle kann man einstellen (Webseiten-Administration-http-Sicherheit), ob man SSL nur für den Login verwenden will oder für die gesamte Seite, wobei dann der Moodle-eigene Cache nicht funktioniert. Die Performance-Auswirkungen habe ich noch nicht getestet.