在家中建立私有证书授权中心

你已经建立了一个漂亮的家庭实验室,包含多个服务——Nextcloud、Home Assistant、Plex,也许还有 NAS。一切运作良好,除了一件烦人的事:每次通过 HTTPS 访问这些服务时,浏览器都会大喊”你的连接不是私人连接!” 当然,你可以每次都点击”高级”和”继续前往”。但如果我告诉你有更好的方法呢?欢迎来到私有证书授权中心的世界。

为什么需要私有 CA

问题所在: 当你访问 https://192.168.1.100https://homeserver.local 时,浏览器不信任该连接,因为:

  • 自签证书默认不受信任
  • 公开 CA(Let’s Encrypt、DigiCert)不会为私有 IP 地址或 .local 域名签发证书
  • 每次点击跳过安全警告会失去 HTTPS 的意义 解决方案: 建立你自己的证书授权中心(CA),它可以:
  • 为你的内部服务签发证书
  • 安装后被你所有设备信任
  • 离线运作,无需外部依赖
  • 让你完全控制证书生命周期

理解基础概念

什么是证书授权中心?

CA 是签发数字证书的实体。当你的浏览器信任某个 CA 时,它会自动信任该 CA 签署的任何证书。 信任链:

flowchart TD A["🏛️ 根 CA<br/>(你的私有 CA)"] --> B["📜 中继 CA<br/>(可选)"] B --> C["🔒 服务器证书<br/>(homeserver.local)"] B --> D["🔒 服务器证书<br/>(nas.local)"] B --> E["🔒 服务器证书<br/>(192.168.1.100)"] F["💻 你的设备"] -.->|"信任"| A F -->|"自动信任"| C F -->|"自动信任"| D F -->|"自动信任"| E style A fill:#e3f2fd style B fill:#f3e5f5 style C fill:#e8f5e9 style D fill:#e8f5e9 style E fill:#e8f5e9 style F fill:#fff3e0

根 CA vs 中继 CA

  • 根 CA: 最高层级的授权中心。保持离线并确保安全。
  • 中继 CA: 签署实际证书。可以撤销而不影响根 CA。
  • 服务器证书: 你的服务用于 HTTPS 的证书。
💡最佳实践

使用两层架构:根 CA → 中继 CA → 服务器证书。这样,如果中继 CA 被入侵,你可以撤销它而无需在所有设备上重新信任根 CA。

建立你的私有 CA

方法 1:使用 OpenSSL(手动控制)

步骤 1:建立根 CA

# 生成根 CA 私钥(务必妥善保管!)
openssl genrsa -aes256 -out root-ca.key 4096
# 建立根 CA 证书(有效期 10 年)
openssl req -x509 -new -nodes -key root-ca.key -sha256 -days 3650 \
  -out root-ca.crt \
  -subj "/C=US/ST=State/L=City/O=Home Lab/CN=Home Lab Root CA"

步骤 2:建立中继 CA

# 生成中继 CA 私钥
openssl genrsa -aes256 -out intermediate-ca.key 4096
# 建立证书签署请求(CSR)
openssl req -new -key intermediate-ca.key -out intermediate-ca.csr \
  -subj "/C=US/ST=State/L=City/O=Home Lab/CN=Home Lab Intermediate CA"
# 使用根 CA 签署中继 CA
openssl x509 -req -in intermediate-ca.csr -CA root-ca.crt -CAkey root-ca.key \
  -CAcreateserial -out intermediate-ca.crt -days 1825 -sha256 \
  -extfile <(echo "basicConstraints=CA:TRUE")

步骤 3:签发服务器证书

# 生成服务器私钥
openssl genrsa -out homeserver.key 2048
# 为服务器建立 CSR
openssl req -new -key homeserver.key -out homeserver.csr \
  -subj "/C=US/ST=State/L=City/O=Home Lab/CN=homeserver.local"
# 建立 SAN(主体别名)配置
cat > san.cnf <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
[v3_req]
subjectAltName = @alt_names
[alt_names]
DNS.1 = homeserver.local
DNS.2 = homeserver
IP.1 = 192.168.1.100
EOF
# 使用中继 CA 签署服务器证书
openssl x509 -req -in homeserver.csr -CA intermediate-ca.crt \
  -CAkey intermediate-ca.key -CAcreateserial -out homeserver.crt \
  -days 365 -sha256 -extfile san.cnf -extensions v3_req

