Banner image of the blog
0 0 分钟

Lucky SSL/ACME 证书详解:给内网服务也配上小绿锁

2026-08-14 个人分享 编辑

前两篇我们搞定了一台容器搞定 DDNS 和反向代理,但有个细节一直没细说:为什么访问家里的服务时,浏览器总弹”不安全”警告?答案很简单——你还在用 HTTP 明文传输。本文专门把 Lucky 的 SSL/ACME 证书这一块讲透,让内网服务也戴上”小绿锁”。

一、为什么一定要上 HTTPS
HTTP 是明文协议。一旦你通过公网或内网穿透访问,账号密码、Cookie 全在网络上”裸奔”,谁都能抓包看到。除此之外还有两个现实痛点:

浏览器不友好:Chrome 等会把所有 HTTP 站点标成”不安全”,有些功能直接禁用;
安全上下文要求:PWA 安装、WebRTC、地理定位等浏览器 API 都强制要求 HTTPS 环境。
反向代理 + HTTPS 是目前相对最完善的家庭 NAS 公网访问方案,既能建立加密通道,又能用域名统一入口。

二、Lucky 的证书方案:ACME + Let’s Encrypt
Lucky 内置了 ACME 客户端,可以直接向 Let’s Encrypt 申请免费证书。标准证书有效期 90 天,但 Lucky 会在到期前自动续签,无需人工干预——这也是它相比手动续期最舒服的地方。

三、前置:先配置 DNS 服务商
因为内网机器没法做 HTTP-01 验证,证书只能走 DNS-01 验证。所以第一步是在 Lucky 里添加一个 DNS 服务商配置:

用 Cloudflare 的话,去后台创建一个 API Token,权限只给 Zone.DNS 的 Edit 即可,别用 Global API Key(权限太大,泄露就全完蛋);
用阿里云 / 腾讯云等国内 DNS,需要填 AccessKey ID 和 Secret,且域名得先完成 ICP 备案才能签发;
Cloudflare 的好处是不强制备案,省心。
四、申请证书的步骤
左侧菜单 安全管理 → SSL/TLS 证书 → 添加证书;
添加方式选 ACME,证书颁发机构选 Let’s Encrypt;
验证方式选你配置的 DNS 服务商;
域名列表填两行:主域名 example.com 和泛域名 *.example.com(泛域名证书一个顶所有子域名);
电子邮箱填常用邮箱(到期提醒用),算法默认 RSA2048;
如果你的公网是 IPv4,高级选项里勾选「DNS 查询强制 IPv4」和「DNS 查询仅使用 TCP 通道」;
点击添加,等 1~3 分钟,状态变成”成功”即完成。
五、几个必踩的坑
DNS 传播超时:第一次失败多半是 DNS 没传播完,把”DNS 传播等待时间”调到 120 秒再试;
Let’s Encrypt 频率限制:同一域名每周最多申请 5 次,别瞎点,先检查配置再申请;
别手贱动 _acme-challenge:Lucky 会自动加/删这条 TXT 记录,你之前手动加过的记得删掉,否则冲突;
国内 DNS 接口变动:老教程的填法可能失效,Cloudflare 相对最稳。
六、自动续期
Lucky 默认提前 30 天续期,建议改成提前 45 天更保险。续期成功后会自动更新到反向代理规则里,不用手动替换证书。跑大半年基本上零维护,偶尔收到续期成功通知看一眼就行。

七、把证书部署到反向代理
Web 服务 → 添加 Web 规则,操作模式简易模式,监听类型按你的 IP 类型勾选 tcp4/tcp6;
监听端口:家里 443 没被封就用 443,被封了换 8443 / 9443 之类,访问时域名后加端口;
务必打开 TLS 开关,并在规则里选择刚才申请的证书;
打开「防火墙自动放行」,省得手动放行端口;
在子规则里把前端域名(如 nas.example.com)绑定到后端内网地址(如 http://192.168.1.100:9999)。
八、HTTP 自动跳转 HTTPS
只输域名时浏览器可能默认走 HTTP 导致打不开。解决办法:再建一条 Web 规则(定制模式),TLS 关闭,默认子规则选「重定向」,目标填 https://{host}:{port},打开”万事大吉”自动加请求头。这样输入域名就自动跳 HTTPS。

九、安全最佳实践
API Token / AccessKey 最小权限,且绝不在群里截图泄露;
改掉 Lucky 默认密码(666),设独立安全入口;
对没有自身登录页的服务(如某些管理面板),在子规则开 BasicAuth 多一道认证。
到这一篇,DDNS、反向代理、内网穿透、SSL 证书四块就齐了——一台 Lucky 容器,足以撑起整套家庭服务器的安全公网访问。

浏览 32

评论区
1 条评论