用户登录
个人主页 用户中心 我的订单 添加授权 管理授权
退出登录
用户登录 用户注册
欢迎来到 UC建站系统

网站刚上线一周早上打不开显示连接不是私密,Let's Encrypt免费证书90天过期自动续期被关的惨痛教训

网站刚上线一周,早上打开手机发现客户群里有三个人在说"你们网站打不开了"。第一反应是服务器挂了,SSH连上去CPU和内存都正常,Nginx在跑,但浏览器就是显示"您的连接不是私密连接"。查了十分钟才发现是Let's Encrypt的90天免费证书过期了,宝塔面板的自动续期cron任务不知什么时候被关掉了。更离谱的是,当时在宝塔点"申请"只花了3秒就重新签发了,证书部署后网站立刻恢复,但这十分钟里已经有7个客户发消息说"以为你们公司倒闭了"

SSL证书配完不等于完事了

一个完整的SSL证书生命周期是:选类型 → 申请 → 部署 → 强制HTTPS → 修复混合内容 → 配置HSTS → 自动续期 → 定期检查。大多数翻车发生在以为"部署完就完事了"之后——证书过期了没人知道、页面引了一张HTTP图片导致绿锁变灰、续期脚本被误删了三个月才发现。

这篇文章把八个环节从头到尾拆一遍,每个环节该用什么工具、最容易在哪个节点翻车、翻车了怎么救。

DV够用吗?OV值不值?EV是不是智商税?

先把这个最基础的问题说清楚:DV/OV/EV三种证书的加密强度完全一样,区别只在于CA机构验证了多少你的身份信息。打个比方:DV证书相当于你拿身份证拍了张照发过去,CA说"好,域名是你注册的,给你发证";OV证书相当于你还提交了营业执照、公司地址,CA打电话核实了你的公司确实存在;EV证书相当于连公司章程、股东信息都审查了一遍。

对比维度DV(域名验证)OV(组织验证)EV(扩展验证)
验证什么仅域名所有权域名+企业营业执照域名+企业+股东+经营地址
签发速度3秒-10分钟1-3个工作日3-7个工作日
浏览器表现🔒 小锁🔒 + 企业名可查看🔒 + 企业名(部分浏览器)
单域名价格免费 - 158元/年1,280元/年起1,880元/年起
通配符价格880元/年3,980元/年更高
适合个人博客、测试站、资讯站企业官网、电商、SaaS银行、支付、医疗、政府

一句话选型:个人博客、企业展示站、内容资讯站——Let's Encrypt免费DV证书完全够用,浏览器小锁和付费DV证书一毛一样。如果你的网站涉及用户注册、在线支付、会员信息,上OV证书,不是因为加密更强,而是因为用户可以点击小锁查看你的企业名称,这是反钓鱼最直接的信任信号。银行、支付、证券——EV证书,这是监管合规要求,不是你想不想的问题。

1 - 网站刚上线一周早上打不开显示连接不是私密,Let's Encrypt免费证书90天过期自动续期被关的惨痛教训 - UC建站系统

关于域名覆盖范围还有一个选择:如果你的域名有多个子域名(blog.example.com、shop.example.com、api.example.com),买一张通配符证书(*.example.com)比买多张单域名证书便宜得多。如果多个完全不同的主域名(example.com、example.cn、example.co.uk),用多域名证书

宝塔面板申请Let's Encrypt:3秒签发,但5个前提条件有一个不满足就失败

宝塔面板是中文站长群体里SSL配置门槛最低的方案。路径:网站 → 选中域名 → SSL → Let's Encrypt → 勾选域名 → 申请。3秒后证书就部署好了,勾上"强制HTTPS"就全部搞定。

但这个"3秒签发"有五个前提条件,任何一个不满足都会申请失败——而且宝塔的错误提示往往只有一个含糊的"验证失败,请检查域名解析"。