方法 2:使用 easy-rsa(简化版)

# 安装 easy-rsa
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
# 初始化 PKI
./easyrsa init-pki
# 建立 CA
./easyrsa build-ca
# 生成服务器证书
./easyrsa gen-req homeserver nopass
./easyrsa sign-req server homeserver

方法 3:使用 step-ca(现代化方法 - 推荐)

step-ca 是一个现代化的自动化 CA,简化了证书管理。可以把它想象成”家庭实验室的 Let’s Encrypt”。 为什么 step-ca 更好:

  • 自动化证书管理,支持 ACME 协议
  • 内建证书更新 - 无需手动脚本
  • OAuth/OIDC 集成,用于 SSH 证书
  • 简单的 CLI - 无需复杂的 OpenSSL 命令
  • 网页式工作流程,用于证书请求
  • 默认短期证书(更好的安全性)
  • 远程管理功能 安装:
# macOS
brew install step
# Ubuntu/Debian
curl -fsSL https://packages.smallstep.com/keys/apt/repo-signing-key.gpg -o /etc/apt/trusted.gpg.d/smallstep.asc
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/smallstep.asc] https://packages.smallstep.com/stable/debian debs main' | sudo tee /etc/apt/sources.list.d/smallstep.list
sudo apt update && sudo apt install step-cli step-ca
# RHEL/Fedora
sudo dnf install step-cli step-ca
# Windows (Winget)
winget install Smallstep.step-ca
# Docker
docker pull smallstep/step-ca

初始化你的 CA:

# 交互式设置
step ca init
# 系统会提示你输入:
# - PKI 名称(例如:"Home Lab")
# - DNS 名称(例如:"ca.homelab.local")
# - 监听地址(例如:"127.0.0.1:8443")
# - 第一个配置者电子邮件(例如:"admin@homelab.local")
# - CA 密钥密码
# 示例输出:
 What would you like to name your new PKI? Home Lab
 What DNS names or IP addresses would you like to add to your new CA? ca.homelab.local
 What address will your new CA listen at? 127.0.0.1:8443
 What would you like to name the first provisioner? admin@homelab.local
 What do you want your password to be? ********
 Root certificate: /home/user/.step/certs/root_ca.crt
 Root fingerprint: 702a094e239c9eec6f0dcd0a5f65e595bf7ed6614012825c5fe3d1ae1b2fd6ee

高级初始化选项:

# 支持 ACME(用于自动证书管理)
step ca init --acme
# 支持 SSH 证书
step ca init --ssh
# 用于 Kubernetes 部署
step ca init --helm
# 启用远程管理
step ca init --remote-management

启动 CA 服务器:

# 启动 CA
step-ca $(step path)/config/ca.json
# 或作为 systemd 服务运行
sudo systemctl enable step-ca
sudo systemctl start step-ca

签发你的第一个证书:

# 简单的证书签发
step ca certificate homeserver.local homeserver.crt homeserver.key
# 系统会提示你输入配置者密码
 Key ID: rQxROEr7Kx9TNjSQBTETtsu3GKmuW9zm02dMXZ8GUEk
 Please enter the password to decrypt the provisioner key: ********
 CA: https://ca.homelab.local:8443/1.0/sign
 Certificate: homeserver.crt
 Private Key: homeserver.key
# 使用主体别名(SAN)
step ca certificate homeserver.local homeserver.crt homeserver.key \
  --san homeserver \
  --san 192.168.1.100
# 自定义有效期
step ca certificate homeserver.local homeserver.crt homeserver.key \
  --not-after 8760h  # 1 年

在客户端机器上信任你的 CA:

# 启动信任(下载根 CA 并配置 step)
step ca bootstrap --ca-url https://ca.homelab.local:8443 \
  --fingerprint 702a094e239c9eec6f0dcd0a5f65e595bf7ed6614012825c5fe3d1ae1b2fd6ee
# 将根 CA 安装到系统信任存储区
step certificate install $(step path)/certs/root_ca.crt

自动证书更新: step-ca 让更新变得简单:

# 更新证书(到期前)
step ca renew homeserver.crt homeserver.key
 Would you like to overwrite homeserver.crt [y/n]: y
