适用场景
内网地址常见为
192.168.114.9或192.168.3.9,外网可通过 Cloudflare Tunnel 代理。
参考:
1) 在服务端签发证书(仅证书步骤)
在 cli-proxy-api 服务器执行:
cd /opt/cli-proxy-api/config
# 仅首次生成本地 CA(已存在就跳过,避免信任链变化)
if [ ! -f homelab-ca.key ] || [ ! -f homelab-ca.crt ]; then
openssl genrsa -out homelab-ca.key 4096
openssl req -x509 -new -nodes -key homelab-ca.key -sha256 -days 3650 \
-out homelab-ca.crt \
-subj "/CN=HomeLab-CA/O=HomeLab"
fi
# 生成服务端证书配置(SAN 覆盖常见内网 IP)
cat > /tmp/cli-proxy-api-server.cnf <<'CNF'
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
req_extensions = req_ext
[ dn ]
CN = cli-proxy-api
O = cli-proxy-api
[ req_ext ]
subjectAltName = @alt_names
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
[ alt_names ]
IP.1 = 192.168.114.9
IP.2 = 192.168.3.9
IP.3 = 127.0.0.1
DNS.1 = localhost
DNS.2 = cli-proxy-api
DNS.3 = wyse
CNF
# 生成服务端私钥 + CSR + CA签发证书
openssl genrsa -out tls.key 2048
openssl req -new -key tls.key -out /tmp/cli-proxy-api-server.csr -config /tmp/cli-proxy-api-server.cnf
openssl x509 -req -in /tmp/cli-proxy-api-server.csr \
-CA homelab-ca.crt -CAkey homelab-ca.key -CAcreateserial \
-out tls.crt -days 825 -sha256 \
-extfile /tmp/cli-proxy-api-server.cnf -extensions req_ext
# 权限与校验
chmod 600 homelab-ca.key tls.key
chmod 644 homelab-ca.crt tls.crt
openssl verify -CAfile homelab-ca.crt tls.crt
openssl x509 -in tls.crt -noout -subject -issuer -dates -ext subjectAltName
rm -f /tmp/cli-proxy-api-server.cnf /tmp/cli-proxy-api-server.csr
2) Linux 客户端导入自签 CA
Debian / Ubuntu
sudo install -m 0644 homelab-ca.crt /usr/local/share/ca-certificates/homelab-ca.crt
sudo update-ca-certificates
RHEL / CentOS / Rocky / Alma
sudo cp homelab-ca.crt /etc/pki/ca-trust/source/anchors/homelab-ca.crt
sudo update-ca-trust extract
3) Windows 客户端导入自签 CA
先把 homelab-ca.crt 拷到 Windows 本地(例如 C:\Temp\homelab-ca.crt)。
PowerShell(推荐,管理员)
Import-Certificate -FilePath "C:\Temp\homelab-ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root"
certutil(管理员)
certutil -addstore -f Root "C:\Temp\homelab-ca.crt"
仅当前用户(无需管理员)
Import-Certificate -FilePath "C:\Temp\homelab-ca.crt" -CertStoreLocation "Cert:\CurrentUser\Root"
校验是否导入成功
certutil -store Root "HomeLab-CA"
Windows 下导入信息
PS C:\Users\uuu> certutil -addstore -f Root "D:\homelab-ca.crt"
Root "受信任的根证书颁发机构"
签名与公钥匹配
证书 "HomeLab-CA" 添加到存储。
CertUtil: -addstore 命令成功完成。
PS C:\Users\uuu> certutil -store Root "HomeLab-CA"
Root "受信任的根证书颁发机构"
================ 证书 4 ================
序列号: 4edd52d3d5da5553f2276e7f5cae5973b1cc586c
颁发者: O=HomeLab, CN=HomeLab-CA
NotBefore: 2026/3/26 18:41
NotAfter: 2036/3/23 18:41
使用者: O=HomeLab, CN=HomeLab-CA
签名与公钥匹配
根证书: 使用者与颁发者匹配
证书哈希(sha1): acf51cade64b10551b4c7793737c8a53e5568862
没有密钥提供程序信息
找不到解密的证书和私钥。
CertUtil: -store 命令成功完成。
PS C:\Users\uuu>
Firefox 仍提示不安全时
原因
Firefox 默认使用自己的证书库(NSS),不一定自动跟随 Windows
Root。
方案 A:让 Firefox 使用系统根证书(推荐)
- 在 Firefox 地址栏输入
about:config。 - 搜索
security.enterprise_roots.enabled。 - 将其设为
true,重启 Firefox。
方案 B:手工导入到 Firefox 证书库
- 打开:
设置 -> 隐私与安全 -> 证书 -> 查看证书 -> 机构。 - 点击
导入,选择homelab-ca.crt。 - 勾选“信任此 CA 以标识网站”。
常见错误码排查
SEC_ERROR_UNKNOWN_ISSUER:CA 未被 Firefox 信任。SSL_ERROR_BAD_CERT_DOMAIN:访问地址不在证书 SAN 中。MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT:服务端证书链/配置异常(常见于直接使用自签叶子证书且未正确信任)。
4) CLI Proxy API TLS 配置键(官方)
config.yaml 中使用:
tls:
enable: true
cert: /opt/cli-proxy-api/config/tls.crt
key: /opt/cli-proxy-api/config/tls.key
5) 快速验证(客户端)
openssl s_client -connect 192.168.114.9:8317 -servername 192.168.114.9 < /dev/null 2>/dev/null \
| openssl x509 -noout -subject -issuer -ext subjectAltName