#前提条件检查方法没满足的表现
1域名已解析到服务器IPping 你的域名验证请求发到了错误IP,Let's Encrypt找不到验证文件
280端口防火墙已放行宝塔安全页+云厂商安全组HTTP验证请求被防火墙拦截,超时
3网站已创建且80端口正常响应浏览器访问 http://域名Nginx/Apache没绑定这个域名
4/.well-known/目录可公开访问检查网站根目录是否有这个文件夹伪静态规则或CDN拦截了验证路径
5未超过Let's Encrypt频率限制等一小时再试每小时每个域名最多申请5次,超过就报错

第4条是最容易被忽略的。如果你用了CDN(Cloudflare、阿里云CDN等),Let's Encrypt的HTTP验证请求打不到你的源服务器,而是被CDN节点拦截了。解决方案:申请证书时暂时关闭CDN的代理模式(Cloudflare里把橙色云朵点灰),等证书签发部署好之后再开回来。或者用DNS验证方式代替HTTP验证——宝塔面板也支持DNS验证,但需要手动添加TXT记录,比HTTP验证多一步。

Nginx手动配置:三步拿到SSL Labs A+评分

如果不用宝塔,纯手动在Nginx上配置SSL证书,核心是三步:拿到证书文件 → 配置Nginx → 安全加固。

/etc/nginx/conf.d/example.com.conf

# 80端口 → 强制跳转443

server {

listen 80;

server_name example.com www.example.com;

return 301 https://$host$request_uri;

}

 

server {

listen 443 ssl http2;

server_name example.com www.example.com;

 

# 证书路径

ssl_certificate /etc/nginx/ssl/fullchain.pem;

ssl_certificate_key /etc/nginx/ssl/privkey.pem;

 

# 安全加固(TLS 1.2/1.3,禁用旧协议)

ssl_protocols TLSv1.2 TLSv1.3;

ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;

ssl_prefer_server_ciphers on;

2 - 网站刚上线一周早上打不开显示连接不是私密,Let's Encrypt免费证书90天过期自动续期被关的惨痛教训 - UC建站系统

 

# OCSP Stapling(减少TLS握手延迟)

ssl_stapling on;

ssl_stapling_verify on;

 

# HSTS(强制浏览器只用HTTPS访问)

add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

 

root /var/www/example.com;

index index.html index.php;

}

这个配置跑完 nginx -t && nginx -s reload,去 SSL Labs(ssllabs.com)测一下,TLS 1.2/1.3 + 现代密码套件 + OCSP Stapling + HSTS 四项全开,评分就是A+。如果少了OCSP Stapling或用了旧密码套件(如包含RC4、3DES),评分会掉到B或C。

六个翻车场景,个个都是真实发生过的事

翻车一:证书过期,自动续期根本没跑

宝塔面板的Let's Encrypt自动续期依赖cron任务。如果你重装过系统、迁移过面板、或者手动清理过crontab,续期任务可能已经不在了。检查命令:crontab -l | grep acme,如果没输出,续期脚本已经丢了。手动补一句:"/www/server/panel/tool/acme.sh" --cron --home "/www/server/panel/vhost/acme" 加到crontab里,每天凌晨跑一次。

翻车二:绿锁变灰,因为一张产品图走了HTTP

SSL证书部署正确、强制HTTPS开了、地址栏也显示HTTPS——但小锁是灰色的,旁边有个感叹号。F12打开Console,看到一行黄色警告"Mixed Content: The page was loaded over HTTPS but requested an insecure image"。排查方法:浏览器开发者工具 → Security标签 → 查看非安全来源。根源通常是WordPress文章里插入的图片链接是绝对路径http://,或者在主题设置里填的Logo地址是http://。

翻车三:中间证书没配,手机能打开电脑打不开

服务器只配置了网站证书(cert.pem),没配中间证书(chain.pem)。结果:Chrome桌面端报"NET::ERR_CERT_AUTHORITY_INVALID",但手机Safari能打开——因为手机系统预置了中间证书而桌面端没有。修复:把fullchain.pem(网站证书+中间证书拼接)而不是cert.pem配置到ssl_certificate指令里。

翻车四:WordPress换域名后全站图片走HTTP

