🧰 A zero trust swiss army knife for working with X509, OAuth, JWT, OATH OTP, etc. https://smallstep.com/cli
  • Go 99.5%
  • Makefile 0.2%
  • Shell 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-25 12:43:47 -07:00
.github Bump actions/setup-go from 6.5.0 to 7.0.0 2026-07-23 13:47:40 +00:00
autocomplete Spelling 2022-10-06 18:25:44 -04:00
cmd/step Fix deprecation of testscript.RunMain 2025-06-25 18:57:29 +02:00
command Support for ML-DSA keys 2026-09-04 15:48:01 -07:00
debian Add completion command 2022-02-10 01:26:12 +03:00
docker Update Sebian docker image to use trixie 2025-12-04 15:04:24 -08:00
docs Fix broken link in CONTRIBUTING.md 2026-02-05 18:07:01 +08:00
exec Fix gosec linter issues 2026-02-24 13:51:06 +01:00
flags Fix typo in kty flag 2026-09-08 11:25:50 -07:00
integration Remove testscript conditionals for Go versions < 1.24 2025-09-10 10:59:11 +02:00
internal Fix test case 2026-09-04 16:01:21 -07:00
make Inline the common.mk file into our Makefile since it's not used anywhere else 2023-03-20 20:42:18 -07:00
pkg/bcrypt_pbkdf Support for ML-DSA keys 2026-09-04 15:48:01 -07:00
powershell Update download URLs 2023-05-16 20:02:24 -07:00
scripts Add if statement to skip uploading armhf6 deb due to GCP AR issues. 2024-09-13 14:10:32 -05:00
systemd Only restart services which are actually running 2022-12-01 15:41:08 +01:00
token Support for ML-DSA keys 2026-09-04 15:48:01 -07:00
utils Support for ML-DSA keys 2026-09-04 15:48:01 -07:00
.gitattributes Use git export-subst for versioning when not in git repo. 2019-02-19 13:11:08 -08:00
.gitignore Ignore goreleaser dist/ directory. 2024-08-09 11:33:33 -05:00
.goreleaser.yml Add long description for Winget, fix scoop URL template 2026-02-03 04:51:51 -08:00
.VERSION Added version operability for git archive | updated zsh-completion 2019-02-21 14:45:41 -08:00
CHANGELOG.md Update changelog for 0.30.4 through 0.31.0 2026-09-25 11:48:05 -07:00
cosign.pub [action] goreleaser cosign new key pair 2021-08-30 20:39:44 -07:00
go.mod Bump go.step.sm/crypto from 0.90.0 to 0.91.0 2026-09-21 22:08:56 +00:00
go.sum Bump go.step.sm/crypto from 0.90.0 to 0.91.0 2026-09-21 22:08:56 +00:00
LICENSE Add full version of the license. 2020-05-26 12:22:00 -07:00
Makefile Add remote configuration of the GCP organization id 2025-09-23 18:02:48 -07:00
README.md Fix typo in README.md (#1580) 2026-03-09 22:37:29 -07:00
SECURITY.md Create SECURITY.md 2022-07-29 15:16:22 -07:00

Step CLI

GitHub release Go Report Card Build Status License CLA assistant

GitHub stars Twitter followers

step is an easy-to-use CLI tool for building, operating, and automating Public Key Infrastructure (PKI) systems and workflows. It's also a client for the step-ca online Certificate Authority (CA) server. You can use it for many common crypto and X.509 operations—either independently, or with an online CA.

Questions? Ask us on GitHub Discussions or Discord.

Website | Documentation | Installation | Basic Crypto Operations | Contributor's Guide

Features

Step CLI's command groups illustrate its wide-ranging uses:

  • step certificate: Work with X.509 (TLS/HTTPS) certificates.

    • Create, revoke, validate, lint, and bundle X.509 certificates.
    • Install (and remove) X.509 certificates into your system's (and browser's) trust store.
    • Validate certificate deployment and renewal status for automation
    • Create key pairs (RSA, ECDSA, EdDSA) and certificate signing requests (CSRs)
    • Sign CSRs
    • Create RFC5280 and CA/Browser Forum-compliant certificates that work for TLS and HTTPS
    • Create CA certificates (root and intermediate signing certificates)
    • Create self-signed & CA-signed certificates
    • Inspect and lint certificates on disk or in use by a remote server
    • Install root certificates so your CA is trusted by default (issue development certificates that work in browsers)
  • step ca: Administer and use a step-ca server, or any ACMEv2 (RFC8555) compliant CA server. ACME is the protocol used by Let's Encrypt to automate the issuance of HTTPS certificates.

  • step crypto: A general-purpose crypto toolkit

  • step oauth: Add an OAuth 2.0 single sign-on flow to any CLI application.

    • Supports OAuth authorization code, out-of-band (OOB), JWT bearer, and refresh token flows
    • Get OAuth access tokens and OIDC identity tokens at the command line from any provider.
    • Verify OIDC identity tokens (step crypto jwt verify)
  • step ssh: Create and manage SSH certificates (requires an online or offline step-ca instance)

    • Generate SSH user and host key pairs and short-lived certificates
    • Add and remove certificates to the SSH agent
    • Inspect SSH certificates
    • Login and use single sign-on SSH

Installation

See our installation docs here.

Example

Here's a quick example, combining step oauth and step crypto to get and verify the signature of a Google OAuth OIDC token:

Animated terminal showing step in practice

Plugins

A plugin is an executable file named using the format step-<name>-plugin. Plugins must be available in your $PATH or in the $STEPPATH/plugins directory (that's $HOME/.step/plugins, by default).

When you run step <name>, the CLI will automatically execute the corresponding plugin, if found.

Some known plugins include:

  • step-kms-plugin: Manage keys and certificates stored in a KMS, including HSMs, TPMs, YubiKeys, the macOS Keychain, and cloud KMSs.
  • step-kmsproxy-plugin: Provides an HSM/KMS-backed authenticating proxy for mTLS services. Thanks to @andsens for creating and maintaining this plugin!

step-kms-plugin is also integrated directly into step to create certificates, generate CSRs, sign tokens, and more using KMS-backed keys.

Community

Further Reading