给本地服务配上 HTTPS:certbot DNS-01 签发 + Pingap SNI 实战

在上一篇里,Marinara 跑在 127.0.0.1:7860,通过 Pingap 用 http://IP 对外提供访问。这样能用,但有一个难受的地方:Basic Auth 的账号密码是在明文 HTTP 里传的。所以目标很明确:给它配上 https://marinara.icyyan.com。 要做的事情拆开来就两件:证书从哪来,证书怎么挂到反向代理上。好消息是这台服务器上已经有两个站点(cloudside.icyyan.com、silly.icyyan.com)跑着 HTTPS,整套体系是现成的——新站点照抄就行。这篇文章把整个过程走一遍,包括中间踩掉的几个坑。 1. 先看现成的体系长什么样 照抄之前先弄清楚抄的是什么。服务器入口是 Pingap,HTTPS 这一块的结构是: 443 端口只监听一次,靠 SNI 分流。SNI 是 TLS 握手时客户端告诉服务器「我要访问哪个域名」,服务器按这个域名选对应的证书、再按域名找到对应的 location 转发。所以多个 HTTPS 站点可以共用同一个 443。 每个域名一张 Let’s Encrypt 证书,统一放在 /etc/letsencrypt/live/<域名>/ 下,都是 certbot 签的。 签证书用的验证方式是 dns-aliyun 插件,这是整个过程里最关键的一环,值得单独说。 2. 为什么用 DNS-01 挑战 CA 签证书之前,必须先确认「你确实控制这个域名」,这个确认动作叫挑战(challenge)。最常见的 HTTP-01 挑战是让 CA 从公网访问 http://<域名>/.well-known/... 下的一个文件——这要求域名已经解析到服务器、80 端口可用。 DNS-01 换了一条路:只要能在这个域名的 DNS 里写下一条指定的 TXT 记录,就证明你控制了整个域。阿里云的 DNS 有 API,certbot 的 dns-aliyun 插件会自动完成「写 TXT 记录 → 等它生效 → 让 CA 来查 → 删掉记录」的全过程,人不用插手。 ...

July 22, 2026 · 3 min · Icyyan