网站从HTTP升到HTTPS后,WordPress数据库里存了几百条带http://的图片链接。手动改数据库怕搞坏序列化数据,用插件最安全。Really Simple SSL免费版一键检测并修复混合内容,Better Search Replace可以批量替换数据库里的http://为https://(但注意序列化数据要勾选"序列化安全"选项)。

翻车五:CDN开了HTTPS但源站是HTTP,无限重定向

Cloudflare开启了"Always Use HTTPS",但源站的Nginx也配了HTTP→HTTPS 301跳转。用户请求到达CDN → CDN强制HTTPS → 请求转发到源站 → 源站又做了一次301 → CDN收到301后再发HTTPS请求 → 无限循环。浏览器显示"重定向次数过多"。解决方案:CDN和源站只在一端做强制HTTPS跳转,另一端关掉。通常让CDN做,源站不跳转。

翻车六:SSL配好了但百度收录的还是HTTP版本

网站上线HTTPS后,百度搜索结果的链接还是http://开头。用户点进来先经过301跳转到https://,多了一次网络往返,而且百度对301跳转的权重传递不是100%。解决办法:去百度站长平台(ziyuan.baidu.com)做站点改版——把HTTP版本改版到HTTPS版本,通知百度所有收录链接统一更新。Google方面在Search Console里添加HTTPS版本的新资源,然后做地址变更。这个过程通常需要2-4周才能全部更新完毕。

自动续期:三条防线确保证书永远不会再过期

Let's Encrypt证书90天有效期是故意的——设计理念就是"短有效期+强制自动续期"比"长有效期+人工记得续费"更安全。但如果自动续期脚本挂了,90天一晃就过去了。

三道防线

防线一:宝塔面板内置续期

宝塔默认在crontab里配置了每天凌晨运行的acme.sh续期任务。确认它存在:crontab -l | grep acme。如果不存在,宝塔面板 → 计划任务 → 添加Shell脚本 → 填入acme.sh续期命令 → 每天执行一次。

防线二:外部监控+告警

免费工具:UptimeRobot(uptimerobot.com)不仅可以监控网站是否在线,还可以监控SSL证书到期时间,到期前30天/14天/7天/1天分别发邮件告警。免费版支持50个监控项。另一个选择:SSL Certificate Expiry Monitor(Chrome插件),一键添加所有需要监控的域名。

防线三:日历提醒

Let's Encrypt证书每90天续期一次,在你的日历里设一个每80天重复的提醒:"检查所有站点SSL证书有效期"。自动化工具可能出bug,但你的日历提醒不会——这是最后一道物理防线。

不同场景的SSL配置方案

你的情况推荐方案年成本关键动作
个人博客、展示站宝塔 + Let's Encrypt DV$0确认cron续期+UptimeRobot监控
Nginx手动配置certbot + Let's Encrypt DV$0certbot自动续期+SSL Labs测到A+
企业官网OV证书(如GeoTrust 约1,600元/年)1,280-1,600元/年企业名称展示+反钓鱼信任
电商、支付、金融EV证书(如DigiCert 约4,500元/年)1,880-4,500元/年监管合规+最高信任度
多个子域名通配符证书(DV 880元/年)880元/年起一张证书覆盖 *.example.com 所有子域名
多个不同主域名多域名证书按域名数计一张证书绑多个独立域名
已用CDN(Cloudflare等)CDN免费SSL + 源站也配证书$0CDN→源站也走HTTPS(严格模式)

SSL证书配置这件事,技术门槛已经降到了历史最低——宝塔面板3秒签发Let's Encrypt,Cloudflare免费CDN自带SSL,WordPress有Really Simple SSL一键修复混合内容。翻车的根因几乎从来不是"不知道怎么配",而是配完之后忘了维护:证书过期了没人知道、自动续期脚本被误删了三个月才被发现、一张HTTP图片让全站绿锁变灰但没人检查过。把自动续期确认、UptimeRobot监控、日历提醒这三道防线全部设好,SSL证书才算真正配完了。

相关推荐
在线客服
👇找客服拿折扣
QQ咨询&售后
在线时间
11:00 ~ 5:30
QQ:3155555535
👇联系QQ
👇联系WX
首页 程序 帮助 登录