TLS 证书管理
Runixo 所有通信都通过 TLS 加密。本文介绍证书的生成、管理和自定义。
自动证书
Agent 首次启动时自动生成自签名 TLS 证书:
- 有效期:10 年
- 密钥算法:ECDSA P-256
- SAN:自动包含服务器所有网络接口 IP +
localhost - 存储位置:
- 证书:
/etc/runixo/cert.pem - 私钥:
/etc/runixo/key.pem(权限0600)
- 证书:
安全说明
自签名证书的私钥权限设置为 0600(仅 owner 可读),证书不包含 CA 标志(IsCA: false),防止被用于签发其他证书。
证书指纹
查看当前证书的 SHA256 指纹:
bash
sudo runixo info
# 输出包含:
# TLS Fingerprint: SHA256:a1b2c3d4...或手动查看:
bash
openssl x509 -in /etc/runixo/cert.pem -noout -fingerprint -sha256客户端首次连接时会显示证书指纹,请与服务器端核对确认。
使用自定义证书
如果你有自己的证书(如 Let's Encrypt),可以替换自动生成的证书:
1. 准备证书文件
bash
# 确保证书链完整(如果有中间证书)
cat your-cert.pem intermediate.pem > /etc/runixo/cert.pem
cp your-key.pem /etc/runixo/key.pem
chmod 600 /etc/runixo/key.pem2. 禁用自动生成
编辑 /etc/runixo/agent.yaml:
yaml
tls:
cert: /etc/runixo/cert.pem
key: /etc/runixo/key.pem
auto_generate: false3. 重启 Agent
bash
sudo systemctl restart runixo-agentLet's Encrypt 证书
使用 certbot 获取免费证书:
bash
# 安装 certbot
sudo apt install certbot
# 获取证书(需要域名指向服务器)
sudo certbot certonly --standalone -d your-server.example.com
# 复制到 Runixo 目录
sudo cp /etc/letsencrypt/live/your-server.example.com/fullchain.pem /etc/runixo/cert.pem
sudo cp /etc/letsencrypt/live/your-server.example.com/privkey.pem /etc/runixo/key.pem
sudo chmod 600 /etc/runixo/key.pem
# 重启
sudo systemctl restart runixo-agent自动续期
设置 cron 任务自动续期并重启 Agent:
bash
# /etc/cron.d/runixo-cert-renew
0 3 * * 1 root certbot renew --quiet && cp /etc/letsencrypt/live/your-server.example.com/fullchain.pem /etc/runixo/cert.pem && cp /etc/letsencrypt/live/your-server.example.com/privkey.pem /etc/runixo/key.pem && systemctl restart runixo-agent客户端证书导入
当使用自签名证书时,客户端需要导入证书才能建立信任:
- 从服务器获取证书:
scp server:/etc/runixo/cert.pem ./ - 在客户端 「添加服务器」 界面点击 「导入证书」
- 选择下载的
cert.pem文件 - 连接时客户端会验证证书指纹
证书轮换
更换证书时:
bash
# 1. 备份旧证书
sudo cp /etc/runixo/cert.pem /etc/runixo/cert.pem.bak
# 2. 替换新证书
sudo cp new-cert.pem /etc/runixo/cert.pem
sudo cp new-key.pem /etc/runixo/key.pem
sudo chmod 600 /etc/runixo/key.pem
# 3. 重启 Agent
sudo systemctl restart runixo-agent
# 4. 客户端重新导入新证书故障排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 客户端提示证书错误 | 自签名证书未导入 | 导入 cert.pem 到客户端 |
| Agent 启动失败 | 证书文件权限不对 | chmod 600 key.pem |
| 证书过期 | 自签名证书 10 年不会过期 | 检查自定义证书有效期 |
| IP 变更后连接失败 | SAN 不包含新 IP | 删除旧证书重启 Agent 重新生成 |