[Из песочницы] Настройка своего сервера синхронизации Firefox Sync

imageFirefox Sync, это служба, которая позволяет пользователям переносить полностью свою историю, пароли, закладки, открытые вкладки и даже дополнения между различными устройствами, на которых установлен браузер Firefox, как для десктопной версии, так и для Android.

Firefox Sync реализуется двумя сущностями — сервисом авторизации (Firefox account API) и сервером синхронизации (Firefox Sync).

Давно возникла идея настроить свой сервер для синхронизации паролей, закладок и прочих радостей жизни. По роду деятельности, не очень доверяю публичным сервисам, таким, как LastPass или Google Account. На мой взгляд, приватные данные должны храниться на своем сервере.

Ну да хватит лирики, приступим к настройке.

UPDATE: Этот способ работает для firefox старше версии 29 и описывает конфигурирование сервера синхронизации версии 1.5.

Настройка предлагается для сервера под управлением ОС Debian.Есть возможность реализации нескольких схем синхронизации:1. Firefox account API + Firefox Sync Server2. Firefox account API + свой Sync Server3. Свой account API + свой Sync Server

Я остановился на втором варианте.

Предполагается, что на сервере уже стоит веб-сервер apache2 и сервер баз данных mysql. Последнее, впрочем, необязательно, поскольку я не нашел способа вменяемо подружить сервер синхронизации с БД mysql, и использовал sqlite. При использовании mysql коннектор периодически отваливался от базы данных.

Пусть наш сервер синхронизации будет доступен по адресу sync.domain.com.

Установим необходимые пакеты:

$ sudo apt-get install python-dev git-core python-virtualenv libapache2-mod-wsgi Установку сервера синхронизации будем вести в директорию /var/www/ $ cd /var/www/ $ git clone https://github.com/mozilla-services/syncserver $ cd syncserver $ make build Произведем базовое конфигурирование сервера: $ cat syncserver.ini [server: main] use = egg: Paste#http host = 0.0.0.0 port = 5000

[app: main] use = egg: syncserver

[syncserver] public_url = https://sync.domain.com/

sqluri = sqlite:////var/www/db.sql secret = your_server_key your_server_key может быть любой фразой, я ее сгенерировал так:

head /dev/urandom |md5sum Создадим файл для базы данных: $ touch /var/www/db.sql Поправим права на директорию: $ chown -R www-data: www-data /var/www/ $ chmod 777 /var/www/db.sql ОБРАТИТЕ ВНИМАНИЕ! В своей конфигурации я расположил файл db.sql в директории /var/www/, поскольку сервер используется только для синхронизации, и apache не смотрит на этот файл.

В случае, если в /var/www у вас смотрят другие виртхосты, поместите файл с БД куда-нибудь в другое место.

Обращаться к sync-серверу будем по HTTPS.Для этого настроим apache.

$ cat /etc/apache2/sites-available/sync.domain.com.conf ServerName sync.domain.com Redirect permanent / https://sync.domain.com/ ErrorLog /var/log/apache2/sync/error.log CustomLog /var/log/apache2/sync/access.log combined Servername sync.domain.com ServerAdmin webmaster@domain.com DocumentRoot /var/www/syncserver WSGIProcessGroup sync.domain.com WSGIDaemonProcess sync.domain.com user=www-data group=www-data processes=2 threads=25 python-path=/var/www/syncserver/local/lib/python2.7/site-packages WSGIPassAuthorization On WSGIScriptAlias / /var/www/syncserver/syncserver.wsgi

ErrorLog /var/log/apache2/sync/error-ssl.log CustomLog /var/log/apache2/sync/access-ssl.log combined

SSLEngine on SSLProtocol -ALL +SSLv3 +TLSv1 SSLHonorCipherOrder On SSLCipherSuite ECDHE-RSA-AES128-SHA256: AES128-GCM-SHA256: RC4: HIGH:! MD5:! aNULL:! EDH SSLCertificateFile /etc/apache2/ssl/sync.domain.com.crt SSLCertificateKeyFile /etc/apache2/ssl/sync.domain.com.key Order deny, allow Allow from all Сгенерируем самоподписанные ключи: $ cd /etc/apache2/ssl/ $ openssl genrsa -des3 -out server.key 1024 $ openssl req -new -key server.key -out server.csr $ cp server.key sync.domain.com.key $ openssl rsa -in sync.domain.com.key -out server.key $ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt $ cp server.crt sync.domain.com.crt $ cp server.key sync.domain.com.key Создадим директорию для логов: $ mkdir /var/log/apache2/sync/ $ touch /var/log/apache2/sync/error-ssl.log $ touch /var/log/apache2/sync/access-ssl.log $ touch /var/log/apache2/sync/error.log $ touch /var/log/apache2/sync/access.log $ chown -R www-data: www-data /var/log/apache2/sync/ Активируем новый виртхост: $ a2ensite sync.domain.com И перезапустим apache:

service apache2 restart Если мы все сделали правильно, то при обращении к https://sync.domain.com/token/1.0/sync/1.5 веб-сервер отдаст нам нечто вроде: {«status»: «error», «errors»: [{«location»: «body», «name»:», «description»: «Unauthorized»}]} Обязательно добавьте свой сертификат в исключения браузера, иначе синхронизация не заработает! Осталось настроить сам браузер.

Заходим в about: config, и меняем значение ключа services.sync.tokenServerURI на 

https://sync.domain.com/token/1.0/sync/1.5 После этого авторизуемся в Меню → Настройки → Синхронизация, используя аккаунт Mozilla, и пользуемся.Кстати, если мы отключимся от аккаунта синхронизации, то ключ services.sync.tokenServerURI примет значение по умолчанию.P.S. К сожалению, не удалось настроить синхронизацию с мобильным телефоном на Android, используя fxa-custom-server-addon, если у кого-то получится — отпишитесь, пожалуйста, в комментарии.

Всем спасибо за внимание.

© Habrahabr.ru