Your certificate has been saved in homeserver.crt.
# 自动更新守护进程(在证书生命周期的 2/3 时更新)
step ca renew homeserver.crt homeserver.key --daemon
# 强制更新
step ca renew homeserver.crt homeserver.key --force
⚠️⏰ 更新时机

证书一旦过期,CA 将不会更新它。设置自动更新在证书生命周期的三分之二左右执行。--daemon 标志会自动处理这个问题。 调整证书有效期:

# 5 分钟证书(用于敏感访问)
step ca certificate localhost localhost.crt localhost.key --not-after=5m
# 90 天证书(用于服务器)
step ca certificate homeserver.local homeserver.crt homeserver.key --not-after=2160h
# 从现在起 5 分钟后开始有效的证书
step ca certificate localhost localhost.crt localhost.key --not-before=5m --not-after=240h

要更改全局默认值,编辑 $(step path)/config/ca.json

"authority": {
  "claims": {
    "minTLSCertDuration": "5m",
    "maxTLSCertDuration": "2160h",
    "defaultTLSCertDuration": "24h"
  }
}

高级:单次使用令牌(用于容器/虚拟机): 生成短期令牌用于委派证书签发:

# 生成令牌(5 分钟后过期)
TOKEN=$(step ca token homeserver.local)
 Provisioner: admin@homelab.local (JWK)
 Please enter the password to decrypt the provisioner key: ********
# 在容器/虚拟机中:建立 CSR
step certificate create --csr homeserver.local homeserver.csr homeserver.key
# 在容器/虚拟机中:使用令牌获取证书
step ca sign --token $TOKEN homeserver.csr homeserver.crt
 CA: https://ca.homelab.local:8443
 Certificate: homeserver.crt

这非常适合:

  • 启动时需要证书的 Docker 容器
  • 虚拟机配置工作流程
  • CI/CD 管道
  • 在不共享 CA 凭证的情况下委派证书签发 ACME 集成(类似 Let’s Encrypt): ACME(自动化证书管理环境)是 Let’s Encrypt 使用的协议。step-ca 支持 ACME,实现完全自动化的证书签发和更新。 启用 ACME:
# 添加 ACME 配置者(如果初始化时未完成)
step ca provisioner add acme --type ACME
# 重新启动 step-ca 以应用更改
sudo systemctl restart step-ca

ACME 挑战类型:

挑战端口使用场景难度
http-0180通用目的、网页服务器简单
dns-0153通配符证书、防火墙后的服务器中等
tls-alpn-01443仅 TLS 环境中等
使用 step 作为 ACME 客户端:
# HTTP-01 挑战(在端口 80 启动网页服务器)
step ca certificate --provisioner acme neo01.com example.crt example.key
 Provisioner: acme (ACME)
Using Standalone Mode HTTP challenge to validate neo01.com .. done!
Waiting for Order to be 'ready' for finalization .. done!
Finalizing Order .. done!
 Certificate: example.crt
 Private Key: example.key

使用 certbot:

# HTTP-01 挑战
certbot certonly --standalone \
  --server https://ca.homelab.local:8443/acme/acme/directory \
  -d homeserver.local \
  --register-unsafely-without-email
# DNS-01 挑战(用于通配符证书)
certbot certonly --manual --preferred-challenges dns \
  --server https://ca.homelab.local:8443/acme/acme/directory \
  -d '*.homelab.local'
# 自动更新
certbot renew --server https://ca.homelab.local:8443/acme/acme/directory

使用 acme.sh:

# HTTP-01 挑战
acme.sh --issue --standalone \
  --server https://ca.homelab.local:8443/acme/acme/directory \
  -d homeserver.local
# 使用 Cloudflare 的 DNS-01
export CF_Token="your-cloudflare-api-token"
acme.sh --issue --dns dns_cf \
  --server https://ca.homelab.local:8443/acme/acme/directory \
  -d homeserver.local
# 自动更新(每日运行)
acme.sh --cron

ACME 流程图:

sequenceDiagram participant Client as ACME 客户端 participant CA as step-ca participant Web as 网页服务器 Client->>CA: 1. 建立账户并订购证书 CA->>Client: 2. 返回挑战(http-01、dns-01、tls-alpn-01) Client->>Web: 3. 在 /.well-known/acme-challenge/ 放置挑战响应 Client->>CA: 4. 准备验证 CA->>Web: 5. 验证挑战响应 CA->>Client: 6. 挑战已验证 Client->>CA: 7. 提交 CSR CA->>Client: 8. 签发证书 Note over Client,CA: 证书自动签发!

