
step-ca 是 Smallstep 推出的开源证书颁发机构(CA),通过 step CLI 实现自动化证书生命周期管理。证书生成的核心是客户端-服务器模型:CA 服务器处理签名,客户端生成密钥并请求证书。整个过程强调零信任、短寿命证书(默认24h)和provisioner 授权(如 JWK、OIDC、ACME)。
前提条件:
安装 step CLI(支持 macOS/Linux/Windows)。 网络连通(客户端到 CA 服务器)。以下是从零到生成第一张证书的6 个核心步骤,每个步骤附带命令、作用、原理及示例。
text
step ca init
--name "My CA"
--dns localhost
--address :443
--provisioner admin
作用:创建根 CA、中间 CA、私钥、配置文件(config/ca.json),建立 PKI 信任链。
原理:
| 组件 | 生成方式 | 作用 |
|---|---|---|
| 根 CA 证书/私钥 | 自签名(EC P-256,默认) | 信任锚点,不可变,离线存储。 |
| 中间 CA 证书/私钥 | 根 CA 签名 | 实际签名端实体证书,易轮换保护根安全。 |
| JWK Provisioner | 随机密钥对 | 授权客户端请求证书,支持 token 认证。 |
| CA 指纹 | SHA256 哈希 | 客户端验证 CA 身份,防 MITM 攻击。 |
text
step-ca $(step path)/config/ca.json
作用:运行 HTTPS 服务器(默认 :443),暴露 /sign 等 API 端点。
原理:RA/CA 分离架构,服务器验证 provisioner、策略(TTL、SAN),签名 CSR。支持 HA 集群、ACME 协议。日志显示指纹,便于客户端引导。
示例:访问 https://localhost/sign 测试(需 --insecure)。
text
step ca bootstrap
--ca-url https://ca.example.com
--fingerprint <CA-FP>
作用:配置客户端 ~/.step/,信任根 CA,准备后续操作。
原理:指纹验证确保 CA 未被篡改。下载根证书到本地,启用 step 与 CA 通信。零配置信任:无需手动导入 cert。
获取指纹:从服务器日志 Server is listening on :443, fingerprint: <FP>。
text
step ca token myapp.example.com
作用:为特定 subject 生成一次性 JWT token,用于认证证书请求。
原理:JWK Provisioner 签名 token,包含 claims(如 subject、SAN、TTL)。CA 验证 token 有效性、过期、加密强度。防重放:单次使用,支持 OIDC 等高级 auth。
可选:直接用 --san 等 flags 无需 token(默认 provisioner)。
text
TOKEN=$(step ca token myapp.example.com)
step ca certificate
myapp.example.com
myapp.crt
myapp.key
--token $TOKEN
--san myapp.example.com
--not-after 24h
作用:一键输出证书+私钥(PEM 格式)。
原理(内部 3 子步):
私钥生成:EC/RSA/Ed25519(--kty),默认加密(--password-file)。
CSR 构建:嵌入 subject、SAN、扩展(--set email=foo@bar.com)。
提交签名:POST CSR 到 CA /sign,CA 验证 token → 签名 → 返回 cert。
高级:ACME(--acme)、离线(--offline:本地签名,无网络)。