Purser — VPN client-certificate issuance, revocation and delivery dashboard (step-ca)
- Go 78.3%
- Shell 21.3%
- Dockerfile 0.4%
| .forgejo/workflows | ||
| changelog.d | ||
| cmd | ||
| docs | ||
| internal | ||
| scripts | ||
| tests | ||
| .gitignore | ||
| .release-toolkit-manifest.json | ||
| CHANGELOG.md | ||
| Dockerfile | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
| release-toolkit.yml | ||
purser
Purser manages VPN client certificates for the alcatraz OpenConnect (ocserv) server.
It handles certificate issuance, revocation, and delivery via step-ca (JWK provisioner),
replacing the hand-rolled issue-cert.sh / certtool CA workflow.
See alcatraz-infra#422
for the design and deployment context.
Operational runbooks, including dashboard password rotation with cmd/hashpw,
live in docs/operations.md.
Key types
Two distinct keys are involved — do not conflate them:
- Subject certificate key: RSA-3072 by default, configurable. Every successful Secure Client connection on this VPN has used RSA-3072; the first ECDSA P-256 cert (step-ca's default when the CA changed) was also the first EXPIRED one.
- Provisioner JWT signing key: EC P-256 / ES256 — this is the JWK provisioner key in step-ca and is fixed by the CA, not a Purser config field. The enrolment flow is JWK-signed JWT (one-time token), not SCEP.