Lighttpd, client certificates und owncloud 5.0 auf dem PI

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche



Installieren und konfigurieren des Webservers

apt-get install lighttpd php5-fpm
lighty-enable-mod accesslog
lighty-enable-mod ssl
lighty-enable-mod cgi
lighty-enable-mod fastcgi
lighty-enable-mod status

Wir erstellen uns ein Certifikat das unseren Server ausweist und signieren es selbst:

mkdir cacert
cd cacert
openssl req -new > server.cert.csr
openssl rsa -in privkey.pem -out server.cert.key
openssl x509 -in server.cert.csr -out server.cert.crt -req -signkey server.cert.key -days 365

Jetzt müssen wir die beiden Dateien server.cert.key und server.cert.crt zu einer .pem-Datei zusammen fassen:

cat server.cert.key server.cert.crt > server.pem

Installieren in lighttpd:

mkdir /etc/lighttpd/ssl
cp server.pem /etc/lighttpd/ssl
cp server.cert.crt /etc/lighttpd/ssl

und lassen die .pem-Datei aus Sicherheitsgründen nur von root lesen:

chown root:root /etc/lighttpd/ssl/server.pem
chmod 400 /etc/lighttpd/ssl/server.pem

Jetzt müssen wir lighttpd noch mitteilen wo die Dateien zu finden sind:

nano /etc/lighttpd/conf-available/10-ssl.conf

Fügen folgendes dort ein:

# /usr/share/doc/lighttpd/ssl.txt
	ssl.engine  = "enable"
	ssl.pemfile = "/etc/lighttpd/ssl/server.pem"
	ssl.ca-file = "/etc/lighttpd/ssl/server.cert.crt"
	ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
	ssl.honor-cipher-order = "enable"

Speichern und verlassen.

Wir verlegen noch den Port vom Standardport 80 in die höheren Bereiche:

nano /etc/lighttpd/lighttpd.conf

Dort suchen wir die Zeile server.port = 80 und ändern die 80 in den Port den wir benutzen wollen.

Jetzt ein

/etc/init.d/lighttpd force-reload

oder

/etc/init.d/lighttpd restart

damit lighty auch mit der neuen Konfiguration arbeitet.

Wir überprüfen das indem wir mit unserem Browser per https://MeinServer:PORT dorthin verbinden. Sicherheitsausnahmeregel der Zertifikatsmeldung bestätigen, dann sollte sich die Begrüßungs/Testseite von lighttpd zeigen.

Hat das geklappt erstellen wir das Client-Zertifikat und lassen es vom Server signieren: Dazu erstmal folgende Ordner und Dateien anlegen:

mkdir -p demoCA
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo 1001 > demoCA/serial

jetzt:

openssl genrsa -des3 -out client.key
openssl req -new -key client.key -out client.req
openssl ca -cert /etc/lighttpd/ssl/server.cert.crt -keyfile server.cert.key -out client.crt -in client.req

Jetzt erstellen wir uns eine Datei die wir in die Browser der Clients importieren können:

openssl pkcs12 -export -inkey client.key -name "client" -in client.crt -certfile /etc/lighttpd/ssl/server.cert.crt -out client.p12

Den "client" durch einen beliebigen Namen ersetzen und das Passwort das beim Erstellen der .p12-Datei erstellt wird mit der Datei mitliefern, es wird beim Importieren gebraucht. Das Zertifikat in den Browser importieren.

Jetzt wieder Lighty sagen wo er dran ist. /etc/lighttpd/conf-available/10-ssl.conf öffnen und folgende Zeilen hinzufügen:

ssl.verifyclient.activate   = "enable"
ssl.verifyclient.enforce    = "enable"
ssl.verifyclient.exportcert = "enable"

Speichern und verlassen.

/etc/init.d/lighttpd force-reload

Verbinden mit https://MeinServer:PORT. Es sollte eine Bestätigung abgefragt werden welches Zertifikat zur Anmeldung benutzt werden soll.

Das wars vorerst mit dem Server.

Installieren von Owncloud 5.0

Sicherstellen das folgende Pakete installiert sind:

php5 php5-gd php-xml-parser php5-intl curl libcurl3 php5-curl php5-cgi

