FileClient / bFileServer

Клиент-серверное приложение для синхронизации файлов bFileServer/FileClient

Назначение: синхронизация файлов пользователя с сервером. Простейший аналог Dropbox. Пример работы: на работе поработали с документами, пришли домой, клиент синхронизировал изменения с домашним компьютером. Все, актуальные версии данных у вас дома. На следующий день на работе запустили клиент и опять все сделанные дома изменения сохранились.

Совместимость:
Клиент и сервер написаны на Java, работоспособность проверена:
1) клиента (Windows 10, Debian 11, Astra Linux Orel (2.12.45);
2) сервер (Windows 2016 Standard, Windows 10, Debian 11)

Требования к программному обеспечению:
Для работы клиента и сервера требуется установленная Java (JRE) 17-й версии. Например, Azul Zulu Builds of OpenJDK (https://www.azul.com/downloads/).

Ограничения:
1) Ограничений на размер передаваемых файлов нет, но регулярная работа с большими файлами может создавать существенный трафик. Приложение изначально создавалось для работы с документами, файлами в режиме обычной офисной работы, а не перекачивания фильмов по сети!
2) Одновременная работа двух клиентов под одной учетной записью невозможна. Точнее, возможна, но это приведет к сбоям в синхронизации файлов.
3) Не рекомендуется делать сервер общедоступным по интернет. Используйте VPN, белые списки разрешенных IP-адресов клиентов и т.п. средства защиты.

Работа в сети:
Для работы сервер слушает порт сервера (по-умолчанию, 5556). Протокол tcp. Клиенту для работы нужно подключение только к этому порту. Поэтому для работы и клиента, и сервера не требуется интернет. Можно запускать в виртуальной машине, на одном хосте запускать и клиент и сервер, пробрасывать порт, работать через VPN. Не отправляет никому никакой статистики "для улучшения" или для других целей.

Трафик между клиентом и сервером шифруется, протокол TLS 1.2. Пример параметров установленной сессии:

SSLSession:
Protocol : TLSv1.2
Cipher suite : TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384

Для работы на клиенте и сервере необходимо установить Java Runtime.

Предпосылки к созданию проекта:
1) желание не ограничивать себя в объеме хранилища для синхронизации, контролировать все узлы работы - файлы на клиенте, и на сервере.
2) желание создать легкую, кроссплатформенную программу, для которой не нужны права администратора ни на стороне клиента, ни на стороне сервера.
3) нежелание использовать ПО, которое отсылает какую-либо информацию кому-то "на сторону".



Сервер bFileServer

Консольное приложение (без графического интерфейса). Исполняемый файл bFileServer.jar. В директории с файлом должны быть файлы из архива (иконки, библиотеки).

Запускать лучше из консоли, пример строки запуска сервера:

cd /opt/FileServer
> java -jar bFileServer.jar

Для сохранения лога и запуска в фоне рекомендую вариант:

java -jar bFileServer.jar > fileserver.log &

Использование на конце символа "&" запускает сервер в фоне. При этом текущий вывод сохраняется в файл лога fileserver.log.



Клиент FileClient

Запуск - двойным кликом по файлу FileClient.jar.

Можно и из командной строки. Пример в Windows:
C:\Users\user\FileClient > java -jar bFileServer.jar



Авторизация на сервере и аутентификация клиентов

Клиент и Сервер используют SSL-сертификаты и ключи для аутентификации и защиты трафика.

Аутентификация пользователя производится только по ключевой паре, без ввода логина/пароля.

Клиент использует контейнер ключей JKS для работы с сервером.

Использование самоподписанных сертификатов не ограничено никак, скорее наоборот - приветствуется использование своего CA ;)

Примечание: для подготовки или работы с контейнерами ключей в среде Windows рекомендую бесплатную программу KeyStore Explorer.

Если есть готовые сертификаты в формате .pem, то можно создать контейнеры JKS, например:

> openssl pkcs12 -inkey client.key -in client.pem -CAfile ca.pem -chain -export -out fileClient.p12
> keytool -importkeystore -srckeystore fileClient.p12 -srcstoretype PKCS12 -destkeystore fileClient.jks -deststoretype JKS

где client.key, client.pem, ca.pem - ключи и сертификаты в формате pem
fileClient.p12 - пакет формата PKCS #12
keytool - утилита из пакета Java,
fileClient.jks - требуемый файл для FileClient.



Контакты

Контакты разработчика, вопросы по программе, пожелания: ivanov.ilya{@мяу@}bozza.ru



Авторство, ответственность разработчика

FileClient и bFileServer являются собственной разработкой, распространяются бесплатно, «как есть». Разработчик не несет ответственности за прямой и/или косвенный ущерб, причиненный использованием данного ПО.

В разработке используются сторонние билиотеки jNotify (https://jnotify.sourceforge.net/) и sqlite-jdbc.



Download

Изменения см. в changelog

Тестовый запуск:
Клиент и сервер, доступные по ссылкам на сайте bozza.ru, сразу после распаковки готовы к тестовому запуску. Перед использованием ознакомтесь с конфигами server.conf и client.conf, внесите необходимые изменения.

Описание работы, установки и использования: FileClient_FileServer_manual.pdf

Актуальные версии:

Сервер: bFileServer (ver. 0.0.2)

Клиент: FileClient (ver.0.1.3)