证书两种方案任选其一:ACME 自动申请(推荐,需域名)或自签名证书。ACME 使用
certificate_providers写法,需要 sing-box 1.14.0+。AnyTLS 占用 TCP 443,不能用 TLS-ALPN 挑战(会与入站抢端口),用 HTTP-01(TCP 80)或 DNS-01。用 IP 申请会自动套用 Let's Encrypt shortlived 短期证书(约 6 天有效期、续期频繁),故推荐域名。自签名方案不要把insecure当默认。字段说明见 AnyTLS inbound。
一、部署前准备
确认以下条件:
- VPS 使用 Debian、Ubuntu 等带 systemd 的 Linux 发行版,具备 root 或
sudo权限;官方安装脚本覆盖 deb / rpm / Arch / OpenWrt; - 一个已解析到该 VPS 的域名,以及可接收邮件的邮箱(ACME 申请用);
- 云安全组和本机防火墙放行 TCP
443,且未被 Nginx、Caddy 等占用;ACME HTTP-01 还需放行 TCP80——只改安全组不够; - 准备一个足够复杂的连接密码。
二、安装 sing-box
curl -fsSL https://sing-box.app/install.sh | sh
sing-box version输出中的版本号必须 ≥ 1.14.0,否则不认识 certificate_providers。若要钉死版本:
curl -fsSL https://sing-box.app/install.sh | sh -s -- --version 1.14.0脚本会下载 sing-box、安装 systemd 服务(以 sing-box 用户运行)并创建 /etc/sing-box/。
三、生成证书(二选一)
方案 A:ACME 自动申请(推荐,使用域名)
把域名解析到 VPS 后按第四章配置,sing-box 会自动完成证书签发与续期。挑战只能走 HTTP-01(TCP 80)或 DNS-01,不要用 TLS-ALPN。
方案 B:自签名证书
sudo openssl ecparam -name prime256v1 -genkey -noout \
-out /etc/sing-box/server.key
sudo openssl req -x509 -nodes \
-key /etc/sing-box/server.key \
-out /etc/sing-box/server.crt \
-subj "/CN=bing.com" \
-addext "subjectAltName=DNS:bing.com" \
-days 825
sudo chmod 600 /etc/sing-box/server.key
sudo chmod 644 /etc/sing-box/server.crt
CN=bing.com只是示例伪装名,不代表证书由 Bing 签发。-addext给证书附加 subjectAltName(SAN)——把证书导入客户端信任列表并启用严格校验时,SAN 必须与server_name一致。有效期用 825 天,避免部分客户端拒绝「过长有效期」的证书。密钥用 P-256,不要改成 Ed25519。
使用此方案时删除 certificate_providers 段,tls 段改为:
"tls": {
"enabled": true,
"certificate_path": "/etc/sing-box/server.crt",
"key_path": "/etc/sing-box/server.key"
}客户端应导入该证书并保持 insecure 为关闭。"insecure": true 等于放弃证书校验,任意中间人可冒充服务端,只适合临时排障。
四、写入服务端配置
将下面的配置写入 /etc/sing-box/config.json:
{
"log": {
"level": "info",
"timestamp": true
},
"certificate_providers": [
{
"type": "acme",
"tag": "acme_cert",
"domain": [
"YOUR_DOMAIN"
],
"email": "YOUR_EMAIL@example.com",
"data_directory": "/var/lib/sing-box/certmagic"
}
],
"inbounds": [
{
"type": "anytls",
"listen": "::",
"listen_port": 443,
"users": [
{
"password": "CHANGE_THIS_TO_A_STRONG_PASSWORD"
}
],
"tls": {
"enabled": true,
"server_name": "YOUR_DOMAIN",
"certificate_provider": "acme_cert"
}
}
],
"outbounds": [
{
"type": "direct"
}
]
}data_directory 必须落在官方服务的 StateDirectory(/var/lib/sing-box)下。省略时 ACME 数据跟 sing-box 用户的 HOME 走,重启后可能丢证书或写不进去。
必须修改的字段
| 配置项 | 修改为 |
|---|---|
certificate_providers[0].domain[0] |
你的域名(需解析到该 VPS) |
certificate_providers[0].email |
你的邮箱地址 |
inbounds[0].users[0].password |
高强度连接密码 |
inbounds[0].tls.server_name |
与证书所用的域名相同 |
inbounds[0].listen |
默认 ::。机器禁用 IPv6 时改为 0.0.0.0 |
YOUR_DOMAIN必须在domain[0]和tls.server_name两处保持一致,且已解析到当前 VPS;密码不要继续使用示例值。
建议限制配置文件权限:
sudo chmod 600 /etc/sing-box/config.json可选字段说明
padding_scheme:服务端填充方案,客户端无需配置;留空时使用内置默认方案,一般无需修改;users[].name:可选字段,仅用于日志中区分用户。
客户端不要设置 client_metadata。1.13.16 起默认留空,避免被对端画像;不要为了「完整」把它加回去。
五、检查并启动
sudo sing-box check -c /etc/sing-box/config.json
sudo systemctl enable sing-box
sudo systemctl restart sing-box
sudo systemctl status sing-box --no-pagercheck 没有输出且退出码为 0 表示配置通过。status 应为 active (running);否则查看日志:
sudo journalctl -u sing-box --output cat -e六、服务管理
| 操作 | 命令 |
|---|---|
| 查看状态 | sudo systemctl status sing-box --no-pager |
| 启动 | sudo systemctl start sing-box |
| 停止 | sudo systemctl stop sing-box |
| 重启 | sudo systemctl restart sing-box |
| 禁用开机自启 | sudo systemctl disable sing-box |
| 查看最近日志 | sudo journalctl -u sing-box --output cat -e |
| 实时查看日志 | sudo journalctl -u sing-box --output cat -f |
七、客户端配置参考
下面是一份可直接 sing-box check 的最小客户端配置:本地 mixed 入站 + 一个出站。出站必须放在 outbounds 数组里,不能把出站对象单独当成完整配置文件。
{
"log": {
"level": "info",
"timestamp": true
},
"inbounds": [
{
"type": "mixed",
"listen": "127.0.0.1",
"listen_port": 1080
}
],
"outbounds": [
{
"type": "anytls",
"tag": "anytls-out",
"server": "YOUR_SERVER_IP",
"server_port": 443,
"password": "CHANGE_THIS_TO_A_STRONG_PASSWORD",
"tls": {
"enabled": true,
"server_name": "YOUR_DOMAIN"
}
}
]
}本机 SOCKS / HTTP 代理为 127.0.0.1:1080。
要点:
| 客户端字段 | 说明 |
|---|---|
server |
VPS 公网 IP |
password |
与服务端 users[0].password 完全一致 |
tls.server_name |
与服务端 tls.server_name 一致,即证书申请所用的域名 |
服务端使用 ACME 签发的公网受信证书时,客户端不要设置
insecure。使用自签名证书(方案 B)时,把服务端证书导入客户端信任列表,而不是打开insecure。
八、故障排查
1. 443 端口无法监听
检查端口占用:
sudo ss -lntp | grep ':443'如果已有 Nginx、Caddy 或其他 sing-box 实例监听 443,需要停止冲突服务,或修改 listen_port。禁用 IPv6 时把 listen 改为 0.0.0.0。
2. ACME 证书申请失败
重点检查:
- 域名是否已解析到该 VPS(可用
dig +short 你的域名确认); domain[0]与tls.server_name是否一致;- TCP 80 是否放行、是否被占用(HTTP-01);不要指望 TLS-ALPN,443 已被 AnyTLS 占用;
data_directory是否为/var/lib/sing-box/certmagic;- 系统时间是否准确;
- 日志中是否出现证书申请或验证错误。
3. 修改配置后服务无法启动
sudo sing-box check -c /etc/sing-box/config.json
sudo journalctl -u sing-box -n 100 --no-pager4. 客户端无法连接
依次确认:
systemctl status为active (running);- VPS 防火墙和云安全组放行 TCP
443; - 客户端密码与
users[0].password完全一致; - 服务端日志中没有认证失败或证书错误。
九、安全建议
- 密码用长随机值,不要示例字符串;
config.json与server.key权限600;- 优先 ACME 公网证书;自签要导入证书,不要长期开
insecure; - 不要自定义
client_metadata; - 定期升级 sing-box,升级后重新执行
sing-box check。