Сервис для безопасного хранения данных.
Для корректной работы сервера ему необходим ssl сертификат и мастер ключ.
Для корректной работы серверу нужно передать конфигурационный файл. Пример можно найти по пути:
config/config.yaml. Его же можно использовать для локального тестирования
Пример команды для сборки сервера с переданным файлом конфигурации:
go build -ldflags '-X main.configFilePath=config/config.yaml -o server cmd/server/main.cmd
Для генерации ssl сертификата на локальном окружении можно запустить команду
make cert. Она создаст необходимые ключи шифрования и сертефикат в папке
cert. После чего в файле конфигурации нужно будет указать путь до сгенерированных
файлов. В файле конфигурации по пути config/config.yaml уже указаны все пути для этого способа.
Необходим для работы сервера и передается через ldflags приложению. Должен иметь длину в 16 символов.
Если длина будет отличаться, приложение не соберется.
Пример сборки сервера с переданным мастер ключом:
go build -ldflags '-X main.configFilePath=config/config.yaml -X main.masterKey=1323434385868384 -o server cmd/server/main.go'
go build -ldflags '-X main.configFilePath=config/config.yaml -X main.masterKey=1323434385868384 -o server cmd/server/main.go'
Клиент поддерживает конфигурацию на машине пользователя. По большей части она нужна для локального тестирования или в случае когда на сервере установлен самоподписанный сертификат шифрования
Клиент будет искать файл конфигурации по пути ~/.passkeper.yaml
Пример можно найти в репозитории по пути config/.passkeper.yaml
Если на сервере используется не самоподписанный сертификат, то дополнительная настройка клиента не требуется
Но если на сервере сертификат самоподписанный то в файле конфигурации клиента в поле grpc.tls_cert надо
указать путь до ca-cert.pem
Команда для сборки: go build -o build/passkeep cmd/client/main.go
- При запуске сервера через ldflags передается master-key
- С помощью master-key шифруется general-key, который создается и сохраняется в базе данных в зашифрованном виде
- general-key расшифровывается с помощью master-key и помещается в открытом виде в keyring
- При сохранении данных генерируется data-key с помощью которого шифруется конкретный элемент данных. После чего data-key шифруется с помощью general-key и сохраняется рядом с данными
- При извлечении данных data-key дешифруется с помощью general-key и с помощью расшифрованного data-key расшифровывается конкретный элемент данных
Более подробное описание в диаграмме crypt.drawio в этом репозитории