本教程介绍如何利用 Caddy 的自动证书管理功能,配合 Sing-box 搭建 Hysteria2 协议。

核心逻辑:

  1. Caddy:负责申请和续期证书,有没有实际网页无所谓。
  2. Sing-box:引用 Caddy 申请好的证书文件来运行代理服务。
  3. 权限:默认情况下两者均由 systemd (root) 运行,无权限隔阂。

第一步:安装 Caddy 并申请证书 Link to heading

1. 安装 Caddy 在终端依次执行以下命令(适用于 Debian/Ubuntu):

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
sudo chmod o+r /etc/apt/sources.list.d/caddy-stable.list

sudo apt update
sudo apt install caddy

2. 配置 Caddy 编辑配置文件:

sudo nano /etc/caddy/Caddyfile

清空原有内容,填入以下配置(请将 your.domain.com 替换为你实际的域名):

your.domain.com {
    respond "Service is running" 200
}

3. 启动 Caddy

sudo systemctl restart caddy
sudo systemctl enable caddy

启动后请等待约 30 秒,让 Caddy 完成证书申请过程。


第二步:定位证书路径(关键) Link to heading

1. 执行查找命令 使用以下命令找到名为 caddy 的目录:

sudo find / -type d -name 'caddy'

2. 确定证书位置 终端通常会返回 /var/lib/caddy 或类似的结果。 进入该目录,寻找 certificates 文件夹。通常完整的路径结构如下:

[查找到的caddy目录]/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/your.domain.com/

在该目录下,你会看到两个文件,请记录下它们的绝对路径(下一步配置要用):

  • your.domain.com.crt (证书文件)
  • your.domain.com.key (私钥文件)

第三步:安装 Sing-box Link to heading

使用安装脚本进行安装:

sudo bash <(curl -fsSL https://sing-box.app/install.sh)

第四步:配置 Sing-box Link to heading

1. 编辑配置文件 打开配置文件(路径通常为 /etc/sing-box/config.json):

sudo nano /etc/sing-box/config.json

2. 写入配置 将下面的内容复制进去。注意:必须修改 passwordserver_name 以及第二步中找到的 certificate_pathkey_path

{
  "log": {
    "level": "info",
    "timestamp": true
  },
  "inbounds": [
    {
      "type": "hysteria2",
      "tag": "hy2-in",
      "listen": "::",
      "listen_port": 51000,
      "users": [
        {
          "password": "your_strong_password_here"
        }
      ],
      "sniff": true,
      "sniff_override_destination": true,
      "tls": {
        "enabled": true,
        "server_name": "your.domain.com",
        "alpn": [
          "h3"
        ],
        "certificate_path": "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/your.domain.com/your.domain.com.crt",
        "key_path": "/var/lib/caddy/.local/share/caddy/certificates/acme-v02.api.letsencrypt.org-directory/your.domain.com/your.domain.com.key"
      }
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct"
    }
  ]
}

第五步:启动与验证 Link to heading

1. 重启 Sing-box

sudo systemctl restart sing-box

2. 检查状态

sudo systemctl status sing-box

如果看到绿色的 active (running),说明服务启动成功。 由于 Caddy 和 Sing-box 都是通过 Systemd 以 root 用户运行的,因此不存在读取证书的权限问题。


客户端连接参考 Link to heading

  • 服务器地址: your.domain.com
  • 端口: 51000
  • 密码: 配置文件中设置的密码
  • SNI (Server Name): your.domain.com
  • 跳过证书验证: 否