bmarwell / java-keyserver

A java keyserver with multiple operation modes (local, mirror, sync)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Java Keyserver

This is the Java Keyserver project. It supports multiple modes of operation and requires a PostgreSQL database.

Maven CI License codecov.io Renovate AppServer

State of this project

This is in development. None of the listed features works as of now.

Planned features

Modern Rest API

  • ❏ Implemented

Multiple operation modes

Unlike typical key servers, this keyserver supports multiple modes of operation:

Local
  • ❏ Implemented
    A local keyserver which does not sync, e.g. for company use.

Syncing
  • ❏ Implemented
    An outbound-syncing repository (similar to local, but only syncs outbound).

Mirror
  • ❏ Implemented
    An inbound-syncing repository (only syncs incoming keys).

    • Type a: sync everything (like most implementations).

    • Type b: sync only requested keys, like most Maven repository mirrors do.

    • Supports exclusion rules to not query specific email domains upstream.

Grouping
  • ❏ Implemented
    Similar to nexus/artifactory groups, can group other upstream key servers for reading.

Privacy features

  • ❏ Will remove keys after a while (configurable).

  • ❏ Sends mails to UIDs for verification (local repositories only) before they go public.

  • ❏ Removes signatures which are invalid for longer than one year.

  • ❏ Removes revoked/invalid keys after one year unless re-uploaded.

Configuration options

  • ❏ Mode of operation.

  • ❏ Proxy support.

  • ❏ Exclusion rules for mirroring.

  • ❏ Exclusion rules for syncing.

Running the project

Prerequisites
  • Java 21 or higher

  • A recent PostgreSQL database (see below)

  • Apache Maven is included via the wrapper.

Run PostgreSQL database using containers
# or docker...
podman run --name keyserver-db --rm -e POSTGRES_PASSWORD=test1234   -p 5432:5432 postgres
Run the pks endpoint application
KEYSERVER_DB_PASSWORD=test1234 mvn package -pl web/openpgp-keyserver-protocol -am liberty:dev

About

A java keyserver with multiple operation modes (local, mirror, sync)

License:Apache License 2.0


Languages

Language:Java 100.0%