und, je nachdem welche Datenbank benutzt werden soll, eins der folgenden:

php5-sqlite php5-mysql php5-pgsql

Jetzt in das Verzeichnis des Webservers wechseln:

cd /var/www

und dann die Datei aktuelle Version von owncloud.org herunterladen:

wget http://download.owncloud.org/community/owncloud-5.0.3.tar.bz2

danach entpacken:

tar -xf owncloud-5.0.3.tar.bz2

Setzen der Rechte:

chown -R www-data:www-data /var/www/owncloud

Wenn wir jetzt https://MyServer:PORT/owncloud aufrufen und ein "403: Forbidden" zurück bekommen sind noch diese Schritte nötig:

  • Öffnen der /etc/php5/cli/php.ini
  • Suchen der Zeile #cgi.fix_pathinfo = 1 und Kommentarzeichen (#) entfernen
  • Öffnen der /etc/lighttpd/lighttpd.conf
  • Folgendes einfügen
fastcgi.server = ( ".php" => ((
                    "bin-path" => "/usr/bin/php-cgi",
                    "socket" => "/tmp/php.socket"
                ))) 

Da wir gerade bei der php.ini waren: Unser maximaler Upload ist noch auf 2M beschränkt. Wem dies zu wenig ist -dürften wohl nahezu alle sein-, der öffnet jetzt nacheinander noch die php.ini Dateien in /etc/php5/cli ..../cgi und ..../fpm und sucht dort die Einträge upload_max_filesize und post_max_size und passt diese seinen Bedürfnissen an.

Speichern, verlassen und

/etc/init.d/lighttpd restart

Nochmal auf https://MeinServer:PORT/owncloud verbinden. Jetzt sollte die Seite zum Anlegen des Admin-Kontos angezeigt werden.


Nach dem Anlegen des Admin-Kontos kommt eine Fehlermeldung zu WebDAV, nach Lektüre einiger Bugreports habe ich diese ignoriert und erneut verbunden. Funktionierte problemlos.

Falls folgende Fehlermeldung erscheint:

Error	core	setting locale to en_US.UTF-8/en_US.UTF8 failed. Support is probably not installed on your system

dann muss diese locale noch eingerichtet werden

dpkg-reconfigure locales

anschließend

/etc/init.d/lighttpd restart

Bugs in OC 5:

Fehler:

Beim Anwählen von "Musik" werden hochgeladene MP3 Dateien, die in "Files" vorhanden sind, nicht angezeigt. Auch ein "Sammlung erneut scannen" funktioniert nicht.

Lösung: Aus OC/apps Bugreport 734

nano /var/www/owncloud/3rdparty/getid3/getid3.php

Zeile mit

public $option_max_2gb_check    = null;

suchen (ca Zeile 100) und den Wert "null" durch "false" ersetzen. Jetzt funktioniert "erneut scannen".

Fehler:

mp3's werden nicht abgespielt obwohl das ">" zu "||" wechselt.

Lösung: Aus OC/apps Bugreport 816

nano /var/www/owncloud/apps/media/ajax/api.php

ca Zeile 12: "\OCP\JSON::callCheck();" entfernen und ca Zeile 45 einfügen:

if ($arguments['action']) {
  switch ($arguments['action']) {
    case 'delete':
     \OCP\JSON::callCheck();
      $path = $arguments['path'];
      $collection->deleteSongByPath($path);

Beim Erstellen des Wikis und der Installation hilfreiche Seiten:

http://siduction.org/index.php?name=PNphpBB2&file=viewtopic&p=28382#28382

http://doc.owncloud.org/server/5.0/admin_manual/installation/installation_source.html

http://redmine.lighttpd.net/projects/lighttpd/wiki/TutorialLighttpdAndPHP#Configuration

http://www.gambaru.de/blog/2012/05/01/lighttpd-webserver-konfiguration-mit-ssl-und-authentifizierung/

http://www.dahlen.org/2013/02/die-eigene-cloud-1/

http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL

http://redmine.lighttpd.net/boards/2/topics/3684

http://serverfault.com/questions/393179/how-do-i-set-up-lighttpd-for-x-509-client-certificate-authentication