GophKeeper представляет собой клиент-серверную систему, позволяющую пользователю надёжно и безопасно хранить логины, пароли, бинарные данные и прочую приватную информацию.
- пары логин/пароль
- произвольные текстовые данные
- произвольные бинарные данные
- данные банковских карт
- Redis - хранение шифрованных секретов и метаданных сервера
- jwt - аутентификация пользователей во время работы с сервером
- grpc - протокол взаимодействия клиент-сервер
- cobra - библиотека для cli интерфейса клиента
Сервер реализован на базе сгенерированного шаблона унарного grpc сервера. Для хранения технической информации и данных пользователей использована база Redis.
Регистрация новых пользователей и дальнейшая их аутентификация происходит через пару логин/пароль.
После аутентификации пользователю отправляется jwt токен с ограниченным временем жизни. Этот токен сохраняется клиентом в файл и используется в дальнейшем для запросов данных.
Так как система должна хранить и передавать данные безопасно для коммуникации используется шифрование tls протоколом. Сертификат tls генерится автоматически при каждом запуске сервера.
Данные пользователя храняться в зашифрованном виде индивидуальным ключом пользователя. Этот ключ также храниться в базе в зашифрованном виде мастер ключом сервера. Мастер ключ сервера передается при запуске сервера через флаг. Если при первом запуске сервера на пустой базе данных ключ не был предоставлен, то сервер сгенерирует его автоматически и отобразит в консольном выводе. При дальнейших запусках/перезапусках сервера на этой же базе необходимо предоставлять этот же ключ. В случае утери мастер ключа, база данных будет в зашифрованном виде и расшифровать ее будет не возможно.
Скачать сервер для linux можно здесь.
docker run --rm --name gokeepas-stor -d -p 6379:6379 redis:6-alpine redis-server
./keeppas-server -a 0.0.0.0:5000
!!!! Not found server key, generate new:
'YXjGEdqZWeTZ255dLanqFV8s'
Please remember and provide it in the next run with this db !!!
{"level":"info","timestamp":"2023-05-19T07:27:11Z","caller":"server/main.go:89","msg":"server started"}
После чего можно подключаться к серверу на порт 5000/tcp.
Клиент реализован на базе библиотеки cobra.
Для получения справки достаточно запустить клиент без параметров.
Скачать клиента для своей платформы можно здесь.
Для успешного подключения к серверу необходимо использовать DNS имя или алиас из hosts файла, по ip адресу подключение не пройдет из-за ошибки сертификата.
echo "SERVER_IP keeppas" >> /etc/hosts
./keeppas -s keeppas:5000 signup -u USER_LOGIN -p USER_PASSWORD
login success
mkdir -p bin/linux
mkdir -p bin/win
mkdir -p bin/mac
# build linux
go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/linux/keeppas cmd/client/main.go
go build -o bin/linux/keeppas-server cmd/server/main.go
# build windows
GOOS=windows GOARCH=amd64 go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/win/keeppas.exe cmd/client/main.go
# build mac amd64
GOOS=darwin GOARCH=amd64 go build -ldflags "-X 'github.com/hrapovd1/gokeepas/internal/cli.BuildTime=$(date +'%Y-%m-%d %H:%M')'" -o bin/mac/keeppas cmd/client/main.go