适用场景

内网地址常见为 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 使用系统根证书(推荐)

  1. 在 Firefox 地址栏输入 about:config。
  2. 搜索 security.enterprise_roots.enabled。
  3. 将其设为 true,重启 Firefox。

方案 B:手工导入到 Firefox 证书库

  1. 打开:设置 -> 隐私与安全 -> 证书 -> 查看证书 -> 机构。
  2. 点击 导入,选择 homelab-ca.crt。
  3. 勾选“信任此 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