Zertifikat erstellen mit openssl #
Ein Zertifikat zu erstellen gilt in vielen Anleitungen als schwierig, lässt sich aber auch mit einem Einzeiler erledigen:
cd /usr/local/etc/ssl
openssl genrsa -rand -genkey -out cert.key 4096
openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
cat cert.key cert.crt > cert.pem
# or use a csr file (optional)
openssl req -new -sha256 -key cert.key -out cert.csr
- -nodes
- verhindert, dass die .key-datei, also der private schlüssel selber mit einem Passwort verschlüsselt wird (denn dann müsste man das bei jedem Start des Webservers eintippen)
- -x509
- zeichnet das Zertifikat explizit als selbstsigniert aus (kann dann ggf. nicht als Systemzertifikat verwendet werden, siehe nächster Abschnitt)
Der Server sollte noch so konfiguriert werden, dass er nicht alle Verschlüsselungen akzeptiert, denn einige sind veraltet und gelten als unsicher. Am Beispiel von lighttpd:
# /usr/local/etc/lighttpd/lighttpd.conf
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/usr/local/etc/ssl/cert.pem"
ssl.cipher-list = "HIGH !aNULL !3DES !kEDH !kRSA !kSRP !kPSK"
}
Testen kann man die Konfiguration auf dieser Seite
Zertifikat auf android installieren #
Man kann das Zertifikat als systemzertifikat installieren. Dazu muss es
lediglich in den Ordner /system/etc/security/cacerts/
kopiert werden.
Der Ordner ist aber per default readonly und muss vor dem Kopieren des
Zertifikats beschreibbar gemountet werden. Dazu braucht man den
Gerätebezeichner:
# adb shell
# mount | grep System
/dev/block/mmcblk0p3 /system ext4 ro,noatime,errors=panic,user_xattr,acl,barrier=1,data=ordered 0 0
# mount -o remount,rw /dev/block/mmcblk0p3
Im Ordner haben die Dateien ein einheitliches Benennungsschema:
Dateinamen bestehen aus einem 8 byte langen hash-wert, den man mit
openssl herausfinden kann und einer .0
, die anscheinend nur aus
Konformitätsgründen angehängt wird.
# openssl x509 -in public.pem -noout -subject_hash_old
fde84897.0
# adb push root.crt /system/etc/security/cacerts/fde84897.0
Danach muss wahrscheinlich das Android neu gestartet werden.
nginx einrichten #
# /etc/nginx/nginx.conf
# /usr/local/etc/nginx/nginx.conf
worker_processes 1;
events
{
worker_connections 1024;
}
http
{
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name entwicklerseite.de;
return 301 https://$server_name$request_uri; # enforce https
}
server {
listen 443 ssl;
server_name entwicklerseite.de;
ssl_certificate /usr/local/etc/ssl/root/server.crt;
ssl_certificate_key /usr/local/etc/ssl/root/server.key;
# Path to the root of your installation
# root /var/www/;
root /usr/local/www/;
client_max_body_size 10G; # set max upload size
fastcgi_buffers 64 4K;
rewrite ^/owncloud/caldav(.*)$ /owncloud/remote.php/caldav$1 redirect;
rewrite ^/owncloud/carddav(.*)$ /owncloud/remote.php/carddav$1 redirect;
rewrite ^/owncloud/webdav(.*)$ /owncloud/remote.php/webdav$1 redirect;
index index.php index.html;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
server_tokens off;
location = ^/owncloud/robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/owncloud/(data|config|.ht|db_structure.xml|README) {
deny all;
}
location ^/owncloud/ {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /owncloud/public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /owncloud/public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /owncloud/remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /owncloud/remote.php/caldav/ redirect;
rewrite ^(/owncloud/core/doc/[^/]+/)$ owncloud/$1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass 127.0.0.1:9000;
# Or use unix-socket with 'fastcgi_pass unix:/var/run/php5-fpm.sock;'
}
# Optional: set long EXPIRES header on static assets
location ~* ^.+.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
# Optional: Don't log access to assets
access_log off;
}
}
}
DAVdroid auf dem Handy einrichten #
Die Addresse für die Einrichtung kann man in der owncloud-kontakt-app
nachschauen. Auf das Zahnrad klicken und dann auf die Weltkugel: