step-ca: run your own certificate authority for internal TLS and SSH
step-ca from Smallstep is an open source certificate authority that issues TLS and SSH certificates for your own infrastructure, with ACME support so internal services get certificates the way public ones do.
Drafted with AI from official documentation. Scripts were run in a test environment and repository links verified. Awaiting a human check. Did it work for you? Last edited Outdated?
smallstep/certificates
- Stars
- 9k
- Forks
- 607
- Language
- Go
- Licence
- Apache-2.0
- Last push
- 14 Oct 2026
On GitHub: 🛡️ A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH.
Open on GitHubstep-ca (about 9,000 stars on GitHub) is a private certificate authority written in Go and maintained by Smallstep Labs, the company founded by Mike Malone that also publishes the companion step command line client. The repository was opened in 2018. The problem it solves is familiar to anyone who has run internal services: browsers and tools insist on TLS, public certificate authorities will not issue certificates for private names and addresses, and self-signed certificates have to be distributed and renewed by hand. step-ca lets you run a small CA of your own that issues short-lived certificates automatically.
What it does
step-ca runs as a service and issues X.509 certificates for TLS and certificates for SSH user and host authentication. Clients prove who they are through one of several provisioners: a one-time token from the step client, an ACME endpoint compatible with certbot, Caddy, Traefik and other ACME clients, OpenID Connect identity from a single sign-on provider, cloud instance identity documents from AWS, GCP or Azure, or Kubernetes service accounts. Certificates are short-lived by default, which turns renewal into a routine automated step rather than a yearly emergency. The CA can also act as a registration authority in front of a cloud HSM or another CA.
Who it is for
- Administrators who want HTTPS on internal dashboards, home lab services and development hosts without browser warnings.
- Teams that want SSH certificates instead of managing
authorized_keysfiles on every server. - Developers who need a local ACME server to test certificate automation before pointing it at Let’s Encrypt.
- Platform teams issuing identities to services for mutual TLS.
How to install and try it
brew install step
step version
step ca init
step-ca $(step path)/config/ca.json
The init command creates a root and intermediate key pair and a configuration file after a few questions; the last command starts the CA. Packages are available for Debian, Ubuntu, Red Hat, Arch, Homebrew, Scoop and as a Docker image. The documentation covers each provisioner, the ACME setup and how to install your root certificate on clients.
Credit
step-ca and the step CLI are developed by Smallstep Labs and contributors. Both are published under the Apache License 2.0; Smallstep also sells a hosted version, but the open source CA is complete for self-hosted use. For encrypting files rather than issuing certificates, see the entry on age.
Did this work for you?
No votes yet. Be the first.
If it did not work, the report form below tells the editors what went wrong.
See also
- 0099 Proxmox VE repositories and updates: enterprise vs no-subscription A fresh Proxmox VE install uses the enterprise repository, which needs a subscription. Learn how to switch to the no-subscription repository and… Beginner · Step by step · Linux Article Installation & first steps · Packages & updates 15 Oct 2026
- 0102 Proxmox VE storage types: local, LVM-thin, ZFS, NFS and Ceph Proxmox VE stores disks, ISOs, templates and backups in storage pools defined in /etc/pve/storage.cfg. Learn the main storage types, what local and… Intermediate · Explains an idea · Linux Article Disks, LVM & filesystems · Storage 15 Oct 2026
- 0103 Proxmox VE networking: Linux bridges (vmbr0) and VLANs Guests reach the network through Linux bridges such as vmbr0, defined in /etc/network/interfaces. Learn the default setup, VLAN-aware bridges, VLAN tags for… Intermediate · Step by step · Linux Article Installation & first steps · Networking & firewalls 15 Oct 2026
- 0164 systemd services: systemctl and journalctl basics systemd starts and supervises services on most Linux servers. systemctl starts, stops and enables them; journalctl shows their logs. Beginner · Explains an idea · Linux Article Services & systemd 15 Oct 2026
- 0165 Write a systemd service unit for your own app Turn any long-running program into a proper service: create a unit file, run it as an unprivileged user, restart it on failure… Intermediate · Step by step · Linux Article Services & systemd 15 Oct 2026
- 0166 Replace a cron job with a systemd timer A systemd timer runs a service on a schedule like cron, but logs every run to the journal, can catch up missed… Intermediate · Step by step · Linux Article Services & systemd 15 Oct 2026
History
Every saved edit is kept. The plot on the sleeve draws one line per edit. Open any edit to see exactly what changed.
- Dominik +2,475 chars