Skip to content

Commit 09e7f02

Browse files
rayketchamclaude
andcommitted
docs(readme): cosign verify, roadmap, contributing, feature gaps
Fills documentation gaps for features that shipped in 0.5.6-0.5.8 but were never surfaced in the README, and adds a forward-looking roadmap: - Features: rate limiting, CIDR-aware reverse-proxy trust for X-Forwarded-For, cosign-signed releases, client IP in audit trail. - New "Verify release signatures (cosign)" block under Install with cosign verify-blob against the GitHub OIDC identity regex. - Security section now covers body-limit 413 (CL + chunked TE), rate limiting, supply-chain signing regression test, YAML-lint gate, secret scanning, CSP + fail-closed auth middleware. - New Roadmap section mapping open issues to v0.6 (#42 ml-dsa timing, #55 signer/verifier decomp, #72 pq-experimental feature-gate), v0.7 (#22 hybrid/composite PQ certs), and v1.0 (API freeze, SLSA provenance, HSM/KMS backends). - New Contributing section pointing to triage labels, pre-PR command checklist, and good-first-issue queries. Co-Authored-By: Claude <noreply@anthropic.com>
1 parent fe21119 commit 09e7f02

1 file changed

Lines changed: 65 additions & 4 deletions

File tree

README.md

Lines changed: 65 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ No OpenSSL. No `signtool.exe`. No external dependencies. One binary.
5151
- [Architecture](#architecture)
5252
- [Security](#security)
5353
- [Building from Source](#building-from-source)
54+
- [Roadmap](#roadmap)
55+
- [Contributing](#contributing)
5456
- [Changelog](#changelog)
5557
- [License](#license)
5658

@@ -68,7 +70,10 @@ No OpenSSL. No `signtool.exe`. No external dependencies. One binary.
6870
- **Built-in TSA server** --- RFC 3161 Time-Stamp Authority on port 3318
6971
- **LDAP authentication** --- Header-based auth via reverse proxy
7072
- **Certificate management** --- Admin API for hot-reload, listing, and rotation
71-
- **Audit logging** --- Every signing operation logged with request ID, hash, and duration
73+
- **Audit logging** --- Every signing operation logged with request ID, hash, client IP, and duration
74+
- **Rate limiting** --- Per-endpoint and per-IP limits on the web service
75+
- **CIDR-aware reverse-proxy trust** --- Only whitelisted CIDRs may set `X-Forwarded-For` / `X-Real-IP`
76+
- **Cosign-signed releases** --- Every release artifact ships with `.sig` + `.cosign-bundle` for supply-chain verification
7277
- **Evidence Record Syntax** --- RFC 4998 long-term archive timestamps
7378
- **Static binary** --- `x86_64-unknown-linux-musl` target, zero runtime dependencies
7479

@@ -101,6 +106,25 @@ sudo mv pki-sign-linux-x86_64-static /usr/local/bin/pki-sign
101106

102107
Windows: download [`pki-sign-windows-x86_64.exe`](https://github.com/rayketcham-lab/PKI-Signing-Service/releases/latest) and verify against the accompanying `.sha256`.
103108

109+
<details>
110+
<summary><strong>Verify release signatures (cosign)</strong></summary>
111+
112+
Every release binary is signed with [cosign](https://github.com/sigstore/cosign) keyless signing. The matching `.sig` and `.cosign-bundle` are uploaded next to each artifact.
113+
114+
```bash
115+
# Download binary + cosign bundle
116+
curl -LO https://github.com/rayketcham-lab/PKI-Signing-Service/releases/latest/download/pki-sign-linux-x86_64-static
117+
curl -LO https://github.com/rayketcham-lab/PKI-Signing-Service/releases/latest/download/pki-sign-linux-x86_64-static.cosign-bundle
118+
119+
# Verify the binary was built + signed by our release workflow
120+
cosign verify-blob pki-sign-linux-x86_64-static \
121+
--bundle pki-sign-linux-x86_64-static.cosign-bundle \
122+
--certificate-identity-regexp 'https://github.com/rayketcham-lab/PKI-Signing-Service/.*' \
123+
--certificate-oidc-issuer https://token.actions.githubusercontent.com
124+
```
125+
126+
</details>
127+
104128
Or build from source:
105129

106130
```bash
@@ -444,10 +468,14 @@ COMMANDS:
444468
- **No OpenSSL** --- Pure Rust crypto stack (`rsa`, `p256`, `p384`, `p521`, `ed25519-dalek`, `ml-dsa`, `sha2`, `aes-gcm`). TLS via `rustls` with `aws-lc-rs` backend.
445469
- **OpenSSL banned** --- `cargo-deny` blocks `openssl`, `openssl-sys`, and `native-tls` crate usage.
446470
- **Key zeroization** --- Private keys wrapped in `Zeroizing<>` for secure memory cleanup.
447-
- **Audit trail** --- Every sign/verify operation logged with request ID, file hash, signer, timestamp status, and duration.
471+
- **Audit trail** --- Every sign/verify operation logged with request ID, file hash, signer, client IP, timestamp status, and duration.
448472
- **Auth modes** --- None (dev), LDAP header pass-through, mTLS, API key.
449-
- **Security headers** --- Applied via middleware on all responses.
450-
- **CI hardening** --- `cargo-audit` + `cargo-deny` on every push. Pinned action SHAs.
473+
- **Security headers + CSP** --- Applied via middleware on all responses; fail-closed auth middleware.
474+
- **Body-limit enforcement** --- Oversized uploads rejected with `413` before any bytes are buffered (Content-Length + chunked transfer-encoding both covered).
475+
- **Rate limiting** --- Per-endpoint and per-IP, with CIDR-aware reverse-proxy trust for `X-Forwarded-For`.
476+
- **Supply-chain signing** --- Release artifacts signed with cosign (keyless / GitHub OIDC). Regression test asserts `.sig` + `.cosign-bundle` ship for every binary.
477+
- **CI hardening** --- `cargo-audit` + `cargo-deny` on every push *and* the release gate. YAML lint on workflows + dependabot config. All GitHub Action versions pinned to commit SHAs.
478+
- **Secret scanning** --- Pre-commit hook + CI gate block committed credentials.
451479
- **Static binary** --- musl target for minimal attack surface in production.
452480

453481
> [!IMPORTANT]
@@ -502,6 +530,39 @@ WantedBy=multi-user.target
502530

503531
---
504532

533+
## Roadmap
534+
535+
The project is stable for Authenticode, detached CMS, and RFC 3161 signing workloads. Ongoing work is tracked in [GitHub issues](https://github.com/rayketcham-lab/PKI-Signing-Service/issues); the milestones below capture the directional bets.
536+
537+
### v0.6 --- PQ-experimental opt-in + structural clean-up
538+
539+
- **Feature-gate ML-DSA behind `pq-experimental`** ([#72](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/72)) --- default builds drop the `ml-dsa` / `slh-dsa` dependencies entirely. Operators who want PQC opt in explicitly with `cargo build --features pq-experimental`.
540+
- **Decompose `signer.rs` / `verifier.rs` monoliths** ([#55](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/55)) --- extract PFX loading and cert-validation helpers into dedicated modules without public-API churn.
541+
- **ML-DSA timing-side-channel tracking** ([#42](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/42)) --- follow the upstream `ml-dsa` 0.0.4 → stable release and drop the `cargo-audit` ignores as soon as a constant-time Decompose lands.
542+
543+
### v0.7 --- Hybrid / composite certificates
544+
545+
- **Dual-sign PKCS#7** ([#22](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/22) phase 2) --- same PKCS#7 envelope carries an RSA or ECDSA signature *and* an ML-DSA counter-signature, so a downstream verifier with either capability can validate.
546+
- **Composite signatures (NIST SP 800-227)** ([#22](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/22) phase 3) --- single certificate carrying both a classical and a PQ key; tracks the NIST composite-signature spec as it finalizes.
547+
548+
### v1.0 --- Production freeze
549+
550+
- Stable REST API surface with semver guarantees on `/api/v1/*`
551+
- CAB/MSI Authenticode interop parity with `osslsigncode` / `signtool` (current gaps tracked in [#45](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/45), [#46](https://github.com/rayketcham-lab/PKI-Signing-Service/issues/46))
552+
- SLSA provenance attestations alongside the existing cosign signatures
553+
- Documented HSM / KMS key-backend interfaces (no private-key-on-disk requirement)
554+
555+
Want to pull something forward? File an issue with the `roadmap` label or comment on an existing one.
556+
557+
## Contributing
558+
559+
Issues and PRs welcome. See [SECURITY.md](SECURITY.md) for vulnerability reports (please don't file those as public issues).
560+
561+
- **Triage labels**: `security` (highest priority), `bug`, `enhancement`, `testing`, `documentation`, `future`
562+
- **Before opening a PR**: `cargo fmt --all --check`, `cargo clippy --all-targets --workspace -- -D warnings`, `cargo test --workspace` must all pass
563+
- **Conventional commits**: prefixes `feat:`, `fix:`, `refactor:`, `test:`, `docs:`, `ci:`, `security:`
564+
- **Good-first-issue candidates**: browse [open issues labeled `documentation` or `testing`](https://github.com/rayketcham-lab/PKI-Signing-Service/issues?q=is%3Aopen+label%3Adocumentation%2Ctesting)
565+
505566
## Changelog
506567

507568
See [CHANGELOG.md](CHANGELOG.md) for release history. Vulnerability reports: [SECURITY.md](SECURITY.md).

0 commit comments

Comments
 (0)