Eigener Sync-Server für Firefox: Difference between revisions

From
Jump to navigation Jump to search
No edit summary
 
(34 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= Theorie =
= Theorie =
== Überblick ==
https://wiki.mozilla.org/images/f/ff/Firefox_Accounts_and_Sync_Architecture.png

== Aufgabenbereiche der einzelnen Server ==
=== Sync-Server ===
Speichert (verschlüsselt) die zu synchronisierenden Daten der angemeldeten Nutzer ab. Die bereitgestellte Konfiguration nutzt eine SQLite DB unter (/tmp/syncserver.db). Spricht mit dem BrowserId-Verifier. Läuft lokal auf Port 5000

=== fxa-auth-server ===
Verwaltet die Accounts. Gibt die Bestätigungs-Mail-Links aus.
Muss um die E-Mail-Links zu generieren die Adresse vom Content-Server kennen.
Die Datenbank-Andbindung wird per Konfigurationseintrag gesetzt. Das standardmäßige DB-Backend ist [https://www.npmjs.org/package/http-db http-db]

=== fxa-content-server ===
Liefert das Web-Frontend für den auth-server: login/anmelden/verwaltung
Die Javascript und CSS Ressourcen werden mit [http://bower.io/ Bower] verwaltet.
Die Einloggen/Registrierungs-Vorgänge werden an den auth-server weitergereicht.

=== browserid-verifier ===
Generiert Challenges für die BrowserID Zertifikate und verifiziert Berechtigungen am Auth-Server.

== Further Reading ==

https://blog.mozilla.org/services/2014/02/07/a-better-firefox-sync/
https://blog.mozilla.org/services/2014/02/07/a-better-firefox-sync/


Line 6: Line 28:
https://developer.mozilla.org/en-US/Firefox_Accounts
https://developer.mozilla.org/en-US/Firefox_Accounts


https://wiki.mozilla.org/Identity/Firefox-Accounts
==Module/Komponenten==


= Lösung =
*'''Sync Server'''
== MVP: lokaler Syncserver angebunden an FXA-System ==
Anleitung zu finden unter:


https://docs.services.mozilla.com/howtos/run-sync-1.5.html
*'''Firefox Accounts Server (fxa)'''


Der Standalone Syncserver bringt von sich aus keine SSL-Unterstützung mit,
auth-server: manages accounts database
allerdings kann die syncserver.ini über einen Apachen und mod_wsgi eingebunden werden (sodass der Apache sich um Verschlüsselung kümmert)


content-server: web-based user interface


== Überblick ==
==Variante 1 - läuft==
== Manuelle Vorbereitung==
Zertifikate erstellen


Hosts Config
'''eigener Sync Server + Firefox Accounts Server von Mozilla'''


== Einrichtung über [https://github.com/ansible/ansible Ansible] ==
Sync Daten werden auf eigenen Server gespeichert.
=== 1. Vorbereitung vm ===
* Ubuntu vm
* Einrichtung Netzwerk
* Auf Host: ansible_hosts ip des Gastes in gruppe [vms] eintragen


=== 2. Befehle ===
Anmeldung/Authentifizierung erfolgt über den Mozilla Server
'''Test'''
ansible vms -m ping --ask-pass -i ./ansible_hosts


'''Check syntax'''
==Variante 2 - läuft (noch) nicht==
ansible-playbook --syntax-check --list-tasks -i ./ansible_hosts ./ansible.yml
'''eigener Sync Server + eigener Firefox Accounts Server'''


'''Run'''
benötigt SSL
ansible-playbook --ask-pass --ask-sudo-pass -i ./ansible_hosts ./ansible.yml


'''Files zu finden unter:'''
= Work in Progress =


==Plug-in==
1. Schritt: lokaler sync-server mit mozilla fx-Accounts


automatische Konfiguration des Clients zur Nutzung der eigenen sync und fxa server
Anleitung zu finden unter:
https://docs.services.mozilla.com/howtos/run-sync-1.5.html


Der Nutzer wird aufegordert die Adresse des Sync Servers anzugeben, das Plug-in setzt dann alle benötigten Einträge in about:config
2. Schritt: fxa-auth-server aufsetzen
https://github.com/mozilla/fxa-auth-server


services.sync.tokenServerURI
3. Schritt: fxa-content-server aufsetzen
https://github.com/mozilla/fxa-content-server


identity.fxaccounts.auth.uri
'''Beachten:'''


identity.fxaccounts.remote.force_auth.uri
Bower muss installiert werden (npm install -g bower)


identity.fxaccounts.remote.signin.uri
und dann im Verzeichnis ein "bower install"


identity.fxaccounts.remote.signup.uri
about:accounts gibt in der browser console folgenden Fehler aus:


identity.fxaccounts.settings.uri
"Firefox Account Error: Couldn't init Firefox Account wrapper: Firefox Accounts server must use HTTPS
" aboutaccounts.js:28


= Hindernisse =
4. Schritt: Firefox an eigenen fxa-server anbinden
== Email-Verifizierung ==
https://docs.services.mozilla.com/howtos/run-fxa.html
Nach der Registrierung (am lokalen FXA-System) muss die eingegebene E-Mail Adresse verifiziert werden. Wenn im Auth-Server kein SMTP-Server konfiguriert ist, wird der generierte Link nicht verschickt. Um die E-Mail trotzdem zu verifizieren genügt es sich den Link aus der Log-Ausgabe des auth-servers zu kopieren und ihn aufzurufen.
'''SSL-Config'''
Damit der Firefox mit den eigenen Servern spricht müssen diese über https erreichbar sein. Dies lässt sich wie folgt gewährleisten:


== Content Server braucht nach npm install noch bower run ==
Zertifikat erstellen (key.pem & cert.pem)


Bower muss installiert werden (npm install -g bower)
1. content-server


und dann im Verzeichnis ein "bower install"
Schlüssel und cert in Hauptordner


== Server nur über https ansprechbar ==
./server/config/local.json => "use_https": true,
about:accounts gibt in der browser console folgenden Fehler aus:
und: "fxaccount_url": <nowiki>"http://your.auth.server.here.org",</nowiki>


"Firefox Account Error: Couldn't init Firefox Account wrapper: Firefox Accounts server must use HTTPS
2. auth-server
" aboutaccounts.js:28


== Connection Reset ==
Schlüssel und cert in Hauptordner
Bei selbst-signierten Zertifikaten kann es vorkommen das beim Login über den Account-Server (about:accounts) eine leere Seite ausgeliefert wird.


Dies kann 3 Ursachen haben:
./config/config.js => use_https: true
* fehlende Ressourcen des Content Server (siehe bower install)

* falsche Konfiguration der Content Server Ressourcen (js/css Requests geben 404 zurück)
'''Probleme'''
* Nicht-Akzeptiertes Zertifikat das ausgeliefert wird. In diesem Fall wird '''keine Fehlermeldung''' ausgegeben. Dieser Fall lässt sich durch ein RESET-Paket auf http-Ebene erkennen (bsp durch Wireshark). Er kann behoben werden durch manuellen aufruf der Login-Seite (und Einrichtung einer Ausnahme im Dialog "Dieser Verbindung wird nicht vertraut").


== Cross Origin Ajax Calls ==
Firefox macht während des Logins AJAX Calls vom Content Server an den Auth Server.
Firefox macht während des Logins AJAX Calls vom Content Server an den Auth Server.
Bei ihnen ist das kein problem, da die uris:
Bei Mozilla ist das kein problem, da die uris für API/Content Server subdomains von firefox.com sind:


beide unter die gleiche Domain (firefox.com) fallen.
Wenn die Server allerdings lokal laufen, schlägt der Ajax-Request mit einem Cross-Domain Fehler
Wenn die Server allerdings lokal laufen, schlägt der Ajax-Request mit einem Cross-Domain Fehler
fehl (was ja eigentlich auch gut so ist). In unserem Fall ist das aber ein Problem.
fehl (was ja eigentlich auch gut so ist). In unserem Fall ist das aber ein Problem.
Line 85: Line 116:
[[File:Flow_localhost.PNG]]
[[File:Flow_localhost.PNG]]


Lösungsansatz: NGINX, Apache reverse proxy
'''Lösungsansätze:'''


== Anbindung an Browserid-verifier ==
nginx für eigene domain der https verwaltet.
502 bei lokal Verifier, trailing/slash, audiences
== Umstellung von Subdomains auf virtuelle Ordner ==
relative links im content-server


aufruf von /.well-known/...
= Debug Optionen =

Firefox: about:sync-log
= Weiterführende Informationen =
== Links ==
nginx rewrite: http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy

Virtualbox HostNetwork: http://www.thomas-krenn.com/de/wiki/Netzwerkkonfiguration_in_VirtualBox#Host-only_networking


config:
tokenServerURI: https://sync.accounts.devlocal/1.0/sync/1.5


= Notizenhaufen =
Evaluieren: bringt uns das was?
https://github.com/mozilla/fxa-dev
https://github.com/mozilla/fxa-dev


Line 109: Line 144:
http://www.ncalexander.net/blog/2014/07/05/how-to-connect-firefox-for-android-to-self-hosted-services/
http://www.ncalexander.net/blog/2014/07/05/how-to-connect-firefox-for-android-to-self-hosted-services/


http://meta.wikimedia.org/wiki/Help:Wikitext_examples
BrowserId Verifier?


== Debug Infos ==
Paketverkehr monitoring mit tshark


Firefox: about:sync-log
Virtualbox HostNetwork: http://www.thomas-krenn.com/de/wiki/Netzwerkkonfiguration_in_VirtualBox#Host-only_networking


== Config ==
=== Ports ===
Ports:


Sync: 5000
= Info Austausch =
X-Frame-Options:"DENY" - "The page cannot be displayed in a frame, regardless of the site attempting to do so."


API: 9000
X-XSS-Protection:"1; mode=block" - https://www.owasp.org/index.php/List_of_useful_HTTP_headers


content: 3030
x-content-type-options:"nosniff" - https://www.owasp.org/index.php/List_of_useful_HTTP_headers


verify: 7070
content-security-policy:"default-src 'self';img-src 'self' data: http://localhost:1112 https://secure.gravatar.com;connect-src 'self' https://localhost:9000 https://localhost:9010 https://localhost:1111;report-uri /_/csp-violation"


=== Firefox ===
= about:config =
syncserver:
'''syncserver:'''
services.sync.tokenServerURI
services.sync.tokenServerURI


https://sync.accounts.devlocal/token/1.0/sync/1.5
https://sync.accounts.devlocal/token/1.0/sync/1.5 --> https://accounts.devlocal/ffs/token/1.0/sync/1.5


auth-services:
'''auth-services:'''
identity.fxaccounts.auth.uri
identity.fxaccounts.auth.uri


https://api.accounts.devlocal/v1
https://api.accounts.devlocal/v1 --> https://accounts.devlocal/api/v1


identity.fxaccounts.remote.force_auth.uri
identity.fxaccounts.remote.force_auth.uri
Line 151: Line 188:


https://accounts.devlocal/settings
https://accounts.devlocal/settings


== Ubuntu einrichtung ==
1. Firefox Services Installieren (+ Abhängigkeiten)
- Syncserver
gunicorn
- fxa-account-server
- fxa-content-server

2. Services konfigurieren
- Syncserver
- fxa-account-server
- fxa-content-server

3. CA/Zertifikate generieren

4. Nginx Installieren
sudo apt-get install nginx
/etc/nginx/sites-available/default

5. Nginx Konfig

6. Hosts datei

Latest revision as of 15:17, 13 October 2014

Theorie

Überblick

https://wiki.mozilla.org/images/f/ff/Firefox_Accounts_and_Sync_Architecture.png

Aufgabenbereiche der einzelnen Server

Sync-Server

Speichert (verschlüsselt) die zu synchronisierenden Daten der angemeldeten Nutzer ab. Die bereitgestellte Konfiguration nutzt eine SQLite DB unter (/tmp/syncserver.db). Spricht mit dem BrowserId-Verifier. Läuft lokal auf Port 5000

fxa-auth-server

Verwaltet die Accounts. Gibt die Bestätigungs-Mail-Links aus. Muss um die E-Mail-Links zu generieren die Adresse vom Content-Server kennen. Die Datenbank-Andbindung wird per Konfigurationseintrag gesetzt. Das standardmäßige DB-Backend ist http-db

fxa-content-server

Liefert das Web-Frontend für den auth-server: login/anmelden/verwaltung Die Javascript und CSS Ressourcen werden mit Bower verwaltet. Die Einloggen/Registrierungs-Vorgänge werden an den auth-server weitergereicht.

browserid-verifier

Generiert Challenges für die BrowserID Zertifikate und verifiziert Berechtigungen am Auth-Server.

Further Reading

https://blog.mozilla.org/services/2014/02/07/a-better-firefox-sync/

https://github.com/mozilla/fxa-auth-server/wiki/onepw-protocol

https://developer.mozilla.org/en-US/Firefox_Accounts

https://wiki.mozilla.org/Identity/Firefox-Accounts

Lösung

MVP: lokaler Syncserver angebunden an FXA-System

Anleitung zu finden unter:

https://docs.services.mozilla.com/howtos/run-sync-1.5.html

Der Standalone Syncserver bringt von sich aus keine SSL-Unterstützung mit, allerdings kann die syncserver.ini über einen Apachen und mod_wsgi eingebunden werden (sodass der Apache sich um Verschlüsselung kümmert)


Überblick

Manuelle Vorbereitung

Zertifikate erstellen

Hosts Config

Einrichtung über Ansible

1. Vorbereitung vm

  • Ubuntu vm
  • Einrichtung Netzwerk
  • Auf Host: ansible_hosts ip des Gastes in gruppe [vms] eintragen

2. Befehle

Test ansible vms -m ping --ask-pass -i ./ansible_hosts

Check syntax ansible-playbook --syntax-check --list-tasks -i ./ansible_hosts ./ansible.yml

Run ansible-playbook --ask-pass --ask-sudo-pass -i ./ansible_hosts ./ansible.yml

Files zu finden unter:

Plug-in

automatische Konfiguration des Clients zur Nutzung der eigenen sync und fxa server

Der Nutzer wird aufegordert die Adresse des Sync Servers anzugeben, das Plug-in setzt dann alle benötigten Einträge in about:config

services.sync.tokenServerURI

identity.fxaccounts.auth.uri

identity.fxaccounts.remote.force_auth.uri

identity.fxaccounts.remote.signin.uri

identity.fxaccounts.remote.signup.uri

identity.fxaccounts.settings.uri

Hindernisse

Email-Verifizierung

Nach der Registrierung (am lokalen FXA-System) muss die eingegebene E-Mail Adresse verifiziert werden. Wenn im Auth-Server kein SMTP-Server konfiguriert ist, wird der generierte Link nicht verschickt. Um die E-Mail trotzdem zu verifizieren genügt es sich den Link aus der Log-Ausgabe des auth-servers zu kopieren und ihn aufzurufen.

Content Server braucht nach npm install noch bower run

Bower muss installiert werden (npm install -g bower)

und dann im Verzeichnis ein "bower install"

Server nur über https ansprechbar

about:accounts gibt in der browser console folgenden Fehler aus:

"Firefox Account Error: Couldn't init Firefox Account wrapper: Firefox Accounts server must use HTTPS " aboutaccounts.js:28

Connection Reset

Bei selbst-signierten Zertifikaten kann es vorkommen das beim Login über den Account-Server (about:accounts) eine leere Seite ausgeliefert wird.

Dies kann 3 Ursachen haben:

  • fehlende Ressourcen des Content Server (siehe bower install)
  • falsche Konfiguration der Content Server Ressourcen (js/css Requests geben 404 zurück)
  • Nicht-Akzeptiertes Zertifikat das ausgeliefert wird. In diesem Fall wird keine Fehlermeldung ausgegeben. Dieser Fall lässt sich durch ein RESET-Paket auf http-Ebene erkennen (bsp durch Wireshark). Er kann behoben werden durch manuellen aufruf der Login-Seite (und Einrichtung einer Ausnahme im Dialog "Dieser Verbindung wird nicht vertraut").

Cross Origin Ajax Calls

Firefox macht während des Logins AJAX Calls vom Content Server an den Auth Server. Bei Mozilla ist das kein problem, da die uris für API/Content Server subdomains von firefox.com sind:

Wenn die Server allerdings lokal laufen, schlägt der Ajax-Request mit einem Cross-Domain Fehler fehl (was ja eigentlich auch gut so ist). In unserem Fall ist das aber ein Problem.

Flow firefox.PNG Flow localhost.PNG

Lösungsansatz: NGINX, Apache reverse proxy

Anbindung an Browserid-verifier

502 bei lokal Verifier, trailing/slash, audiences

Umstellung von Subdomains auf virtuelle Ordner

relative links im content-server

aufruf von /.well-known/...

Weiterführende Informationen

Links

nginx rewrite: http://wiki.apache.org/couchdb/Nginx_As_a_Reverse_Proxy

Virtualbox HostNetwork: http://www.thomas-krenn.com/de/wiki/Netzwerkkonfiguration_in_VirtualBox#Host-only_networking


https://github.com/mozilla/fxa-dev

https://blog.mozilla.org/services/2014/05/08/firefox-accounts-sync-1-5-and-self-hosting/

http://comments.gmane.org/gmane.comp.mozilla.sync.devel/924

https://github.com/callahad/selfhosted-sync

https://github.com/mozilla-services/syncserver

http://www.ncalexander.net/blog/2014/07/05/how-to-connect-firefox-for-android-to-self-hosted-services/

http://meta.wikimedia.org/wiki/Help:Wikitext_examples

Debug Infos

Firefox: about:sync-log

Config

Ports

Ports:

Sync: 5000

API: 9000

content: 3030

verify: 7070

Firefox

syncserver: services.sync.tokenServerURI

https://sync.accounts.devlocal/token/1.0/sync/1.5 --> https://accounts.devlocal/ffs/token/1.0/sync/1.5

auth-services: identity.fxaccounts.auth.uri

https://api.accounts.devlocal/v1 --> https://accounts.devlocal/api/v1

identity.fxaccounts.remote.force_auth.uri

https://accounts.devlocal/force_auth?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signin.uri

https://accounts.devlocal/signin?service=sync&context=fx_desktop_v1

identity.fxaccounts.remote.signup.uri

https://accounts.devlocal/signup?service=sync&context=fx_desktop_v1

identity.fxaccounts.settings.uri

https://accounts.devlocal/settings