为什么 ACME 更好:

  • 零人工干预 - 完全自动化的证书生命周期
  • 自动更新 - 不会有过期的证书
  • 行业标准 - 适用于任何 ACME 客户端
  • 大规模验证 - 支持 Let’s Encrypt(数十亿证书)
  • 内建验证 - 自动证明域名/IP 所有权 与 Traefik 集成:
# traefik.yml
entryPoints:
  websecure:
    address: ":443"
certificatesResolvers:
  homelab:
    acme:
      caServer: https://ca.homelab.local:8443/acme/acme/directory
      storage: /acme.json
      tlsChallenge: {}
# docker-compose.yml
services:
  whoami:
    image: traefik/whoami
    labels:
      - "traefik.http.routers.whoami.rule=Host(`whoami.homelab.local`)"
      - "traefik.http.routers.whoami.tls.certresolver=homelab"

Docker Compose 配置:

version: '3'
services:
  step-ca:
    image: smallstep/step-ca
    ports:
      - "8443:8443"
    volumes:
      - step-ca-data:/home/step
    environment:
      - DOCKER_STEPCA_INIT_NAME=Home Lab
      - DOCKER_STEPCA_INIT_DNS_NAMES=ca.homelab.local
      - DOCKER_STEPCA_INIT_PROVISIONER_NAME=admin@homelab.local
    restart: unless-stopped
volumes:
  step-ca-data:

比较:OpenSSL vs step-ca

任务OpenSSLstep-ca
建立 CA多个命令、配置文件step ca init
签发证书5+ 个命令加配置step ca certificate
更新手动脚本step ca renew --daemon
ACME 支持未内建内建
学习曲线陡峭平缓
自动化DIY内建
SSH 证书复杂step ssh 命令
💡何时使用 step-ca

如果你符合以下情况,请使用 step-ca:

  • 想要自动化证书管理
  • 需要 ACME 协议支持
  • 想与现代工具集成(Traefik、Kubernetes)
  • 偏好简单的 CLI 而非复杂的 OpenSSL 命令
  • 需要 SSH 证书管理
  • 想要内建的更新自动化 如果你符合以下情况,请坚持使用 OpenSSL:
  • 需要对每个细节的最大控制
  • 有现有的基于 OpenSSL 的工作流程
  • 在无法获取 step-ca 二进制文件的隔离环境中工作
  • 需要 step-ca 不支持的特定证书扩展功能

安装你的 CA 证书

Windows

  1. 双击 root-ca.crt
  2. 点击”安装证书”
  3. 选择”本地计算机”
  4. 选择”将所有证书放入以下存储”
  5. 选择”受信任的根证书颁发机构”
  6. 点击”完成”

macOS

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain root-ca.crt

Linux (Ubuntu/Debian)

sudo cp root-ca.crt /usr/local/share/ca-certificates/homelab-root-ca.crt
sudo update-ca-certificates

iOS/iPadOS

  1. root-ca.crt 发送给自己或放在网页服务器上
  2. 在设备上打开文件
  3. 前往”设置”→“通用”→“VPN 与设备管理”
  4. 安装描述文件
  5. 前往”设置”→“通用”→“关于本机”→“证书信任设置”
  6. 为该证书启用完全信任

Android

  1. root-ca.crt 复制到设备
  2. “设置”→“安全”→“加密与凭据”→“安装证书”
  3. 选择”CA 证书”
  4. 浏览并选择你的证书

配置服务

Nginx

server {
    listen 443 ssl;
    server_name homeserver.local;
    ssl_certificate /path/to/homeserver.crt;
    ssl_certificate_key /path/to/homeserver.key;
    # 可选:包含中继 CA
    # ssl_certificate 应包含:服务器证书 + 中继证书
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    location / {
        proxy_pass http://localhost:8080;
    }
}

Apache

<VirtualHost *:443>
    ServerName homeserver.local
    SSLEngine on
    SSLCertificateFile /path/to/homeserver.crt
    SSLCertificateKeyFile /path/to/homeserver.key
    SSLCertificateChainFile /path/to/intermediate-ca.crt
    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/
</VirtualHost>

Docker Compose

