ConfigsApr 13, 2026·3 min read

step-ca — Private Certificate Authority for DevOps

step-ca is an open-source online Certificate Authority for secure automated certificate management. It provides ACME, SSH certificates, and mTLS for internal infrastructure — enabling TLS everywhere and SSO for SSH in your organization.

TL;DR
step-ca automates TLS and SSH certificate management for internal services using the ACME protocol, like Let's Encrypt for your private network.
§01

What it is

step-ca is a private online Certificate Authority created by Smallstep that brings the automation of the public web PKI to internal infrastructure. It issues X.509 certificates for TLS and SSH certificates for authentication, supporting the ACME protocol that powers Let's Encrypt. This means internal services can get certificates automatically using the same tools (certbot, ACME clients) used on the public internet.

step-ca targets DevOps engineers and platform teams who need encrypted internal traffic, mutual TLS between microservices, and SSH certificate-based authentication without exposing services to public certificate authorities.

§02

How it saves time or tokens

step-ca automates certificate issuance and renewal that would otherwise require manual generation and distribution. The ACME protocol handles certificate lifecycle automatically, eliminating expired certificate incidents. SSH certificates replace SSH key management entirely -- no more distributing authorized_keys files across servers.

§03

How to use

  1. Install the step CLI and step-ca: brew install step step-ca.
  2. Initialize a new CA: step ca init --name 'My CA' --dns ca.example.com --address :443.
  3. Start the CA server: step-ca $(step path)/config/ca.json.
§04

Example

# Initialize a new private CA
step ca init --name 'Internal CA' --dns ca.internal --address :8443

# Start the CA
step-ca $(step path)/config/ca.json

# Get a certificate for a service
step ca certificate myapp.internal myapp.crt myapp.key

# Renew automatically with a daemon
step ca renew --daemon myapp.crt myapp.key

# Issue an SSH certificate
step ssh certificate user@host ssh_key
§05

Related on TokRepo

§06

Common pitfalls

  • The root CA key must be kept secure; compromise of this key invalidates the entire certificate chain. Use hardware security modules (HSMs) in production.
  • Clients need the CA root certificate installed in their trust store; without it, TLS connections to internal services will fail with certificate verification errors.
  • ACME challenges for internal services require DNS or TLS-ALPN challenges, not HTTP-01, since internal services are not publicly accessible.

Frequently Asked Questions

How does step-ca differ from Let's Encrypt?+

Let's Encrypt is a public CA for internet-facing services. step-ca is a private CA for internal infrastructure. step-ca uses the same ACME protocol but issues certificates for internal domains that public CAs cannot validate.

Can step-ca issue SSH certificates?+

Yes. step-ca issues SSH user and host certificates, replacing traditional SSH key management. SSH certificates expire automatically and can be tied to identity providers for single sign-on.

Does step-ca support Kubernetes?+

Yes. step-ca integrates with cert-manager for Kubernetes, automatically issuing and renewing TLS certificates for pods and ingress resources.

What backends does step-ca support for key storage?+

step-ca supports file-based key storage, Google Cloud KMS, AWS KMS, Azure Key Vault, YubiKey, and PKCS#11 hardware security modules.

Is step-ca free?+

The open-source step-ca is free under the Apache-2.0 license. Smallstep also offers a commercial product with additional features like a hosted CA and admin dashboard.

Citations (3)

Discussion

Sign in to join the discussion.
No comments yet. Be the first to share your thoughts.

Related Assets