nginx webserver einrichten, owncloud und DAVdroid

nginx webserver einrichten, owncloud und DAVdroid

de > configuration > server > webserver > nginx

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

freebsd-doku\

-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: cloud screen01 screen02 davdroid

top