域名解析刚生效浏览器地址栏左边那个不安全三个字就先跳出来了——这是很多新手第一次在1Panel上折腾SSL 证书的场景。有人照着教程点了几步看着面板上绿色的已部署心里踏实了结果第二天换个浏览器访问报NET::ERR_CERT_AUTHORITY_INVALID还有人图省事用了自动签发三个月后证书到期没续上站点直接白屏被用户当成挂了。我在实际运维里见过太多类似事故所以这篇不打算写成点这里、点那里的截图流水账而是把1Panel 部署 SSL 证书这件事拆成几层讲清楚证书在哪一层生效、自动签发和手动上传各自适用什么场景、反向代理链路里证书该怎么摆、续签为什么会失效、出错时用什么命令一行行查。适合刚接手一台云服务器、准备把个人站点或内部服务从 HTTP 迁到 HTTPS 的朋友也适合已经会点面板但没弄明白原理、遇到报错只能重装的人。1. 先把证书在哪一层生效想明白1.1 证书不是面板的一个开关而是绑定在监听端口上的新手最容易踩的认知坑是把 SSL 证书当成 1Panel 里的一个全局状态点一下申请好像整台机器就变安全了。实际上证书是绑在具体的监听地址和端口上的同一台机器上不同网站、不同端口完全可以用不同的证书甚至有的站还是 HTTP。1Panel 本身是用 OpenResty 做 Web 服务的每个网站在配置目录下会生成一份独立的 server 配置块证书路径、私钥路径、TLS 版本、加密套件都写在这个块里。你在面板上点选择证书本质是往这份配置里写入ssl_certificate和ssl_certificate_key两行。理解这一点之后很多现象就顺了为什么面板上显示证书已部署但我访问某个子域名还是报错因为那个子域名压根没绑到这个网站或者绑到了一个没配证书的 server 块。为什么我用 IP 访问会提示证书名称不匹配因为证书是签给域名的你拿 IP 去访问浏览器比对的是证书里的域名和地址栏里的地址天生对不上。证书永远服务于域名 端口这个组合脱离这个组合谈部署成功没有意义。所以动手前先画一张小表把要上 HTTPS 的入口列清楚主域名、带 www 的、API 子域、后台管理子域、面板自身。每一项对应哪份证书、走不走 CDN、是不是反向代理到内网端口先写下来后面按表推进就不会乱。1.2 一张图理清三个位置网站、面板、反代实际要配 HTTPS 的地方通常有三处很多教程混着讲导致新手以为配一处就够了。位置访问入口证书配置在哪常见遗漏业务网站域名 443网站 - 配置 - HTTPS只配了主域忘了子域反向代理后端内网 IP:端口通常不需要证书误在后端也配证书重复加密运维面板自身面板端口面板设置里的面板 SSL一直用 HTTP 裸奔第三处最容易被忽略。很多人把业务站配得漂漂亮亮运维面板还开着 HTTP登录密码在公网明文传输。1Panel 的面板 SSL 支持上传自有证书也支持自签自签的话浏览器会警告但至少链路是加密的配合安全入口和 IP 白名单风险能压下去一截。至于反向代理的后端绝大多数情况下不需要证书。反代流量在回环或内网里跑加证书只是徒增一层握手开销和维护成本。我在某公司内网见过有人给每个 Node 服务都配了自签证书结果到期时间各不相同每隔一段时间就有一个服务 502排查起来极其难受。除非你的后端要跨公网、或者有合规要求必须端到端加密否则让反代终止 TLS 就够了。1.3 证书类型怎么挑别一上来就买最贵的按验证等级分 DV、OV、EV按覆盖范围分单域名、多域名、泛域名。对个人站和内部系统DV 完全够用浏览器显示的小锁和 OV 是一模一样的区别只在证书详情里有没有组织信息。只有在需要对公展示资质、或者客户合同里明确要求时OV 才有实际意义。EV 现在主流浏览器也不再给地址栏绿标了性价比很低。覆盖范围这块反而更值得算。假设你有a.example.com、b.example.com、api.example.com三个子域且以后还会加。买单域名证书就要买三张、还要维护三个到期日一张泛域名证书*.example.com全包但注意泛域名不覆盖多级x.y.example.com不在这张证书的范围内。另外泛域名通常只能走 DNS 验证不能走 HTTP 文件验证这一点直接决定了你后面在 1Panel 里该选哪种签发方式。2. 部署前的准备这几件事没做后面全白搭2.1 域名解析A 记录、AAAA 记录和 TTL 的坑证书签发的前提是验证方能确认你确实控制这个域名。HTTP 验证要求从公网访问http://你的域名/.well-known/acme-challenge/xxx能拿到指定内容这就要求域名解析已经指向这台机器且 80 端口通。所以解析必须提前做最好提前半小时以上因为 TTL 缓存不是瞬时生效的。最常出问题的是 AAAA 记录。如果你的域名同时有 A 记录和 AAAA 记录而机器只有 IPv4验证方可能优先走 IPv6连接失败签发就卡住。我遇到过好几次解析明明对、就是验证不过最后都是删掉 AAAA 记录解决的。实操建议签发期间只保留 A 记录等证书下来再按需补 IPv6。另外 IPv4 地址填错一位、或者把域名解析到了 CDN 的 IP 上也会导致验证失败。走 CDN 的情况需要特别处理后面第 6 节会专门说。2.2 端口放行80 和 443 缺一不可HTTP 验证依赖 80访问走 443。面板的主机下面有防火墙管理云厂商控制台还有一层安全组两层都要放行。这一点新手经常只改一层就以为完事然后对着超时干瞪眼。# 在服务器上确认端口监听状态 ss -lntp | grep -E :(80|443)\b # 确认防火墙规则firewalld 为例 firewall-cmd --list-ports如果ss看不到 443 监听说明 Web 服务没起来或者配置没生效如果本机能看到监听但外网访问超时八成是云厂商安全组没开。这两个方向必须分开判断别一股脑去改 Nginx 配置。2.3 面板版本、安全入口与一次完整备份动手前先做两件事升级面板到较新版本做一次快照或备份。1Panel 的版本迭代里证书管理模块有过功能调整老版本可能没有某些验证方式的入口照着新教程找按钮会找不到。备份这块我强调一次改 HTTPS 前一定要能回滚。最省事的做法是在云厂商那边打个快照或者把网站配置目录整个打包。tar czf /root/site-conf-backup-$(date %F).tar.gz \ /opt/1panel/apps/openresty/openresty/conf/ 2/dev/null面板里的应用和网站数据目录也建议一并备份。配 HTTPS 本身不会动数据但一旦你把强制跳转开上又配错了证书用户访问会直接 4xx回滚速度决定故障时长。我个人的习惯是任何涉及 443 的变更先在低峰期做改完立刻用手机流量不走本地缓存访问一遍验证。3. 两条路线自动签发和手动上传怎么选3.1 自动签发省心但要选对验证方式1Panel 的证书菜单里可以申请免费 DV 证书走 ACME 协议。填写邮箱、域名选择验证方式等待签发。验证方式主要有三类适用场景差别很大验证方式需要条件适合场景缺点HTTP 文件验证80 端口公网可达域名已解析到本机单域名、机器直接对外通配符不支持CDN 会拦截DNS 接口验证DNS 服务商提供 API 密钥通配符、CDN 后方站点需要配 API 权限手动 DNS 验证能手动加 TXT 记录临时签发、无 API 权限每次续签都要人工介入个人站首选 HTTP 验证配置最简单。要多子域或者已经在 CDN 后面就走 DNS 接口验证。手动 DNS 验证只适合一次性场景续签时会很痛苦因为自动续签流程没法替你加 TXT 记录。还有一个细节申请时填的邮箱最好用一个能长期收信的地址证书机构在到期前会发提醒邮件。这个提醒曾经救过我一次——某台机器上的续签任务因为磁盘满了静默失败就是靠邮件发现的。3.2 手动上传商业证书和云厂商证书的落地如果你手上已经有证书文件1Panel 支持直接上传。上传时要注意几个字段的对应关系搞错了会签出证书链不完整的错误证书CRT/PEM服务器证书有的服务商给的文件里已经包含了中间证书。私钥KEY和证书配对的密钥绝对不能泄露也不要提交到代码仓库。证书链/中间证书部分场景单独提供一个文件。判断是否完整可以用在线工具但更靠谱的是本地验证# 查看证书包含的域名和有效期 openssl x509 -in fullchain.pem -noout -subject -dates -ext subjectAltName # 验证证书链是否完整需要系统根证书 openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt fullchain.pem第二条命令返回OK才算链完整。如果报unable to get local issuer certificate就是缺中间证书需要把中间证书拼到服务器证书后面顺序是服务器证书在前、中间证书在后拼反了照样报错。3.3 格式转换pfx 转 pem 的两行命令不少云厂商导出的格式是.pfx或.p121Panel 要的是 pem 文本格式得转一下。转换时注意-nodes参数它让私钥不加密输出否则面板读取私钥时会因为要密码而失败。# 导出证书链包含服务器证书和中间证书 openssl pkcs12 -in cert.pfx -nokeys -out fullchain.pem -nodes # 导出私钥 openssl pkcs12 -in cert.pfx -nocerts -nodes -out privkey.pem # 如果 pfx 有密码命令会提示输入转换完先cat fullchain.pem看一眼正常情况下应该能看到至少两段-----BEGIN CERTIFICATE-----。只有一段的话说明这个 pfx 里没带中间证书得找服务商要中间证书文件。4. 真正把 HTTPS 跑起来网站与反向代理配置4.1 新建站点并绑定域名的完整顺序正确顺序是先建站、配好 HTTP 能访问再上证书。反过来做一旦 443 出问题你连 HTTP 都没得测排查会陷入两难。在网站菜单里创建网站填主域名选择运行环境静态站选静态PHP 选对应版本Node 项目走反向代理或独立运行环境。创建完成后先别急着开 SSL用浏览器访问http://你的域名确认能打开。这一步验证的是域名解析、端口放行、站点绑定三件事同时成立。确认 HTTP 正常后进入网站配置里的 HTTPS 页签选择刚才签发或上传的证书保存。此时 1Panel 会往 server 配置块里写入证书路径并重载 OpenResty。刷新页面地址栏应该出现小锁。如果没有先看第 6 节的排查表。4.2 反向代理场景证书放在哪一层前后端分离或者把内网服务暴露出去一般会建一个反向代理站点。这时候证书配置在代理层也就是 1Panel 里的这个站点上后端服务保持 HTTP 即可。原理很简单外部浏览器和代理层之间是加密的代理层和内网服务之间是明文两段独立。配置时注意几个容易出问题的点。第一代理目标地址要用内网 IP 或回环地址不要写公网域名否则会绕一圈还可能被安全组拦。第二Host头要正确传递很多后端框架靠这个头做路由或生成链接透传错了会生成http://开头的绝对链接浏览器在 HTTPS 页面加载 HTTP 资源直接触发混合内容拦截。第三超时时间要按业务调默认几十秒对普通页面够用对大文件上传或长轮询就不够。# 反向代理后常见问题后端生成的绝对链接还是 http # 检查代理配置里是否传递了正确的协议头 curl -I https://api.example.com/health如果后端框架需要知道外部其实是 HTTPS通常要在代理层加上X-Forwarded-Proto: https这类头具体写法取决于框架这件事我在第 6 节会再展开。4.3 强制 HTTPS、HSTS 与 TLS 参数的取舍证书配好后建议开启 HTTP 到 HTTPS 的跳转。1Panel 的 HTTPS 页面有这个开关打开后所有 80 请求会 301 到 443。这一步能避免用户手打域名时走进明文通道。HSTS 要不要开它的作用是告诉浏览器以后这个域名只许走 HTTPS浏览器会记住一段时间期间即使用户输http://也会本地转成 HTTPS且不再询问是否信任证书。好处是防降级攻击代价是一旦你某天证书出问题用户连点继续访问的选项都没有。所以我的建议是先在测试域名上跑一两周确认续签稳定再逐步把 max-age 从几百秒加到一年。上线初期直接拉满一年等于给自己埋雷。TLS 版本方面现在的合理选择是只保留 TLS 1.2 和 1.3。TLS 1.0/1.1 早已被主流浏览器标记为不安全留着只会拉低评分。加密套件用面板默认的现代组合即可除非你要兼容很老的嵌入式客户端否则没必要手工指定一堆。注意修改 TLS 版本和加密套件后务必用旧版客户端测一次。有些企业内部还有跑老系统的机器一刀切禁用低版本会让这部分用户直接连不上。4.4 面板自身的 HTTPS 也别落下业务站配完回头看看运维面板。在面板设置里有面板 SSL 相关选项可以上传证书也可以让面板自签一份。自签的缺点是浏览器会警告但链路加密是实打实的。我的常规做法是给面板单独用一个不容易猜到的子域比如ops-随机字符串.example.com配上正式证书同时开启安全入口、限制访问 IP。这样做的收益不只是加密面板一旦暴露在公网且用默认端口扫描器几分钟就能发现登录接口会被反复撞库。加密 隐藏 访问控制三件事叠加才算及格。改面板 SSL 有个坑要提前知道改完端口或协议当前会话可能直接断开你需要用新的地址重新登录。所以不要在只有单一网络入口、且身边没有备用通道的时候改我吃过一次亏改完发现防火墙规则也顺手改了最后从云厂商的远程连接救回来。5. 续签与轮转别让到期日变成事故日5.1 自动续签为什么也会失败免费证书的有效期现在普遍在 90 天左右且趋势是越来越短。1Panel 会为自动签发的证书安排续签任务正常情况不用管。但它失败的原因相当多样我按遇到频率排一下验证方式失效换了 DNS 服务商、API 密钥过期或被删权限DNS 验证直接挂掉。80 端口被占装了别的服务抢了 80或者防火墙规则被改。域名解析变了机器迁移后忘了改 A 记录验证方打到旧 IP 上。磁盘或权限问题写不进证书目录任务静默失败。CDN 拦截站点挂在 CDN 后面HTTP 验证请求被 CDN 接走了。这些问题的共同点是不会主动通知你只能靠到期日兜底。所以我从来不把自动续签当成免维护的承诺而是当成一个需要定期抽查的机制。5.2 手动证书的轮转清单手动上传的证书不会自动续签必须在日历上标记。我给自己定的规矩是证书到期前 30 天开始处理留出两周缓冲给可能出现的审批、采购、格式转换问题。轮转的时候不是简单换个文件就完事。要做的事包括确认新证书的域名列表和旧的一致别漏了 SAN 里的子域确认私钥和证书配对更新后重启或重载服务清理旧文件但保留一份最近过期的做对照记录新证书的到期时间。如果是多台机器共用一张证书那每一台都要更新漏一台就是隐患。我见过最典型的事故是多机部署运维只更新了主节点备用节点上的证书过期切换流量时用户全部报错。5.3 加一道外部监控别只信任面板面板显示正常不代表外部访问正常。最稳妥的是加一个外部可用性监控从公网定时探测你的域名同时检查证书剩余有效期。很多免费监控服务都支持证书到期提醒。如果不想依赖外部服务写个简单的脚本跑定时任务也够用#!/bin/bash # 检查证书剩余天数低于 21 天报警 DOMAINexample.com END_DATE$(echo | openssl s_client -servername $DOMAIN \ -connect $DOMAIN:443 2/dev/null \ | openssl x509 -noout -enddate | cut -d -f2) END_TS$(date -d $END_DATE %s) NOW_TS$(date %s) DAYS$(( (END_TS - NOW_TS) / 86400 )) echo 剩余 $DAYS 天 [ $DAYS -lt 21 ] echo 证书即将过期请处理这个脚本的关键是从外部探测而不是读本地文件——它能同时发现证书没续上和服务根本没起来两类问题。6. 报错实录从现象倒推原因6.1 浏览器报错对照表把常见报错和对因整理成表遇到问题先查表定位方向再去翻具体配置。浏览器提示可能原因优先排查证书已过期续签失败或未更新查看证书有效期证书名称不匹配访问的域名不在证书 SAN 里核对证书覆盖域名证书链不完整缺中间证书拼接 fullchain无法提供安全连接协议/套件不兼容检查 TLS 版本设置混合内容被拦截页面里有 HTTP 资源查看控制台具体资源连接被重置端口未放行或被拦截检查防火墙和安全组表格之外补一句先用无痕窗口测。浏览器会缓存 HSTS 状态和证书信息普通窗口里改了配置可能看不到变化白白浪费排查时间。6.2 三条命令定位大半问题命令行比浏览器更能说明问题。第一条看握手和证书链openssl s_client -connect example.com:443 -servername example.com /dev/null输出里注意Verify return code0 表示链完整非 0 大多是缺中间证书。第二条看证书详情echo | openssl s_client -connect example.com:443 -servername example.com 2/dev/null \ | openssl x509 -noout -subject -issuer -dates -ext subjectAltName重点看 SAN 里到底列了哪些域名很多名称不匹配就是这里少了一条。第三条确认跳转和响应头curl -I http://example.com curl -I https://example.com第一条应该返回 301 且 Location 指向 https第二条返回 200。如果第二条返回 502问题在反代后端跟证书无关方向要立刻切换。6.3 几个排查时容易走错的方向误把 502 当证书问题。证书出问题浏览器是拒绝建立连接你根本收不到 HTTP 响应。能收到 502、504 这类状态码说明 TLS 握手已经成功问题在后端。这个判断非常重要能省掉大量无用功。忘了 CDN 这一层。站点挂 CDN 后用户访问的是 CDN 节点节点回源到你的服务器。这时候你本地证书配得再好用户看到的还是 CDN 上的证书。要么在 CDN 侧上传证书要么把 CDN 的回源协议改成 HTTPS 并信任源站证书。如果 CDN 的回源走 HTTP 文件验证被拦就得改用 DNS 验证签发。内网访问被证书拦住。用192.168.x.x访问配了域名证书的站点必然报名称不匹配。规范做法是内网也走域名解析或者接受这个警告仅在内部使用。反向代理导致的重定向循环。开了强制 HTTPS后端又自己判断协议做跳转两边互相踢皮球浏览器报重定向次数过多。解决办法是让代理层传递正确的协议头或者只在一处做跳转。7. 我在实际部署里攒下的几条经验配置 HTTPS 这件事技术门槛其实不高难的是把边界情况想全。我总结几条自己反复验证过的心得。第一先把 HTTP 跑通再上证书。这个顺序看着笨但能把域名、端口、站点绑定和证书配置两类问题彻底分开。反过来做一旦不通你面对的是三重变量的组合排查时间会翻好几倍。第二每次变更只动一个变量。改证书、改跳转、改 TLS 版本、改反代一次只做一件做完立刻验证。我见过有人一次性全部改完出问题后完全不知道是哪一步引起的最后只能整体回滚重来。第三证书文件统一放一个固定目录并做好命名。1Panel 上传证书后会自己管理路径但如果你手工维护文件建议用域名-到期年月-fullchain.pem这种命名一眼能看出新旧和有效期。轮转时最怕拿错文件这种低级错误造成的线上故障并不少见。第四把到期前 30 天当成硬性检查点。不管是自动签发还是手动证书都去检查一次。自动续签失败往往是静默的而 30 天足够你从容处理等到剩三天才发现就只能在深夜救火了。第五测试要用外部视角。本机curl localhost通不代表公网通本地浏览器正常不代表别人的浏览器正常。手机切到移动网络、用无痕窗口、换一个 DNS 解析器这几个动作花不了两分钟却能提前发现大部分问题。我现在每次改完 443都会用手机流量访问一遍主域和一个子域这已经成了肌肉记忆。