内部服务 TLS 证书的正确打开方式
TLS certificates for internal services done right

别再给内部服务配自签名证书了,那只会让客户端报错不断。我分享了一套利用 split-horizon DNS 和 WAF 的完美方案:通过 NetBird 实现 DNS 分流,让内部流量解析到内网 IP,外部流量解析到公网 IP。这样既能直接用 Let's Encrypt 签发受信任的证书,又能通过 nginx 绑定 VPN 接口实现访问控制。配合 acme.sh 自动续期,彻底告别 TLS 配置噩梦,让内部服务像公网服务一样安全流畅。
安全就像洋葱和食人魔一样,需要层层防护。
- 有评论者指出,使用 split-horizon DNS 时若内部域与公网域同名(如 example.com),会导致需同步维护两套记录,而使用子域(如 int.example.com)可避免此问题。
- 一位从业者分享经验,通过配置 ACME 客户端的 DNS validation 模式,即使服务无公网 IP 也能自动获取 Let's Encrypt 证书,无需依赖 HTTP 验证。
- 有观点反驳 split DNS 的必要性,认为直接利用 Hairpin NAT 将公网 IP 请求路由回内网,配合公网 DNS 记录即可统一内外网访问,无需维护两套 DNS 配置。
- 关于证书安全,有评论者认为 wildcard certs 配合 DNS 挑战更安全,既能避免子域名泄露至透明度日志,又能减少证书管理负担。
- 有用户提出,在内部服务中采用 client certificate authentication (mTLS) 替代 IP 白名单,可实现更细粒度的访问控制且无需暴露服务地址。