TopGit
GitHub Repo Review

Step CLI: PKI Management Command-Line Tool

STopGit review image for smallstep/cli
Review by Topgit.dev for smallstep/cli, with GitHub repository stats and README context.
Quick verdict

Step CLI is a command-line tool from Smallstep for building, operating, and automating X.509 and SSH public key infrastructure, plus JWT, OAuth, and TOTP operations, in one Go binary. It runs standalone for local crypto tasks or as a client to the step-ca certificate authority server. Reach for it if you want one CLI for certs, tokens, and OTP instead of separate tools; skip it if you only need one ACME certificate for a single server.

Stars
★ 4.4k
Forks
⑂ 325
Contributors
👥 98
Language
Go
License
Apache-2.0
Topic
Security
Updated
Oct 2026
Homepage
GitHub

Understanding the Step CLI

Step CLI is Smallstep's open-source command-line client for X.509 certificates, SSH certificates, and JOSE/OAuth tokens, distributed as a single Go binary under the Apache-2.0 license. Commands are grouped by domain — certificate, ca, crypto, oauth, and ssh — so a local key pair, an online step-ca server, or an ACME CA like Let's Encrypt all go through the same tool. It issues, inspects, and verifies; it isn't a general security scanner.

Key Capabilities and Command Groups

  • ✓step certificate: create, revoke, validate, lint, and bundle X.509 certificates; generate RSA, ECDSA, or EdDSA key pairs and CSRs; install or remove certificates from the system and browser trust stores; create RFC5280 and CA/Browser Forum-compliant certs for TLS/HTTPS.
  • ✓step ca: an X.509 and/or SSH CA can be initialized in one command; authenticate and obtain certificates through any enrollment mechanism step-ca supports; renew and revoke certificates it issued; work with any ACMEv2 (RFC8555) CA, including the http-01 challenge type.
  • ✓step crypto: sign, verify, and inspect JWTs (RFC7519), JWS, and JWE; create and manage JWKs and key sets; generate and verify TOTP tokens for MFA; apply KDFs (scrypt, bcrypt, argon2) and verify passwords; generate and check file hashes.
  • ✓Through 'step oauth', an OAuth 2.0 single sign-on flow can be added to any CLI application. It supports authorization code, out-of-band, and JWT bearer flows, in addition to refresh token flows. It also obtains OAuth access tokens, along with OIDC identity tokens, from any provider.
  • ✓The `step ssh` utility is for generating and overseeing SSH certificates, connecting to a `step-ca` instance whether it is online or offline; It also produces key pairs for SSH users and hosts, along with short-lived certificates; Operations include placing and taking out certificates within the SSH agent; Finally, it facilitates single sign-on for SSH login.
  • ✓Plugin system: an executable named step-<name>-plugin placed in $PATH or $STEPPATH/plugins ($HOME/.step/plugins by default) runs automatically when you call step <name>; step-kms-plugin, which handles keys and certificates in HSMs, TPMs, YubiKeys, the macOS Keychain, and cloud KMS providers, ships integrated directly into step.
How this repository's GitHub stars have grown over time. Source: star-history.com.View the star history ↗

Installing the Step CLI

The README doesn't inline install commands — it points to Smallstep's dedicated installation docs at smallstep.com/docs/step-cli/installation for the actual steps, so exact package-manager commands aren't part of the facts available here. What is confirmed: Step CLI ships as a single Go binary, so there's no separate runtime to manage once it's on your machine. If you're scripting a setup, check that documentation page rather than guessing at a package name.

Example: OAuth and JWT Verification

The README's own worked example combines two command groups: step oauth to get a Google OAuth OIDC identity token, then step crypto's JWT verify command to check that token's signature. That pairing is the point of step oauth existing at all — it hands off a token that another step command, or your own code, can immediately validate. The README text available here doesn't include the actual command flags for that example, so treat this as the shape of the workflow rather than a copy-pasteable snippet, and check Smallstep's linked documentation for exact syntax.

Practical Applications for Security Workflows

  • •Standing up an internal CA with step ca and issuing short-lived TLS certificates to internal services instead of relying on long-lived certs from a public CA.
  • •Getting a browser-trusted HTTPS setup on a local dev server by creating a CA and installing its root certificate into the system trust store with step certificate.
  • •Adding single sign-on to a custom CLI tool through step oauth's OAuth 2.0 flows, then checking the resulting OIDC token with step crypto.
  • •Issuing short-lived SSH certificates instead of static SSH keys for hosts and users behind a step-ca instance, via step ssh.
  • •Generating and checking TOTP codes for MFA testing or enrollment with step crypto, without a phone-based authenticator app.
  • •Running ACME issuance against a Let's Encrypt-compatible CA through step ca, since the CLI supports RFC8555 ACMEv2 including the http-01 challenge.

