date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
Ubuntu 安装并运行 step-ca
- 参考资料
创建 postgresql step-ca 数据库
假设在 192.168.1.100 上创建 stepdb 数据库
- 管理客户端认证,允许对应局域网地址通过 step 用户访问 stepdb
PSQL_PATH=$(psql -d postgres -c "SHOW config_file;" | awk 'NR==3{print $1}' | xargs dirname)- 查找目录位置
vim $PSQL_PATH/pg_hba.confpg_ctl reload -D $PSQL_PATH- 重新加载配置
- 以
postgres身份进入 shell,创建用户和数据库 psql postgres
- step-ca 服务器只需安装
postgresql客户端 apt install postgresql-client
step-ca 服务器设置 postgresql 环境变量
- 如果需要自动加载,编辑
/etc/environment
- 手动加载
/etc/environment for env in $( cat /etc/environment ); do export $(echo $env | sed -e 's/"//g'); done
下载并安装 step-cli(以 amd64 为例)
wget https://dl.smallstep.com/cli/docs-ca-install/latest/step-cli_amd64.deb
dpkg -i step-cli_amd64.deb
下载并安装 step-ca
wget https://dl.smallstep.com/certificates/docs-ca-install/latest/step-ca_amd64.deb
dpkg -i step-ca_amd64.deb
CA 初始化(类似于 Docker 创建 step-ca)
- 默认的超级管理员账户为
step,首个 provisioner 在创建过程中自行命名 - CA 私钥密码后续需要使用,请牢记
- 创建 CA 配置文件
step ca init --acme --remote-management- 如果需要 ACME 传递选项
-acme - 如果需要使用 SSH 证书传递选项
-ssh - 如果需要启用远程配置传递选项
-remote-management
(可选)通过 expect 脚本创建 CA 配置文件
vim step-cli-init.exp- 自行更改响应内容
expect step-cli-init.exp
- 修改配置文件使用 step-ca 数据库作为存储
vim $(step path)/config/ca.json- 如果前面没有设置 postgresql 环境变量可以在这里显示提供
dataSource和database键值对 - 如果已设置可以删除
- CA 加载配置并启动
step-ca $(step path)/config/ca.json- 需要提供之前的密码
配置 step-ca 为 deamon 服务
- 添加用户
step useradd --user-group --system --home /etc/step-ca --shell /bin/false step- 如果要设置为 443 之类的低位端口,需要添加对应能力
setcap CAP_NET_BIND_SERVICE=+eip $(which step-ca)
移动 step-ca 配置文件到 /etc/step-ca
mkdir -p /etc/step-ca
mv $(step path)/* /etc/step-ca
chown -R step:step /etc/step-ca- 修改权限
添加 unit 服务文件
vim /etc/systemd/system/step-ca.service
- 部分配置项解释
- AmbientCapabilities, CapabilityBoundingSet, SecureBits, NoNewPrivileges: 这些选项控制进程的能力和权限
- AmbientCapabilities 允许进程接收环境能力
- CAP_NET_BIND_SERVICE 能力允许进程绑定到小于 1024 的端口
- CapabilityBoundingSet 限制了进程可以拥有的能力集
- SecureBits 允许服务在切换到 step 用户后仍保持其能力
- NoNewPrivileges 确保进程不会在未来进行权限提升
- ProtectSystem, ProtectHome, RestrictNamespaces, RestrictAddressFamilies, PrivateTmp, PrivateDevices, ProtectClock, ProtectControlGroups, ProtectKernelTunables, ProtectKernelLogs, ProtectKernelModules, LockPersonality, RestrictSUIDSGID, RemoveIPC: 安全相关的选项,旨在限制服务对系统的访问,增强安全性
- ProtectSystem 和 ProtectHome 通过为进程分配一个只读文件系统命名空间来配置沙盒环境
- ProtectNamespaces 防止进程创建内核命名空间
- RestrictAddressFamilies 阻止服务分配如 AF_PACKET 这样的特殊套接字
- PrivateTmp 给服务提供了一个独立的 /tmp 目录
- PrivateDevices 向服务展示了一个非常有限的 /dev 设备列表
- Protect* (一系列保护选项)限制对系统资源的访问
- LockPersonality 锁定了进程的执行域
- RestrictSUIDSGID 限制了 setuid/setgid 文件的创建
- RemoveIPC 在服务停止时移除该服务创建的所有 IPC 对象
- RestrictRealtime 限制实时调度访问
- SystemCallFilter: 允许的服务可以使用的系统调用白名单,这里使用了
@system-service标签,表示允许常规系统服务所需的系统调用 - SystemCallArchitectures: 限制服务只能调用原生架构的系统调用
- MemoryDenyWriteExecute: 防止创建可写和可执行的内存区域,增加安全性
- ReadWriteDirectories: 指定哪些目录是可以读写的,这里是
/etc/step-ca/db
- 添加 password 文件
-password-file password.txt传递私钥密码 echo "mypassword" > /etc/step-ca/password.txt
启动 step-ca 服务
- 先修改
ca.json路径 sed -i 's|/root/.step|/etc/step-ca|g' /etc/step-ca/ca.json- root
sed -i 's|/home/$(whoami)/.step|/etc/step-ca|g' /etc/step-ca/ca.json- non-root
systemctl daemon-reload
systemctl status step-ca
systemctl enable --now step-ca- 启动
step-ca
journalctl --follow --unit=step-ca
配置高可用 step-ca
- 参考资料
- 注意,由于续签证书需要使用 mTLS 进行身份认证,要求客户端证书存在于与 step-ca 服务器的 TLS 连接中,因此提供代理时需要在 TCP 层提供而不终止 TLS
- 按照上面方法配置完首台 step-ca 服务器后,在后续机器上共享该 ca.json 配置文件
安装并配置 ansible 通过 ssh 同步
- 假设已经配置好了与另外几台服务器的 ssh 连接
- 假设其他两台主机为 192.168.1.2 和 192.168.1.3
apt update && apt install ansible
配置 ansible
mkdir -p /etc/ansible
vim /etc/ansible/hosts
vim /etc/ansible/ansible.cfg
- 测试是否可以联通
ansible all --list-hostsansible all -m ping
使用 ansible 同步 step-ca 配置
- 以配置 step-ca 为 deamon 服务为基准进行
- 创建 playbook
vim step-ca-init.yaml
- 执行 playbook
ansible-playbook step-ca-init.yaml
部署两台 alpine 服务器使用 haproxy 和 keepalived 实现高可用 step-ca
- 网络环境
- 假设两台 alpine 内网 lan 口地址分别为
192.168.1.101和192.168.1.102,在虚拟地址192.168.1.103上提供负载均衡 - 假设三台 step-ca 内网 lan 口地址分别为
192.168.1.51,192.168.1.52,192.168.1.53
apk add haproxy keepalived
配置 keepalived
mkdir -p /etc/keepalived
touch /etc/keepalived/keepalived.conf
- 全局定义
global_defs vim /etc/keepalived/keepalived.confrouter_id当前 keepalived 实例路由标识,可以改成主机名- VRRP 协议优化
vrrp_skip_check_adv_addr跳过对 VRRP 通告报文源地址的检查vrrp_strict启用严格模式,强制遵循 VRRP 协议规范vrrp_garp_interval 0设置免费 ARP(Gratuitous ARP)报文发送间隔- 默认值为
0,表示仅在切换为主节点时发送一次 GARP 消息 vrrp_gna_interval 0设置 IPv6 邻居通告(Gratuitous NA)间隔- 默认值为
0,表示仅在切换为主节点时发送一次 GNA 消息 - 剩余主要涉及邮件通知和 SMTP 服务设置,可以忽略
- 旁路由配置样例
vim /etc/keepalived/keepalived.conf- 网络组
haproxy-vip绑定eth0接口 virtual_router_id 51局域网内唯一虚拟路由ID,不同接口可以重复state <STATE>区分主备# MASTER on lb-1, BACKUP on lb-2priority <PRIORITY>定义优先级# 200 on lb-1, 100 on lb-2virtual_ipaddress对局域网设备展示的虚拟 IP 地址track_script使用检测脚本chk_haproxy- 检测脚本
chk_haproxy,用以实现某个检测功能 interval 2,timeout 1每间隔 2 秒检测 haproxy 进程,超时 1 s 算失败rise 1连续成功 1 次视为健康fall 2连续成功 2 次视为不健康- 失败时根据
weight -20调整优先级数值使其掉至备份
haproxy 添加对应前后端
- 参数解释
mode tcp支持传输层(第4层)流量透传- SSL 由对应服务器自行处理
balance first按服务器在配置文件中定义的顺序选择第一个可用的服务器- 其他常用负载均衡算法
roundrobin:轮询分发,适合无状态服务leastconn:选择连接数最少的服务器,适合长连接场景source:基于客户端 IP 哈希,适合需要会话保持的场景inter 10s:每 10 秒执行一次健康检查downinter 5s:当服务器标记为 DOWN 后,每 5 秒重试检查option tcp-check,server ca-1 192.168.1.51:443 check- 对
ca-1服务器执行健康检查,方式为tcp-check
vim /etc/haproxy/haproxy.cfg
- 设置开机自动启动
rc-update add haproxy defaultrc-update add keepalived default
- 启动后在虚拟地址
192.168.1.103可以为三台 step-ca 提供健康检测和负载均衡 service haproxy startservice keepalived start
- Author:白鸟3
- URL:https://blog.kun2peng.top/internet/stepca_ha
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