version: '3'
services:
  web:
    image: nginx:alpine
    ports:
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./homeserver.crt:/etc/nginx/ssl/cert.crt
      - ./homeserver.key:/etc/nginx/ssl/cert.key

证书管理

证书生命周期

flowchart TD A["📝 建立证书"] --> B["🚀 部署到服务器"] B --> C["👁️ 监控到期日"] C --> D{"⏰ 即将到期?"} D -->|"否"| C D -->|"是(生命周期的 2/3)"| E["🔄 更新证书"] E --> F["🚀 重新部署到服务器"] F --> C style A fill:#e3f2fd style B fill:#e8f5e9 style C fill:#fff3e0 style D fill:#fff9c4 style E fill:#f3e5f5 style F fill:#e8f5e9

更新脚本

#!/bin/bash
# renew-cert.sh
DOMAIN="homeserver.local"
CERT_DIR="/etc/ssl/homelab"
# 生成新的密钥和 CSR
openssl genrsa -out ${CERT_DIR}/${DOMAIN}.key 2048
openssl req -new -key ${CERT_DIR}/${DOMAIN}.key \
  -out ${CERT_DIR}/${DOMAIN}.csr \
  -subj "/CN=${DOMAIN}"
# 使用中继 CA 签署
openssl x509 -req -in ${CERT_DIR}/${DOMAIN}.csr \
  -CA ${CERT_DIR}/intermediate-ca.crt \
  -CAkey ${CERT_DIR}/intermediate-ca.key \
  -CAcreateserial -out ${CERT_DIR}/${DOMAIN}.crt \
  -days 365 -sha256
# 重新加载 nginx
systemctl reload nginx
echo "Certificate renewed for ${DOMAIN}"

使用 Cron 自动化

# 添加到 crontab:在到期前 30 天更新
0 0 1 * * /path/to/renew-cert.sh

安全最佳实践

☠️关键安全措施

保护你的根 CA 私钥:

  • 存储在加密的 USB 闪存盘上并离线保存
  • 绝不暴露于网络
  • 使用强密码(AES-256)
  • 保留多个加密备份
  • 生产环境考虑使用硬件安全模块(HSM) 关键安全措施:
  1. 分离根 CA 和中继 CA
    • 根 CA:离线,仅用于签署中继 CA
    • 中继 CA:在线,签署服务器证书
  2. 使用强密钥大小
    • 根 CA:4096 位 RSA 或 EC P-384
    • 中继 CA:4096 位 RSA 或 EC P-384
    • 服务器证书:最少 2048 位 RSA
  3. 设置适当的有效期
    • 根 CA:10-20 年
    • 中继 CA:5 年
    • 服务器证书:1 年(更容易轮换)
  4. 实施证书撤销
    • 维护证书撤销列表(CRL)
    • 或使用在线证书状态协议(OCSP)
  5. 审计和监控
    • 记录所有证书签发
    • 监控未授权的证书
    • 定期安全审计

常见问题与解决方案

问题:浏览器仍显示警告

原因:

  • CA 证书未正确安装
  • 证书未包含正确的 SAN(主体别名)
  • 通过 IP 访问但证书只有 DNS 名称 解决方案:
# 检查证书 SAN
openssl x509 -in homeserver.crt -text -noout | grep -A1 "Subject Alternative Name"
# 确保证书包含所有访问方式
DNS.1 = homeserver.local
DNS.2 = homeserver
IP.1 = 192.168.1.100

问题:证书链不完整

解决方案: 建立证书组合:

cat homeserver.crt intermediate-ca.crt > homeserver-bundle.crt

在服务器配置中使用组合文件。

问题:私钥权限

# 设置正确的权限
chmod 600 homeserver.key
chown root:root homeserver.key

高级:自动化证书管理

使用 step-ca 的 SSH 证书

如果你使用 --ssh 初始化,step-ca 也可以签发 SSH 证书以实现无密码验证。 设置 SSH 用户验证:

# 在 SSH 服务器上:信任用户 CA
step ssh config --roots > /etc/ssh/ssh_user_ca.pub
echo 'TrustedUserCAKeys /etc/ssh/ssh_user_ca.pub' | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd
# 在客户端:获取 SSH 用户证书
step ssh certificate alice@homelab.local id_ecdsa
 Provisioner: admin@homelab.local (JWK)
 Please enter the password to decrypt the provisioner key: ********
 CA: https://ca.homelab.local:8443
 Private Key: id_ecdsa
 Certificate: id_ecdsa-cert.pub
 SSH Agent: yes
