Apache, selbst signierte Client Certificates und owncloud

Aus Siduction Wiki DE
Wechseln zu: Navigation, Suche


Owncloud installieren

Ich habe meine Cloud auf einem Pi installiert, dies ist ein Debian 6.0, für den Pi bearbeitet. Die Owncloudversion ist 4.0.4.debian2-3.3. Ebenso kann man statt dem von mir verwendeten sqlite auch das Paket owncloud-mysql einsetzen.

Auf dem Pi

Und los gehts:

apt-get install owncloud owncloud-sqlite

Browser öffnen und localhost/owncloud in die Adresszeile eingeben.

Auf dem Pi war's das dann schon was owncloud selbst betrifft. Admin Namen und Passwort vergeben -> erstellen, dann unten links das Zahnrad benutzen, Benutzerkonten erstellen usw... Ist selbsterklärend. Weiter gehts bei ssl einrichten, denn sicher solls ja auch sein.

Allerdings: Die allgemeine Meinung ist daß der Apache -der von apt als Abhängigkeit mit installiert wird- für den Pi etwas überdimensioniert ist, wer's schlanker möchte schaut mal hier

Mit siduction

Bei der derzeit vorhandenen Version in Sid 4.0.8debian-1.5 scheint es gleich mehrere Probleme zu geben. Das erste ist eine anscheinend falsche Abhängigkeit. Owncloud zieht apache2-mpm-worker mit ins System, zum Funktionieren von PHP ist aber libapache2-mod-php5 erforderlich die diesen wieder entfernt und stattdessen apache2-mpm-prefork nachzieht.

Hat man jetzt schon vor der Installation von libapache2-mod-php5 versucht die Cloud zu starten hat man nur den Text der .php Datei im Browser angezeigt bekommen. Bei meinem Versuch blieb dieser Text auch nach der Installation des Moduls erhalten. Um die Startseite von owncloud über localhost/owncloud angezeigt zu bekommen musste ich zuerst den Browser-cache leeren. Beim Iceweasel geht das über "Bearbeiten->Einstellungen->Erweitert->Netzwerk->jetzt leeren".

Dann lässt sich die Seite "Admin einrichten" anzeigen. Bei meiner Installation war's das dann aber auch schon, ein admin-Konto lies sich nicht erstellen. Deshalb richten wir uns hier erst mal den Server ein und installieren dann die Cloud aus dem Tarball.

apt-get install apache2 apache2-mpm-prefork apache2-utils apache2.2-common libapache2-mod-php5 php5 php5-gd php-xml-parser php5-intl curl libcurl3 php5-curl

Je nachdem welche Datenbank gewünscht wird ist noch eins der Pakete

php5-sqlite 

oder

php5-mysql

erforderlich.

Wir machen das Modul "rewrite" verfügbar:

a2enmod rewrite

Ebenso ist htacces nötig. Dazu öffnen wir /etc/apache2/sites-enabled/000-default mit dem Editor unserer Wahl, suchen die Einträge AllowOverride für das Directory /var/www und setzen diese auf All

service apache2 restart

und der Indianer ist -soweit- fertig für die Wolke.

Diese holen wir uns von owncloud.org: http://download.owncloud.org/community/owncloud-5.0.0.tar.bz2 , entpacken sie mit ark und kopieren den so entstandenen Ordner nach

cp -r owncloud /var/www/

Rechte anpassen:

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

Wir testen indem wir in unserem browser localhost/owncloud aufrufen. Es kommt die Seite zum Einrichten des Adminkontos. Dies richten wir auch gleich ein und könnten die Wolke bereits benutzen -aber wir wollens ja sicher.

Bugs in OC5, die mir über den Weg gelaufen sind und deren Lösung könnt ihr am Ende diesen Beitrags finden.

ssl einrichten

1:1 übernommen aus [diesem thread]

mkdir /etc/apache2/myssl
cd /etc/apache2/myssl
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
a2enmod ssl
/etc/init.d/apache2 force-reload
nano /etc/apache2/sites-available/default

und:

<VirtualHost>
ServerName ******
SSLEngine on
SSLCertificateKeyFile /etc/apache2/myssl/server.cert.key
SSLCertificateFile /etc/apache2/myssl/server.cert.crt
</VirtualHost>

einfügen.


******* = deinServer


Nun sollte, nach einem weiteren

/etc/init.d/apache2 force-reload

die Cloud über https://yourservername/owncloud erreichbar sein.

Dazu muß aber noch das Zertifikat aktzeptiert werden:

Certificate1.jpg
Certificate2.jpg

Also: "ich kennne das Risiko->Ausnahmeregel hinzufügen->Sicherheitsausnahmeregel bestätigen"

Port ändern

Dieser Schritt ist nicht unbedingt notwendig aber aus verschiedenen Gründen sinnvoll. (Mehrere Server laufen, zuviele Zugriffsversuche auf Port 80)


Dazu werden im bevorzugten Editor in der Datei /etc/apche2/ports.conf in den Zeilen

NameVirtualHost *:80
Listen 80

die "80" mit der Nummer des gewählten Port ersetzt.
Das Gleiche passiert in der Datei /etc/apche2/sites-enabled/000-default. Dort wird in der Zeile

<VirtualHost *:80>

der korrekte Port eingetragen.

service apache2 restart

Testen indem wir die Seite -jetzt mit Angabe des neuen Ports- aufrufen. https://yourservername:PORT/owncloud


Client Zertifikate vergeben

Anweisungsliste nahezu unverändert von [dieser Seite] übernommen.


mkdir -p demoCA
mkdir -p demoCA/newcerts
touch demoCA/index.txt
echo 1001 > demoCA/serial
openssl genrsa -des3 -out michael.key
openssl req -new -key michael.key -out michael.req

Hier werden ein paar Informationen abgefragt die in die Anfrage nach dem Zertifikat eingeschlossen werden. Macht einfach die gleichen Angaben wie beim Erstellen des Server-Zertifikats, dann passts.

openssl ca -cert /etc/apache2/myssl/server.cert.crt -keyfile /etc/apache2/myssl/server.cert.key -out michael.crt -in michael.req

So endet das Ganze im Erfolgsfall:

...
Certificate is to be certified until Mar 17 11:32:01 2014 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Eine Datei erstellen die zum Import in die Browser der Clients geeignet ist:

openssl pkcs12 -export -inkey michael.key -name "michael" -in michael.crt -certfile /etc/apache2/myssl/server.cert.crt -out michael.p12

Die .p12 Datei die hier generiert wurde importieren wir dann in den Browser derer die Zugriff haben sollen, das Export Password nicht vergessen ebenfalls mit zu liefern, es ist zum entpacken erforderlich.
Beim Weasel/Firefox geht das über "Bearbeiten->Einstellungen->Erweitert->Verschlüsselung->Zertifikate anzeigen->Ihre Zertifikate->Importieren"

Das war es fast, jetzt noch dem Server mitteilen daß er in Zukunft nur noch Klienten zulässt die ein gültiges Zertifikat besitzen. Dazu in /etc/apche2/sites-enabled/000-default noch diese vier Zeilen eintragen:

<VirtualHost *:443>
   ...
   SSLCACertificateFile /etc/apache2/myssl/server.cert.crt
   SSLVerifyClient require
   SSLVerifyDepth 1
   SSLOptions +StdEnvVars
</VirtualHost>

Und danach ein

/etc/init.d/apache2 force-reload 

oder

 /etc/init.d/apache2 restart

Beim nächsten Loginversuch eines Clients bekommt dieser folgendes zu sehen:

Certificate.jpg


Der Auswahl des Zertifikats zustimmen und freuen.