Sign inSign up

tessaridb/vault

By tessaridb

•Updated about 5 hours ago

Company password manager: records encrypted in the browser, every piece of state in TessariDB

Image
0

60

tessaridb/vault repository overview

⁠TessariDB Vault

A password manager for companies, with every record encrypted in the browser and every piece of state in TessariDB.

Companies, departments and teams share passwords, keys, notes and small files as end-to-end encrypted records. The server and the database store and move ciphertext; neither holds a key that opens a record. One Rust binary serves the API and the web application; nothing of the database is inside this image.

⁠Tags

Tag
0.0.1, latestthe first release

The configuration and the HTTP surface may still change in a minor release before 1.0. Pin a version tag.

⁠What it needs

  • A TessariDB node, 0.39.3 or later (0.39.4 is withdrawn), and an account on it that may edit one namespace. The server never signs in as the store's owner. Without TESSARIDB_VAULT_STORE_AUTHORITY it reaches a store only on loopback, which is why the Compose example runs it in the node's network namespace.
  • The service key file: 32 random bytes as 64 hexadecimal characters, readable by the user 65532 alone. It derives every company's vault key. It is not in the store, so back it up apart from the store's backups.
  • An https address in front of it (TESSARIDB_VAULT_PUBLIC_URL) before anyone else reaches it; passkeys need it.

⁠Port

PortListener
8080the web application and the API (TESSARIDB_VAULT_LISTEN, 0.0.0.0:8080 in this image)

The listener speaks plain HTTP for a TLS terminator in front of it.

⁠With a TessariDB node, in Compose

The repository's compose.yaml starts the node, declares the server's account (docker/vault-account.sh), writes the service key into a volume of its own (docker/service-key.sh) and starts the server:

git clone https://github.com/tessaridb/tessaridb-vault && cd tessaridb-vault && git checkout v0.0.1
cp .env.example .env    # set TESSARIDB_PASSWORD, VAULT_STORE_PASSWORD and the platform admin
docker compose up -d --wait
docker compose run --rm vault enrolment-link

enrolment-link prints a single-use enrolment token for the platform admin, valid for 24 hours; open http://localhost:8080/#/join and paste it.

⁠Variables

VariableDefaultWhat it is
TESSARIDB_VAULT_STORErequiredthe node's wire address, host:port
TESSARIDB_VAULT_STORE_USERrequiredthe server's account on the node
TESSARIDB_VAULT_STORE_PASSWORDrequiredthat account's password
TESSARIDB_VAULT_STORE_AUTHORITYnonethe PEM a node's certificate must lead to; without it only a loopback store is reached
TESSARIDB_VAULT_SERVICE_KEY_FILErequiredthe service key file
TESSARIDB_VAULT_NAMESPACEvaultthe namespace it keeps everything in
TESSARIDB_VAULT_DATABASEmainthe database inside it
TESSARIDB_VAULT_LISTEN0.0.0.0:8080where it serves
TESSARIDB_VAULT_PUBLIC_URLnonethe address people reach it at; passkeys need it
TESSARIDB_VAULT_PLATFORM_ADMIN_EMAIL, _NAMEnonethe platform admin to ensure at start, both or neither
TESSARIDB_VAULT_OIDC_ISSUER, _CLIENT_ID, _REDIRECTnonean OpenID Connect issuer to sign in through, all three or none

The server refuses to start, naming the variable, when a value it needs is missing. The image carries no credential.

⁠Health and stopping

The image's health check runs tessaridb-vault health, which asks the server in the container whether it answers and exits 0 when it does, so docker compose up --wait returns once the server serves. The server finishes the requests in flight on SIGTERM. It runs as the non-root user 65532 on a distroless base.

⁠Licence

Business Source License 1.1. Production use is free, commercial use included. A commercial licence is needed only to provide it to third parties as a hosted or managed service for their passwords and secrets, or to sell it. Each version converts to the Apache License 2.0 on its Change Date. [email protected]⁠

Tag summary

Content type

Image

Digest

sha256:cddda3b34…

Size

13.1 MB

Last updated

about 5 hours ago

docker pull tessaridb/vault