step-ca 证书生成完整步骤指南

step-ca 是 Smallstep 推出的开源证书颁发机构(CA),通过 step CLI 实现自动化证书生命周期管理。证书生成的核心是客户端-服务器模型:CA 服务器处理签名,客户端生成密钥并请求证书。整个过程强调零信任、短寿命证书(默认24h)和provisioner 授权(如 JWK、OIDC、ACME)。
前提条件:
- 安装 step CLI(支持 macOS/Linux/Windows)。
- 网络连通(客户端到 CA 服务器)。
以下是从零到生成第一张证书的6 个核心步骤,每个步骤附带命令、作用、原理及示例。
1. 初始化 CA(step ca init)
- 命令:
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 攻击。 - 输出:~/.step/ca/ 目录,包含所有文件。安全提示:备份私钥,设置强密码。
2. 启动 CA 服务器(step-ca)
- 命令:
text
step-ca $(step path)/config/ca.json - 作用:运行 HTTPS 服务器(默认 :443),暴露 /sign 等 API 端点。
- 原理:RA/CA 分离架构,服务器验证 provisioner、策略(TTL、SAN),签名 CSR。支持 HA 集群、ACME 协议。日志显示指纹,便于客户端引导。
- 示例:访问 https://localhost/sign 测试(需 --insecure)。
3. 客户端引导(step ca bootstrap)
- 命令:
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>。
4. 生成授权 Token(step ca token)
- 命令:
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)。
5. 生成私钥 & CSR(step ca certificate 内建)
- 命令(核心):
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:本地签名,无网络)。