Strengths

  • ✓One binary covers X.509, SSH certificates, JWT/JWS/JWE, OAuth token retrieval, and TOTP — command groups that would otherwise mean reaching for four or five separate tools.
  • ✓step certificate can install its own root CA into the system and browser trust stores, so certificates issued for local development work in a real browser instead of triggering warnings.
  • ✓ACMEv2 (RFC8555) support in step ca means the CLI isn't locked to Smallstep's own step-ca server — it can talk to any compliant CA, including Let's Encrypt-style issuance.
  • ✓The step-<name>-plugin format lets KMS and HSM support extend the CLI without patching it; step-kms-plugin alone covers HSMs, TPMs, YubiKeys, the macOS Keychain, and cloud KMS providers.
  • ✓Apache-2.0 licensed, with GitHub Discussions and a Discord server listed in the README for support and development discussion.

Potential Considerations

  • △Several step ca and all step ssh certificate-issuance features need a running step-ca server or an ACME CA behind them — Step CLI on its own doesn't operate a CA.
  • △The README doesn't document install commands directly; it links out to Smallstep's docs site, so you can't tell package-manager support from the README alone.
  • △The README's own worked example (OAuth token plus JWT verification) is described in one sentence with no command text shown in the source used here.
  • △No version number or release-cadence information appears in the facts available, so there's no way to tell from the README how current the 4,304-star snapshot is relative to the codebase.
  • △Known third-party plugins listed in the README are limited to step-kms-plugin and step-kmsproxy-plugin — coverage for other KMS or HSM vendors isn't guaranteed out of the box.

Other PKI and Cryptography Tools

OpenSSL — the general-purpose crypto and X.509 toolkit most engineers already have installed; lower-level and more command flags to learn than Step CLI's grouped subcommands.cfssl — Cloudflare's PKI and TLS toolkit for running a private CA and signing certificates, aimed at a similar audience to Step CLI's step ca and step certificate groups.HashiCorp Vault — its PKI secrets engine issues and manages X.509 certificates from a running Vault server, a similar client-plus-server shape to Step CLI paired with step-ca. ↗certbot — the standard ACME client for obtaining Let's Encrypt certificates; narrower in scope than Step CLI's combined X.509/SSH/JWT/OAuth toolkit.caddy — a web server that automates HTTPS certificate issuance and renewal itself, worth considering if you'd rather certs were handled invisibly than through a separate CLI. ↗

Frequently Asked Questions

What is the license for Step CLI?

Step CLI is released under the Apache-2.0 license, as listed on its GitHub repository.

Does Step CLI require the `step-ca` server to function?

Not entirely — Step CLI's certificate, crypto, and OAuth commands work standalone, but the step ca command group and SSH certificate issuance need a running step-ca server, or another ACMEv2-compliant CA, behind them, per the README.

Can Step CLI work with an ACME CA like Let's Encrypt?

Step CLI's step ca commands work with any ACMEv2 (RFC8555)-compliant CA server, including the http-01 challenge type that Let's Encrypt-style ACME issuance uses, according to the README.

How does Step CLI handle multi-factor authentication (MFA) tokens?

Step CLI generates and verifies TOTP tokens for MFA through its step crypto commands, per the README's crypto toolkit section.

Does Step CLI support external KMS integrations?

Yes — the step-kms-plugin, listed as a known plugin in the README, manages keys and certificates stored in HSMs, TPMs, YubiKeys, the macOS Keychain, and cloud KMS providers, and the README says it's also integrated directly into Step CLI for KMS-backed certificate, CSR, and token-signing operations.

What types of certificates can Step CLI manage?

Step CLI manages X.509 certificates, including TLS/HTTPS and root or intermediate CA certificates, through step certificate and step ca, and SSH certificates for hosts and users through step ssh, per the README.

The problem it solves

Teams doing PKI work usually end up gluing together separate tools: openssl for X.509 operations, a language-specific library for JWT signing, an ACME client for Let's Encrypt certificates, and ssh-keygen for SSH certs, each with its own flags and failure modes. Step CLI's README frames the tool around collapsing that spread into one command surface, grouped by domain (certificate, ca, crypto, oauth, ssh) but sharing a single binary, one config directory, and one plugin mechanism for KMS-backed keys.

Who should try it — and who should skip

Try Step CLI if you're already running, or planning to run, step-ca and want one client for issuing and renewing certificates, or if you just want a single CLI for ad hoc X.509, SSH, JWT, OAuth, and TOTP work instead of juggling openssl, ssh-keygen, and a JWT library separately. Skip it if you only need one ACME certificate for one server — a dedicated ACME client is less to learn — or if there's no CA or step-ca in your setup at all, since several of Step CLI's most useful commands assume one is running behind them.

Related repositories

Source & attribution

Facts and quotes sourced from the smallstep/cli GitHub repository and its README.

GitHub data · last synced Aug 12, 2026Reviewed by Henry
← Back to TopGit

Want a second opinion on cli?

Ask an AI that can read this page — one click and you get its take on cli.

GitHub