Smallstep Certificates 介绍与选型指南
Smallstep Certificates(step-ca)私有 CA 与 ACME 服务器定位、X.509+SSH 双 CA 架构解析,及与 Vault PKI、OpenBao、easy-rsa、cfssl 的量化选型对比
Smallstep Certificates 介绍与选型指南
目标:说清 Smallstep Certificates(step-ca)作为私有证书颁发机构(X.509 + SSH CA)与 ACME 服务器的定位、架构与能力边界,并与 Vault PKI、OpenBao、easy-rsa、cfssl 做量化对比,帮助读者在十分钟内完成"是否选它"的判断。本文所有外部信息均溯源至官方文档与公开评测,查询日期统一为 2026-10-31。
一、环境信息
- 服务器操作系统:Linux(amd64)
- Smallstep CA(step-ca)版本:0.30.2(Smallstep CA/0.30.2 linux/amd64,Release Date: 2026-03-23 00:18 UTC,已在本地环境实证)
- Smallstep CLI(step)版本:0.30.2(Smallstep CLI/0.30.2 linux/amd64,Release Date: 2026-03-22 23:21 UTC,已在本地环境实证)
- CA 服务地址:
https://ca.stepca.internal:9000(服务监听 9000 端口,服务器对外暴露 8128 端口) - PKI 数据目录(STEPPATH):
/home/step(含certs/、secrets/、config/、db/、templates/) - 根证书指纹:
2a4d06b866972e6227494089dc788d6706f70f10ed102c7261607b860c45ff5e - 本文对比数据来源与查询日期:Smallstep 官方文档站 smallstep.com/docs/step-ca、GitHub 仓库 smallstep/certificates、GStars.dev 仓库洞察、HashiCorp Developer(Vault PKI)、linuxvox.com CA 工具评测、pistack.xyz 与 khimananda.com 2026 年自托管 PKI 评测,查询日期均为 2026-10-31。
💡 说明:本文为介绍与选型篇,所有结论以官方文档与公开评测为据,不涉及本地性能实测;部署、配置与 CLI 命令的逐条实测见本专栏后续篇章。
二、软件概述
2.1 定位:私有 CA 与 ACME 服务器
Smallstep Certificates(项目名 step-ca,主仓库 smallstep/certificates)是 Smallstep 公司开源的私有证书颁发机构(CA)与 ACME 服务器,官方对其的一句话定义是:"A private certificate authority (X.509 & SSH) & ACME server for secure automated certificate management, so you can use TLS everywhere & SSO for SSH"(来源:GitHub smallstep/certificates README,查询日期 2026-10-31)。
它解决的核心痛点是:内网服务(API、数据库、虚拟机、内部站点)无法从公网 CA(如 Let's Encrypt)获得证书——公网 CA 不能为私有 IP 与内部域名签发证书(来源:khimananda.com《Run an Internal Certificate Authority with step-ca》,查询日期 2026-10-31)。step-ca 让企业自建一套与公网 CA 同等合规(RFC 5280、CA/Browser Forum)的签发体系,并内置 ACME(RFC 8555)协议支持,使 certbot、Caddy、cert-manager 等标准 ACME 客户端可以零改造接入。
step-ca 由两个配套二进制组成:
- step-ca:CA 服务端进程,暴露 JSON/HTTPS API,负责证书的签发、续期、吊销(来源:Smallstep 官方设计文档 prof.infra.smallstep.com《The Design & Architecture of Smallstep》,查询日期 2026-10-31);
- step:客户端 CLI(Smallstep CLI),面向开发者与运维,负责
step ca certificate签发、step ca renew续期、step certificate inspect检查等日常操作。
💡 技术拓展:私有 CA 领域的可选路线大致分三类——专用 CA 软件(step-ca、cfssl、easy-rsa):只做证书签发,部署轻;秘密管理平台内嵌 PKI 引擎(Vault PKI、OpenBao):证书只是众多秘密类型之一,适合已部署该平台的企业;反向代理/Ingress 内建 CA(Caddy 内部 CA、Kubernetes cert-manager 签发对象):面向特定场景。本文第七章将逐项量化对比。
2.2 开源许可与版本节奏
| 维度 | 事实 | 来源(查询日期 2026-10-31) |
|---|---|---|
| 开源许可 | Apache-2.0 | GStars.dev 仓库洞察、pkg.go.dev v0.30.0-rc6 页面 |
| 仓库创建时间 | 2018 年 11 月 | GStars.dev |
| 最近提交 | 2026 年 10 月(持续活跃) | GStars.dev |
| GitHub Stars | 约 8k+ | GStars.dev(Updated 10/10/2026) |
| 最新版本 | 0.30.2(2026-03-22/23 发布) | 本地实证 step-ca version、step version |
| 官方文档 | smallstep.com/docs/step-ca(含配置、provisioner、生产考量全套文档) | 官方文档站 |
| 商业支持 | Smallstep 公司提供商业版(托管 CA、SSO 集成等) | smallstep.com/open-source |
版本号采用 0.x 序列,从 2018 年开源至今保持高频迭代;0.30.2 为 2026 年 3 月发布的稳定版。官方另设 Discord 社区与 GitHub Discussions 作为反馈渠道(来源:step ca init 完成后的官方输出信息,本地实证)。
⚠️ 注意:step-ca 开源版无 Web 管理界面,全部操作通过 CLI 与 JSON/HTTPS API 完成;若强依赖图形界面管控,需评估 Smallstep 商业版或改用 Vault/OpenBao。
三、核心架构
3.1 PKI 层级
step-ca 初始化(step ca init)即生成标准两级 PKI:
Root CA(根证书,离线保存私钥)
└── Intermediate CA(中间证书,在线签发私钥)
├── X.509 叶子证书(服务器/客户端)
└── SSH 用户证书 / 主机证书
根证书私钥建议离线封存,日常签发由中间 CA 完成,这是行业标准的密钥隔离实践(来源:Smallstep 官方文档《step-ca Certificate Authority Overview》,查询日期 2026-10-31)。中间证书私钥由 CA 密码(provisioner password)加密存储,服务进程通过 --password-file 注入解锁。
3.2 服务端与客户端分工
step-ca 的架构是"瘦客户端 + API 服务端":
- CA 服务端只暴露少数 HTTPS 端点(
/health、/sign、/renew、/revoke、ACME 目录等),无状态可水平扩展(会话状态依赖本地 badger 数据库,见 3.4); - 客户端(step CLI)在本地生成密钥对,私钥永不离开客户端机器,只把 CSR(证书签名请求)提交给 CA——这是与 easy-rsa"集中生成密钥再分发"模式的本质区别,显著降低私钥泄露面(来源:官方设计文档 prof.infra.smallstep.com,查询日期 2026-10-31)。
3.3 Provisioner 认证体系
Provisioner 是 step-ca 的签发策略抽象:谁有资格签、按什么规则签。开源版内置多种 provisioner 类型(来源:官方文档 smallstep.com/docs/step-ca,查询日期 2026-10-31):
| Provisioner 类型 | 用途 | 典型场景 |
|---|---|---|
| JWK | 初始管理员,密码学证明 | 运维手工签发、初始化 |
| ACME | RFC 8555 自动签发 | certbot/Caddy/cert-manager 自动化 |
| OIDC | 单点登录身份令牌换取 SSH 用户证书 | 企业 SSO 接 SSH |
| X5C | 用已有 X.509 证书互认签发 | 服务间信任链延伸 |
| SCEP | 传统网络设备(路由器/交换机)接入 | MDM、网络设备纳管 |
| GCP / AWS | 云实例身份文档证明 | 云上工作负载自动身份 |
| K8s SA | Kubernetes ServiceAccount 令牌 | Pod 内自动签发 |
| Nebula | Nebula overlay 网络证书 | 零信任网络 |
| Webhook | 签发前调用外部 HTTP 服务做策略裁决 | 自定义审批/风控 |
3.4 存储与运行时
- 证书状态数据库默认使用 badger(嵌入式 KV 存储,目录
db/),记录证书序列号、吊销状态等,供/revoke与 OCSP 类查询使用; - 配置全部集中在
ca.json单文件(根/中间证书路径、监听地址、DNS 名称、provisioners、TLS 套件等); - 日志支持 text/JSON 格式,直接对接 systemd journal 或日志采集器(来源:官方配置文档 smallstep.com/docs/step-ca/configuration,查询日期 2026-10-31)。
四、功能特性
4.1 X.509 证书签发
- 签发 HTTPS 服务器与客户端证书,浏览器可直接信任(RFC 5280 与 CA/Browser Forum 合规)(来源:GitHub README,查询日期 2026-10-31);
- 面向 DevOps 场景:虚拟机、容器化服务、API、数据库连接、Kubernetes Pod 均可纳入;
- 支持 mTLS 双向认证、文档签名等 X.509 广义用途(来源:官方文档《step-ca Certificate Authority Overview》,查询日期 2026-10-31);
- 证书有效期可通过 provisioner
claims精细控制,官方推荐短有效期(如 24 小时)配合自动续期实现"易失性证书"安全模型。
4.2 SSH 证书:双 CA 能力
step-ca 同时内置 X.509 CA 与 SSH CA,这是它与 easy-rsa、cfssl 的关键差异:
- SSH 用户证书:用户以 OIDC 单点登录身份令牌换取短期 SSH 证书,实现"SSO for SSH",替代 static authorized_keys 分发(来源:GitHub README,查询日期 2026-10-31);
- SSH 主机证书:主机以云实例身份文档(如 AWS EC2 identity document)换取主机证书,消除首次连接的 TOFU 信任问题;
- OpenSSH 原生支持证书认证(
TrustedUserCAKeys、HostCertificate),客户端无需安装额外软件。
4.3 ACME 自动化
- 内置 ACME Server(RFC 8555 一等公民支持),http-01/dns-01 等挑战方式可用(来源:官方文档与 khimananda.com 对比表,查询日期 2026-10-31);
- 任何标准 ACME 客户端(certbot、Caddy、Traefik、Kubernetes cert-manager 的 ACME issuer)把 directory URL 指向 step-ca 即可工作;
- 与 Let's Encrypt 的 ACME 流程完全一致,仅根信任不同——这是"先在自建 CA 上演练、再切公网 CA"的最佳载体。
4.4 生命周期自动化
step ca renew支持在证书到期前自动续期,客户端可常驻续期守护(--daemon模式);step ca revoke在线吊销,状态落库;- 证书内容可通过 Go template 定制(SAN、KeyUsage、扩展项);
- 支持 CRL(证书吊销列表)发布——生产考量文档给出了静态 CRL 文件配合对象存储/CDN 分发的方案(来源:官方生产考量文档 prof.infra.smallstep.com《Production considerations when running a certificate authority server》,查询日期 2026-10-31)。
五、快速开始(最小可用示例)
以下流程摘自官方文档(smallstep.com/docs/step-ca,查询日期 2026-10-31),本地逐步实测见本专栏《step-ca 0.30.2 Docker Compose 部署指南》:
# 1. 安装 step CLI(Linux amd64 示例)
wget https://dl.smallstep.com/cli/docs-ca-install/latest/linux-amd64/step.tar.gz
tar -zxvf step.tar.gz && mv step /usr/local/bin/
# 2. 初始化 PKI(交互式,生成 root/intermediate/ca.json)
step ca init
# 3. 启动 CA 服务
step-ca $(step path)/config/ca.json
# 4. 客户端签发第一张证书(JWK provisioner,需输入 CA 密码)
step ca certificate foo.internal foo.crt foo.key --ca-url https://ca.internal:9000 --root root_ca.crt
# 5. 检查健康与证书内容
step ca health --ca-url https://ca.internal:9000 --root root_ca.crt
step certificate inspect foo.crt
💡 说明:
step ca init是交互式向导,依次询问部署类型(Standalone/Linking)、PKI 名称、客户端可达的 DNS 名称、监听地址与首个 provisioner 名称;完整交互实录与逐行回显见本专栏部署篇。
六、适用场景与限制
6.1 适用场景
- 内网 TLS everywhere:内部 API、数据库连接、管理后台全部上 mTLS,证书由 ACME 客户端自动续期;
- SSH 集中认证:以 OIDC SSO 换发短期 SSH 用户证书,替代分散的 authorized_keys,人员离职即失效;
- Kubernetes 内部签发:cert-manager ACME issuer 对接 step-ca,为集群内 workload 签发证书;
- 网络设备纳管:SCEP provisioner 承接路由器/交换机等不支持 ACME 的传统设备;
- 公网 CA 前置演练:ACME 流程与 Let's Encrypt 一致,可先在私有环境验证自动化管线再切换公网。
6.2 限制
- 无 Web UI:开源版纯 CLI/API 操作,可视化需商业版;
- 高可用需自行设计:单进程 + 本地 badger 存储,多副本需共享数据目录或前置负载均衡,官方生产考量文档建议将根 CA 离线、中间 CA 在线并做好备份(来源:官方生产考量文档,查询日期 2026-10-31);
- 不发公网可信证书:根证书必须分发并信任到每台客户端,这是所有私有 CA 的共同约束;
- 版本 0.x:主版本未到 1.0,升级需关注 Release Notes 中的配置变更。
七、同类选型对比
7.1 对比总表
| 维度 | step-ca 0.30.2 | Vault PKI(HashiCorp) | OpenBao | easy-rsa 3.x | cfssl |
|---|---|---|---|---|---|
| 定位 | 专用私有 CA + ACME 服务器 | 秘密管理平台中的 PKI 引擎 | Vault 开源分支(Linux Foundation) | OpenVPN 配套脚本式 CA | CF 的 PKI 工具库 + CLI |
| 许可 | Apache-2.0 | BUSL-1.1(源码可用,非 OSI 开源) | MPL-2.0 | GPL-2.0(OpenVPN 项目) | BSD-2 |
| 语言 | Go | Go | Go | Bash/Shell(封装 OpenSSL) | Go |
| ACME 支持 | 内置一等公民 | 原生不支持(需社区插件/方案) | 原生不支持(同 Vault 机制) | 无 | 无成熟支持 |
| SSH CA | 内置(用户+主机证书) | SSH secrets engine 支持 | SSH secrets engine 支持 | 无 | 无 |
| 自动续期 | step CLI 原生(daemon 模式) | Vault Agent 模板机制 | 同 Vault Agent 机制 | 无 | 无 |
| 部署复杂度 | 单二进制,step ca init 即用 | 服务端+存储+unseal 流程 | 同 Vault | 极低(脚本包) | 单二进制但需手工编排 |
| Web UI | 无(商业版提供) | 有 | 有 | 无 | 无 |
| 证书 API | JSON/HTTPS CA API + ACME | 全功能 REST API | 全功能 REST API | 无 | REST API |
| SSO/身份集成 | OIDC provisioner 原生 | 生态完善(LDAP/JWT/OIDC) | 生态完善 | 无 | 无 |
| 社区活跃度 | 约 8k+ stars,2026-10 仍在提交(GStars.dev,2026-10-31 查询) | 高但许可受限 | 快速增长的开源分支 | 中等(跟随 OpenVPN) | 维护放缓 |
来源:各项目官方文档与 GStars.dev、linuxvox.com《Top Certificate Authority Software for Linux》、khimananda.com 对比表、pistack.xyz《Self-Hosted PKI Guide 2026》,查询日期 2026-10-31;许可信息以各仓库 LICENSE 为准。
7.2 逐项分析
step-ca vs Vault PKI / OpenBao:Vault 的 PKI 引擎强在"证书只是平台能力之一"——它同时管数据库凭据、云密钥、加密即服务,且 RBAC/审计/策略体系成熟;但 Vault 自 1.12 起采用 BUSL-1.1 许可,产品化使用需商业授权评估,且部署运维重(unseal、存储后端、集群)。OpenBao 是 Vault 的 MPL-2.0 开源分支,能力同源,适合规避 BUSL 风险的团队。step-ca 则是"把一件事做到极致":ACME 原生、SSH CA 原生、单二进制、step ca init 五分钟可用,部署复杂度与学习曲线显著低于 Vault/OpenBao(对比依据:khimananda.com 2026 指南对比表、HashiCorp Developer PKI 教程,查询日期 2026-10-31;OpenBao 详情见站内《OpenBao 介绍与选型指南》)。
step-ca vs easy-rsa:easy-rsa 是 OpenVPN 生态的经典 CA 脚本包,胜在极简与零依赖;但它没有服务进程、没有 API、没有自动续期,密钥默认在"CA 机"上集中生成后分发,长期运营大型 PKI 会非常吃力。step-ca 以客户端本地生成密钥 + API 签发的模式解决了这两点(对比依据:linuxvox.com CA 工具评测、官方设计文档,查询日期 2026-10-31;easy-rsa 详情见站内《easy-rsa 3.2.7 介绍与选型指南》)。
step-ca vs cfssl:cfssl(Cloudflare)是 Go 生态的 PKI 工具库与 CLI,适合"把签发能力嵌进自家平台"的二次开发场景;但社区维护放缓、无 ACME、无 SSH CA,自动化需自行封装。step-ca 开箱即得全部自动化能力(对比依据:Vault 官方教程对 cfssl 的定位描述、linuxvox.com 评测,查询日期 2026-10-31)。
7.3 选型建议
- 需要 ACME 自动签发、SSH 证书、轻量部署 → 首选 step-ca;
- 已部署 Vault/OpenBao 且只需少量内部证书 → 直接用其 PKI 引擎,不引入新组件;
- 仅 OpenVPN 场景的几张证书 → easy-rsa 足矣;
- 要把签发能力嵌入自研平台做二次开发 → cfssl 或直接复用 step-ca 的 API;
- pistack.xyz 2026 年自托管指南的评价可作佐证:"Choose Step CA if: You run internal services that need TLS, want SSH certificates, require short-lived certificates, or need enterprise-grade PKI with SCEP and webhook support. It is the gold standard for self-hosted certificate authorities."(查询日期 2026-10-31)。
八、参考链接
- Smallstep 官方文档:step-ca Certificate Authority Overview — https://smallstep.com/docs/step-ca/ (查询日期 2026-10-31)
- Smallstep 开源项目主页 — https://smallstep.com/open-source/ (查询日期 2026-10-31)
- GitHub 仓库 smallstep/certificates — https://github.com/smallstep/certificates (查询日期 2026-10-31)
- Smallstep 设计与架构文档 — https://prof.infra.smallstep.com/docs/design-document (查询日期 2026-10-31)
- Smallstep 生产环境考量文档 — https://prof.infra.smallstep.com/docs/step-ca/certificate-authority-server-production (查询日期 2026-10-31)
- 官方配置文档 — https://smallstep.com/docs/step-ca/configuration/ (查询日期 2026-10-31)
- GStars.dev 仓库活跃度洞察 — https://www.gstars.dev/repo/smallstep/certificates (查询日期 2026-10-31)
- HashiCorp Vault PKI 引擎教程 — https://developer.hashicorp.com/vault/tutorials/pki/pki-engine (查询日期 2026-10-31)
- Vault PKI considerations 官方文档 — https://developer.hashicorp.com/vault/docs/secrets/pki/considerations (查询日期 2026-10-31)
- linuxvox.com《Top Certificate Authority Software for Linux》 — https://linuxvox.com/blog/what-certificate-authority-software-is-available/ (查询日期 2026-10-31)
- pistack.xyz《Complete Guide to Self-Hosted Certificate Management and PKI 2026》 — https://www.pistack.xyz/posts/self-hosted-pki-certificate-management-step-ca-caddy-nginx-proxy-manager-2026/ (查询日期 2026-10-31)
- khimananda.com《Run an Internal Certificate Authority with step-ca (2026 Guide)》 — https://khimananda.com/blog/run-an-internal-certificate-authority-with-step-ca (查询日期 2026-10-31)
- 站内《OpenBao 介绍与选型指南》 — https://www.quzuo.net/document/DzUGmNoV76cy
- 站内《easy-rsa 3.2.7 介绍与选型指南》 — https://www.quzuo.net/document/IPHRnAw0xBaZ