certificates
🛡️ A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH.
Top Related Projects
A tool for secrets management, encryption as a service, and privileged access management
CFSSL: Cloudflare's PKI and TLS toolkit
A simple zero-config tool to make locally trusted development certificates with any names you'd like.
An ACME-based certificate authority, written in Go.
Tools to bootstrap CAs, certificate requests, and signed certificates.
easy-rsa - Simple shell based CA utility
Quick Overview
Smallstep Certificates is an open-source project that provides a private certificate authority (CA) and related tools for secure automated certificate management. It allows organizations to easily deploy and manage their own PKI infrastructure, supporting various protocols and integrations for issuing and renewing X.509 certificates.
Pros
- Easy to set up and use, with a user-friendly CLI interface
- Supports automated certificate management and renewal
- Integrates well with popular tools and services (e.g., Kubernetes, Docker)
- Provides robust security features, including hardware security module (HSM) support
Cons
- May require additional configuration for complex environments
- Documentation could be more comprehensive for advanced use cases
- Limited GUI options for those who prefer graphical interfaces
- Steeper learning curve for users unfamiliar with PKI concepts
Code Examples
- Initializing a new certificate authority:
step ca init --name "Example CA" --provisioner admin@example.com
- Issuing a new certificate:
step ca certificate "example.com" example.crt example.key
- Renewing a certificate:
step ca renew example.crt example.key
- Revoking a certificate:
step ca revoke --cert example.crt --key example.key
Getting Started
To get started with Smallstep Certificates:
-
Install the
step
CLI tool:brew install step
-
Initialize a new certificate authority:
step ca init
-
Start the CA server:
step-ca $(step path)/config/ca.json
-
Issue your first certificate:
step ca certificate "example.com" example.crt example.key
For more detailed instructions and advanced usage, refer to the official documentation at https://smallstep.com/docs/step-ca.
Competitor Comparisons
A tool for secrets management, encryption as a service, and privileged access management
Pros of Vault
- More comprehensive secret management solution, handling various types of secrets beyond just certificates
- Extensive ecosystem with integrations and plugins for many popular tools and platforms
- Advanced features like dynamic secrets, leasing, and revocation
Cons of Vault
- Steeper learning curve due to its broader feature set
- Higher resource requirements for deployment and maintenance
- May be overkill for organizations primarily focused on certificate management
Code Comparison
Vault (HCL configuration):
path "secret/data/myapp" {
capabilities = ["read", "list"]
}
Certificates (JSON configuration):
{
"root": "root_ca.crt",
"crt": "intermediate_ca.crt",
"key": "intermediate_ca.key"
}
Both projects use different configuration formats, with Vault typically using HCL and Certificates using JSON. Vault's configuration often focuses on access control and secret paths, while Certificates' configuration is more centered around certificate-specific details.
Vault offers a more extensive feature set for secret management, making it suitable for larger organizations with diverse security needs. Certificates, on the other hand, provides a more focused solution for certificate management, which may be preferable for smaller teams or those primarily concerned with PKI infrastructure.
CFSSL: Cloudflare's PKI and TLS toolkit
Pros of cfssl
- More mature project with longer development history
- Broader feature set, including OCSP and CRL support
- Extensive documentation and community support
Cons of cfssl
- Less active development in recent years
- More complex setup and configuration process
- Heavier resource usage for simple certificate management tasks
Code Comparison
cfssl:
cert, err := sign.SignerFromConfig(c)
if err != nil {
return err
}
certificates:
cert, err := ca.Sign(csr, provisioner, signOpts...)
if err != nil {
return err
}
Both projects provide Go libraries for certificate management, but certificates offers a more streamlined API for common operations. cfssl's API is more comprehensive but can be more complex to use.
certificates focuses on modern PKI practices and automation, while cfssl offers a wider range of traditional PKI features. certificates is more actively maintained and provides better integration with cloud-native environments.
For simple certificate management tasks, certificates may be easier to set up and use. However, for organizations requiring advanced PKI features or those already using Cloudflare's ecosystem, cfssl might be a better fit.
A simple zero-config tool to make locally trusted development certificates with any names you'd like.
Pros of mkcert
- Simpler and more lightweight, focused on local development
- Easier to use for beginners with minimal configuration
- Supports a wide range of operating systems and browsers
Cons of mkcert
- Limited to local development; not suitable for production environments
- Lacks advanced features like certificate revocation and OCSP stapling
- Does not support automated certificate renewal
Code Comparison
mkcert:
mkcert -install
mkcert example.com "*.example.com" localhost 127.0.0.1 ::1
certificates:
step ca init
step ca certificate example.com example.com.crt example.com.key
mkcert focuses on simplicity for local development, while certificates offers a more comprehensive solution for both development and production environments. mkcert generates certificates with a single command, whereas certificates requires initialization and separate certificate creation steps.
certificates provides a full-featured certificate authority with advanced capabilities, making it more suitable for complex deployments and production use. However, this comes at the cost of increased complexity and a steeper learning curve compared to mkcert.
Both tools serve different purposes: mkcert excels in quick local setups, while certificates offers a robust, scalable solution for various certificate management needs.
An ACME-based certificate authority, written in Go.
Pros of Boulder
- Widely adopted and battle-tested in production environments
- Supports a broader range of certificate types and use cases
- Extensive documentation and community support
Cons of Boulder
- More complex setup and configuration process
- Higher resource requirements for deployment
- Steeper learning curve for newcomers
Code Comparison
Boulder (Go):
func (ca *CertificateAuthorityImpl) IssuePrecertificate(ctx context.Context, issueReq *capb.IssueCertificateRequest) (*capb.IssuePrecertificateResponse, error) {
// Implementation details
}
Certificates (Go):
func (c *CA) Sign(req *api.SignRequest) (*api.SignResponse, error) {
// Implementation details
}
Both projects are written in Go and provide certificate issuance functionality. Boulder's codebase is more extensive and complex, reflecting its broader feature set. Certificates offers a more streamlined approach, focusing on simplicity and ease of use.
Boulder is the software powering Let's Encrypt, making it a robust choice for large-scale deployments. Certificates, on the other hand, is designed for easier integration into existing systems and workflows, making it more suitable for smaller-scale or custom certificate authority needs.
Tools to bootstrap CAs, certificate requests, and signed certificates.
Pros of certstrap
- Simpler and more lightweight tool, focused specifically on certificate creation and management
- Easier to use for basic certificate operations without extensive configuration
- Faster execution for simple certificate tasks due to its focused nature
Cons of certstrap
- Limited features compared to certificates, which offers a more comprehensive PKI solution
- Lacks advanced features like ACME support and HSM integration
- Not actively maintained, with fewer recent updates and contributions
Code comparison
certstrap:
cert, err := pkix.CreateCertificateAuthority(
cn, ou, org, country, province, locality, years,
key, passphrase, crtOut, keyOut,
)
certificates:
ca, err := ca.New(&ca.Options{
Name: "My Root CA",
Subject: subject,
Provisioner: provisioner,
WithoutClaim: true,
})
Both projects provide Go-based solutions for certificate management, but certificates offers a more extensive API with additional features and flexibility. certstrap focuses on simplicity and ease of use for basic certificate operations, while certificates provides a more comprehensive PKI solution with advanced features like ACME support and HSM integration.
easy-rsa - Simple shell based CA utility
Pros of easy-rsa
- Widely adopted and well-established in the OpenVPN ecosystem
- Simple and straightforward for basic PKI management
- Lightweight and easy to set up for small-scale deployments
Cons of easy-rsa
- Limited automation capabilities compared to more modern solutions
- Lacks advanced features like ACME support and HSM integration
- May require more manual intervention for complex certificate management tasks
Code Comparison
easy-rsa:
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server
certificates:
step ca init
step ca certificate "example.com" example.crt example.key
step ca renew example.crt example.key
The easy-rsa script uses a series of commands to initialize the PKI, build a CA, and generate certificates. In contrast, certificates (smallstep) offers a more streamlined approach with fewer commands and built-in support for certificate renewal.
certificates provides a more modern and feature-rich solution for PKI management, including ACME support, HSM integration, and advanced automation capabilities. It's designed for scalability and ease of use in complex environments. However, easy-rsa remains a solid choice for simpler setups and those already invested in the OpenVPN ecosystem.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
step-ca
step-ca
is an online certificate authority for secure, automated certificate management for DevOps.
It's the server counterpart to the step
CLI tool for working with certificates and keys.
Both projects are maintained by Smallstep Labs.
You can use step-ca
to:
- Issue HTTPS server and client certificates that work in browsers (RFC5280 and CA/Browser Forum compliance)
- Issue TLS certificates for DevOps: VMs, containers, APIs, database connections, Kubernetes pods...
- Issue SSH certificates:
- For people, in exchange for single sign-on identity tokens
- For hosts, in exchange for cloud instance identity documents
- Easily automate certificate management:
- It's an ACME server that supports all popular ACME challenge types
- It comes with a Go wrapper
- ... and there's a command-line client you can use in scripts!
Comparison with Smallstep's commercial product
step-ca
is optimized for a two-tier PKI serving common DevOps use cases.
As you design your PKI, if you need any of the following, consider our commerical CA:
- Multiple certificate authorities
- Active revocation (CRL, OSCP)
- Turnkey high-volume, high availability CA
- An API for seamless IaC management of your PKI
- Integrated support for SCEP & NDES, for migrating from legacy Active Directory Certificate Services deployments
- Device identity â cross-platform device inventory and attestation using Secure Enclave & TPM 2.0
- Highly automated PKI â managed certificate renewal, monitoring, TPM-based attested enrollment
- Seamless client deployments of EAP-TLS Wi-Fi, VPN, SSH, and browser certificates
- Jamf, Intune, or other MDM for root distribution and client enrollment
- Web Admin UI â history, issuance, and metrics
- ACME External Account Binding (EAB)
- Deep integration with an identity provider
- Fine-grained, role-based access control
- FIPS-compliant software
- HSM-bound private keys
See our full feature comparison for more.
You can start a free trial or set up a call with us to learn more.
Questions? Find us in Discussions or Join our Discord.
Website | Documentation | Installation | Contributor's Guide
Features
𦾠A fast, stable, flexible private CA
Setting up a public key infrastructure (PKI) is out of reach for many small teams. step-ca
makes it easier.
- Choose key types (RSA, ECDSA, EdDSA) and lifetimes to suit your needs
- Short-lived certificates with automated enrollment, renewal, and passive revocation
- Can operate as an online intermediate CA for an existing root CA
- Badger, BoltDB, Postgres, and MySQL database backends
âï¸ Many ways to automate
There are several ways to authorize a request with the CA and establish a chain of trust that suits your flow.
You can issue certificates in exchange for:
- ACME challenge responses from any ACMEv2 client
- OAuth OIDC single sign-on tokens, eg:
- Cloud instance identity documents, for VMs on AWS, GCP, and Azure
- Single-use, short-lived JWK tokens issued by your CD tool â Puppet, Chef, Ansible, Terraform, etc.
- A trusted X.509 certificate (X5C provisioner)
- A host certificate from your Nebula network
- A SCEP challenge (SCEP provisioner)
- An SSH host certificates needing renewal (the SSHPOP provisioner)
- Learn more in our provisioner documentation
ð Your own private ACME server
ACME is the protocol used by Let's Encrypt to automate the issuance of HTTPS certificates. It's super easy to issue certificates to any ACMEv2 (RFC8555) client.
-
Supports the most popular ACME challenge types:
- For
http-01
, place a token at a well-known URL to prove that you control the web server - For
dns-01
, add aTXT
record to prove that you control the DNS record set - For
tls-alpn-01
, respond to the challenge at the TLS layer (as Caddy does) to prove that you control the web server
- For
-
Works with any ACME client. We've written examples for:
-
Get certificates programmatically using ACME, using these libraries:
lego
for Golang (example usage)- certbot's
acme
module for Python (example usage) acme-client
for Node.js (example usage)
-
Our own
step
CLI tool is also an ACME client! -
See our ACME tutorial for more
ð©ð½âð» An online SSH Certificate Authority
- Delegate SSH authentication to
step-ca
by using SSH certificates instead of public keys andauthorized_keys
files - For user certificates, connect SSH to your single sign-on provider, to improve security with short-lived certificates and MFA (or other security policies) via any OAuth OIDC provider.
- For host certificates, improve security, eliminate TOFU warnings, and set up automated host certificate renewal.
ð¤ A general purpose PKI tool, via step
CLI integration
- Generate key pairs where they're needed so private keys are never transmitted across the network
- Authenticate and obtain a certificate using any provisioner supported by
step-ca
- Securely distribute root certificates and bootstrap PKI relying parties
- Renew and revoke certificates issued by
step-ca
- Install root certificates on your machine and browsers, so your CA is trusted
- Inspect and lint certificates
Installation
See our installation docs here.
Documentation
- Official documentation is on smallstep.com
- The
step
command reference is available viastep help
, on smallstep.com, or by runningstep help --http=:8080
from the command line and visiting http://localhost:8080.
Feedback?
- Tell us what you like and don't like about managing your PKI - we're eager to help solve problems in this space. Join our Discord or GitHub Discussions
- Tell us about a feature you'd like to see! Request a Feature
Top Related Projects
A tool for secrets management, encryption as a service, and privileged access management
CFSSL: Cloudflare's PKI and TLS toolkit
A simple zero-config tool to make locally trusted development certificates with any names you'd like.
An ACME-based certificate authority, written in Go.
Tools to bootstrap CAs, certificate requests, and signed certificates.
easy-rsa - Simple shell based CA utility
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot