Real-time CT log streaming, built in Rust.
A drop-in certstream server that aggregates newly issued SSL/TLS certificates from every Chrome- and Apple-trusted Certificate Transparency log and streams them over WebSocket and SSE. RFC 6962 and static-CT-API, in a single binary.
docker run -d -p 8080:8080 ghcr.io/reloading01/certstream-server-rust:latest
Everything a CT monitor needs, nothing it doesn't.
Built for security teams, researchers, and developers who need reliable Certificate Transparency monitoring.
Multi-protocol streaming
WebSocket and Server-Sent Events. WebSocket for real-time clients, SSE for browsers and pipelines — same data, your choice of transport.
RFC 6962 + static-CT-API
Both the classic get-entries protocol and the new checkpoint + tile static-ct-api logs are watched side by side in one process.
Cross-log deduplication
The same certificate shows up across many logs. A SHA-256 filter collapses duplicates so each client sees a clean, single stream.
State persistence
Resume from the last processed position after a restart. No certificate loss during maintenance or upgrades.
Connection limiting
Per-IP and total connection caps. Production-ready protection against abuse and runaway clients.
Token authentication
Bearer-token access control with constant-time comparison. Multiple tokens, configurable header name.
Hot-reload config
Configuration changes apply without a restart. A file watcher picks up edits for zero-downtime tuning.
Circuit breaker & health
Automatic retry with exponential backoff and per-log circuit breaking. Failing logs are isolated, not allowed to spam.
Metrics & REST API
A Prometheus /metrics endpoint plus an optional REST API for server stats, log health, and certificate lookup.
Measured, not marketed.
Default config, 100 concurrent WebSocket clients pulling the lite stream, 10-minute plateau window.
Memory settles within roughly five minutes of startup and stays flat — no GC pauses, no growth over
time. Every certificate is serialized once and broadcast to all subscribers via an
Arc<PreSerializedMessage> with zero-copy text frames; when no clients are connected,
serialization is skipped entirely. Reproduce these numbers locally with the scripts in soak/.
Built in spare time, kept free.
I build this in my free time. Just using it, starring the repo, or sharing it with someone who needs it already means a lot — that's the kind of thing that keeps me going.
If you'd like to go a step further, you can sponsor me on GitHub. No pressure though — every form of support is appreciated.