# 检查证书
cat id_ecdsa-cert.pub | step ssh inspect

设置 SSH 主机验证:

# 在 SSH 服务器上:获取主机证书
cd /etc/ssh
sudo step ssh certificate --host --sign server.homelab.local ssh_host_ecdsa_key.pub
# 配置 SSHD 使用证书
echo 'HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub' | sudo tee -a /etc/ssh/sshd_config
sudo systemctl restart sshd
# 在客户端:信任主机 CA
step ssh config --host --roots >> ~/.ssh/known_hosts
# 前面加上:@cert-authority *

自动化 SSH 主机证书更新:

# 建立每周更新 cron
cat <<EOF | sudo tee /etc/cron.weekly/renew-ssh-cert
#!/bin/sh
export STEPPATH=/root/.step
cd /etc/ssh && step ssh renew ssh_host_ecdsa_key-cert.pub ssh_host_ecdsa_key --force
exit 0
EOF
sudo chmod 755 /etc/cron.weekly/renew-ssh-cert

使用 step-ca 与 nginx-proxy-manager

# 1. 从 step-ca 获取证书
step ca certificate npm.homelab.local npm.crt npm.key
# 2. 在 nginx-proxy-manager UI 中:
#    - SSL 证书 → 添加 SSL 证书 → 自定义
#    - 上传 npm.crt 和 npm.key
#    - 使用 step ca renew --daemon 设置自动更新

使用 step-ca 与 Home Assistant

# configuration.yaml
http:
  ssl_certificate: /ssl/homeassistant.crt
  ssl_key: /ssl/homeassistant.key
# 获取证书
# step ca certificate homeassistant.local /ssl/homeassistant.crt /ssl/homeassistant.key

监控和管理

# 检查证书到期日
step certificate inspect homeserver.crt --short
X.509v3 TLS Certificate (ECDSA P-256) [Serial: 7720...1576]
  Subject:     homeserver.local
  Issuer:      Home Lab Intermediate CA
  Valid from:  2025-05-15T00:59:37Z
          to:  2025-05-16T01:00:37Z
# 撤销证书(被动撤销 - 阻止更新)
step ca revoke --cert homeserver.crt --key homeserver.key
 CA: https://ca.homelab.local:8443
Certificate with Serial Number 30671613121311574910895916201205874495 has been revoked.
# 列出配置者
step ca provisioner list

比较:私有 CA vs Let’s Encrypt

功能私有 CALet’s Encrypt
成本免费免费
内部 IP✅ 是❌ 否
.local 域名✅ 是❌ 否
离线运作✅ 是❌ 否
自动更新手动/自定义✅ 内建
公开信任❌ 否✅ 是
设置复杂度中等
维护手动自动化
何时使用私有 CA:
  • 仅限内部服务
  • 私有 IP 地址
  • .local 或自定义 TLD
  • 隔离网络
  • 需要完全控制 何时使用 Let’s Encrypt:
  • 公开服务
  • 公开域名
  • 想要自动更新
  • 不想管理 CA 基础设施

资源

结论

建立私有 CA 一开始可能看起来令人生畏,但一旦配置完成,它就能消除那些烦人的浏览器警告,并为你的家庭实验室服务提供适当的加密。初期的时间投资会带来更专业、更安全的家庭网络。 重点摘要:

  • 私有 CA 为内部服务启用受信任的 HTTPS
  • 推荐使用 step-ca 进行现代化的自动证书管理
  • 两层架构(根 + 中继)提供更好的安全性
  • 在所有设备上安装一次根 CA 证书
  • 自动化证书更新以避免到期问题(step-ca 让这变得简单)
  • 保持根 CA 私钥离线并确保安全
  • SSH 证书消除密码验证并提高安全性 快速入门建议: 对于大多数家庭实验室,使用 step-ca:
  1. step ca init --acme --ssh(一个命令设置)
  2. step certificate install $(step path)/certs/root_ca.crt(在所有设备上信任)
  3. step ca certificate service.local service.crt service.key(获取证书)
  4. step ca renew service.crt service.key --daemon(自动更新) 从单一服务开始,熟悉流程后,再扩展到整个家庭实验室。当你不再需要点击安全警告时,未来的你会感谢现在的自己!🔒