架构说明
公网 IP 在防火墙,防火墙做 SSL 卸载(终结 HTTPS),使用 1 张通配符证书 *.shturl.内网所有 Web 服务不用部署公网 SSL 证书;外网 HTTPS 解密在防火墙,防火墙转发 HTTP(或内网 HTTPS)到内网服务器。
DNS:所有子域名 *.shturl. A 记录全部解析到防火墙公网 IP
前置准备
通配符证书全套文件(推荐 PEM 格式)
部分防火墙支持 PFX/P12 打包文件(证书 + 私钥 + 证书链一体)
收集内网业务清单
表格
| 域名 | 内网后端地址 |
|---|
| shturl.cc/9 | 192.168.1.10:80 |
| shturl.cc/S | 192.168.1.11:80 |
| shturl.cc/O | 192.168.1.12:80 |
防火墙支持:SSL 卸载、反向代理 / 虚拟服务、SNI、支持 X-Forwarded-For 头
一、防火墙导入通配符证书,新建 SSL 模板
登录防火墙管理后台,进入【证书管理】页面
上传证书:
保存,创建SSL Profile(SSL 模板),绑定刚导入的通配证书
✅ 所有子域名代理服务统一引用这一个 SSL 模板,不需要重复上传证书
二、配置反向代理 / 虚拟服务(公网 443 端口)
绑定防火墙公网 IP,端口 443,关联上面创建好的 SSL 模板,开启 SNI
创建虚拟服务 / 反向代理服务
添加域名匹配规则(SNI 路由)
匹配域名 shturl.cc/9 → 转发到内网 192.168.1.10:80
匹配域名 shturl.cc/S → 转发到内网 192.168.1.11:80
匹配域名 shturl.cc/O → 转发到内网 192.168.1.12:80
开启转发请求头(强烈建议)
X-Forwarded-For:传递真实客户端 IP
X-Forwarded-Proto: https:告诉后端前端是 HTTPS 访问,防止后端强制 https 重定向死循环
X-Forwarded-Host:传递原始访问域名
三、防火墙安全策略放行
放行外网 → 防火墙公网 IP 443 端口
放行防火墙代理节点 → 内网服务器 80 端口(如果是内网 HTTPS 模式则放行 443)
最小权限原则,不要全开内网访问
四、内网服务器配置(重点:不用装公网通配证书)
内网服务只监听 80 HTTP
网站程序配置:识别 X-Forwarded-Proto 头,不要强制 301 跳转 https
防火墙到内网是 HTTP 明文,内网可信环境直接使用;高安全场景:后端改用内网 HTTPS,内网服务器部署自签证书(不是公网通配证)
内网服务器网关 / 防火墙放行来自防火墙代理地址段的访问
五、DNS 配置
所有子域名:shturl.cc/9、shturl.cc/S、shturl.cc/O,A 记录解析到防火墙公网 IP。
六、业务验证
浏览器无痕窗口访问各个子域名,点击小锁查看证书:证书是 *.shturl.,有效期正常,无证书报错
测试页面功能、登录、上传下载等业务功能
验证后端日志:能拿到真实客户端 IP(X-Forwarded-For 生效)
openssl 命令校验(可选)
openssl s_client -connect shturl.cc/9:443
查看返回证书主体为 *.shturl.
证书到期替换步骤(后续维护,仅防火墙操作,内网不动)
推荐方案:新建 SSL 模板测试,切换,方便回滚
获取新签发的通配证书 + 配套新私钥 + 中间链(新证书必须搭配新私钥,新旧不能混用)
防火墙证书管理上传新证书,新建 SSL 模板 wildcard-new-*.shturl.
编辑反向代理虚拟服务,把 SSL 模板从旧模板改为新模板,提交保存配置
无痕浏览器测试所有子域名,确认证书有效期更新
业务稳定运行一段时间后,再删除旧证书 / 旧模板
紧急回滚:切回旧 SSL 模板即可,无需改动内网
常见踩坑清单
❌ 不开 SNI:多域名访问会出现证书不匹配告警
❌ 缺少中间证书链:浏览器提示证书不信任
❌ 后端强制 HTTPS 跳转:出现重定向死循环,开启 X-Forwarded-Proto 解决
❌ 新证书用旧私钥:TLS 握手失败,网站打不开
❌ 防火墙性能不足:大量并发 HTTPS,CPU 占高,需要评估设备性能
❌ 通配证书范围限制:*.shturl. 不能匹配 shturl. 根域名,如果需要根域名,要选 SAN 证书同时包含根域名 +*.shturl.