Hinweis: Dieser Beitrag ist mittlerweile veraltet. Jetzt benutze ich letsencrypt.
haraldwingerter.de/?p=601
letsencrypt.org

Seinen OwnCloud-Server kann man gut mit einem selbst signierten SSL-Zertifikat versehen und erhält alle Vorteile dieser sicheren Verbindungsart. Bei Aufruf der Seite wird der Browser einen zwar vor einer möglichen unsicheren Webseite warnen, aber da die Seite nicht für die Öffentlichkeit bestimmt ist, spielt die Warnung für uns keine Rolle. Nur mit einem kostenpflichtigen SSL-Zertifikat wird man die Warnung vermeiden können.

Als erstes verwandele ich mich in einen root, um auch an gesperrte Verzeichnisse heranzukommen:

sudo -i

Der Schlüssel soll als /etc/ssl/private/myserver.key erzeugt werden.

openssl genrsa -out /etc/ssl/private/myserver.key 4096

Die Zahl 4096 gibt die Bit-Größe der Verschlüsselung an.
Das ssl-Zertifikat wird mit folgendem Befehl erzeugt. 365 gibt die Gültigkeitsdauer des Zertifikats in Tagen an, sha256 bestimmt den Signaturalgorithmus.

openssl req -new -x509 -key /etc/ssl/private/myserver.key -days 365 -sha256 -out /etc/ssl/certs/myserver.crt

Danach erscheinen einige Abfragen, die alle mit Return bestätigt werden können – bis auf eine! Bei Common Name muss man seinen Domainnamen oder die IP-Adresse eingeben.

Als nächsten Schritt werden die Konfigurationsdateien bearbeitet.

vim /etc/apache2/sites-enabled/000-default.conf

Folgende Zeilen werden am Ende der Datei hinzugefügt:

<VirtualHost *:443>
DocumentRoot /var/www/html
ServerName <mydomain.de> (ODER IP-Adresse)
  <IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
  </IfModule>
SSLEngine on 
SSLCertificateFile /etc/ssl/certs/myserver.crt 
SSLCertificateKeyFile /etc/ssl/private/myserver.key 
</VirtualHost>

Speichern und Beenden.

vim /etc/apache2/sites-available/default-ssl.conf

Folgende Einträge hinzufügen:
(Diese ersten vier Zeilen waren bei mir bereits eingetragen, sodass ich nach DocumentRoot nur noch das darauf Folgendes ergänzte.

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateKeyFile /etc/ssl/private/myserver.key
SSLCertificateFile /etc/ssl/certs/myserver.crt

Ports öffnen:

vim /etc/apache2/ports.conf

Dort muss stehen:

<IfModule mod_ssl.c>
Listen 443
</IfModule>

Es kann sein, dass die Zeilen bereits in der Datei stehen, dann ist das ok.

Abschluss:

a2enmod ssl
apache2ctl configtest

Wenn “Syntax OK” angezeigt wird, darf man sich freuen.
Und zum Abschluss Apache neu starten:

apache2ctl restart
service apache2 restart

Hat man das SSL-Certificate so weit erstellt, kann man immer noch über eine unsichere Verbindung auf OC zugreifen; ein https wird vor der Adresse nicht zwingend erstellt. Um ein https zu erzwingen, ist es nötig, die .htaccess-Datei im OwnCloud-Ordner um zwei Zeilen zu ergänzen. Unterhalb der Zeile RewriteEngine on notiert man:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Nach dem Speichern der .htaccess-Datei erneut Apache starten,

service apache2 restart

und anschließend wird der Aufruf von http auf https umgeleitet.

Als letzter Schritt wird der Zufgriff noch abgesichert mit folgendem Script (gilt nur für Ubuntu):

#!/bin/bash
ocpath='/var/www/html/owncloud'
htuser='www-data'
htgroup='www-data'

find ${ocpath}/ -type f -print0 | xargs -0 chmod 0640
find ${ocpath}/ -type d -print0 | xargs -0 chmod 0750

chown -R root:${htuser} ${ocpath}/
chown -R ${htuser}:${htgroup} ${ocpath}/apps/
chown -R ${htuser}:${htgroup} ${ocpath}/config/
chown -R ${htuser}:${htgroup} ${ocpath}/data/
chown -R ${htuser}:${htgroup} ${ocpath}/themes/

chown root:${htuser} ${ocpath}/.htaccess
chown root:${htuser} ${ocpath}/data/.htaccess

chmod 0644 ${ocpath}/.htaccess
chmod 0644 ${ocpath}/data/.htaccess