2025 年还让用户在地址栏看到"不安全"三个字,等于把流量往竞争对手那里送。本文从证书选型、免费方案到自动化续期,给出一套企业网站 HTTPS 落地的完整方案,并把最常见的"混合内容"告警一次解决。
一、证书类型怎么选
| 类型 | 验证级别 | 覆盖范围 | 适合场景 |
|---|---|---|---|
| DV(域名验证) | 仅验证域名所有权 | 单域名 / 泛域名 | 企业官网、博客、演示站 |
| OV(组织验证) | 验证企业资质 | 单域名 / 泛域名 | 对外业务系统、管理后台 |
| EV(扩展验证) | 最严格审核 | 单域名 | 金融、电商支付场景 |
对绝大多数企业官网:DV 泛域名证书(*.example.com)性价比最高,一张证书覆盖所有二级域名(www、api、img、m),新增子域无需重新签发。
二、免费方案:Let's Encrypt 完整实操
Let's Encrypt 证书 90 天有效,必须配自动续期。以最常见的 Nginx + Ubuntu 为例:
1. 安装 certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
2. 签发证书(自动改写 Nginx 配置)
sudo certbot --nginx -d example.com -d www.example.com \
--agree-tos -m admin@example.com --redirect
--redirect 参数会自动添加 80 → 443 的 301 跳转,一步到位。
3. 泛域名证书(需 DNS 验证)
sudo certbot certonly --dns-dnspod \
--dns-dnspod-credentials /etc/letsencrypt/dnspod.ini \
-d "*.example.com" -d example.com
DNS 验证通过 TXT 记录完成,certbot 插件可自动添加与清理记录,全程无需人工介入。
4. 自动续期(核心)
certbot 安装时已自带 systemd timer,验证一下即可:
# 模拟续期,验证自动化链路是否正常
sudo certbot renew --dry-run
# 查看定时任务
systemctl list-timers | grep certbot
血泪教训:一定要在上线当天执行 --dry-run 验证续期链路。大量网站 90 天后证书集体过期,都是因为签发成功但续期任务从未真正跑通过。
三、混合内容(Mixed Content):HTTPS 后最常见告警
页面通过 HTTPS 加载,但其中的图片、脚本、iframe 仍走 HTTP,浏览器会拦截或降级提示。排查与修复:
1. 定位不安全资源
# 服务端快速扫描首页中的 http:// 资源引用
curl -s https://example.com | grep -oE 'http://[^"'\''> ]+' | sort -u
2. 三种修复方式(按推荐度排序)
- 改协议相对路径:src="//img.example.com/a.png",跟随页面协议自动切换。
- 数据库批量替换:富文本历史内容中的 http:// 链接批量升级,注意先备份。
- 自动升级头(兜底):Nginx 加
add_header Content-Security-Policy "upgrade-insecure-requests";,浏览器会把页面内 http 请求自动升级为 https。
3. iframe/外链资源
地图、客服、视频等第三方嵌入务必确认对方支持 HTTPS;仍在用 http 的国内老牌统计代码、客服组件要升级到其新版本。
四、Nginx HTTPS 配置模板(含安全头)
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 安全增强头
add_header Strict-Transport-Security "max-age=31536000" always;
add_header X-Content-Type-Options nosniff;
}
# HTTP 全部 301 到 HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
HSTS 头建议在确认全站 HTTPS 稳定运行一个月后再加,避免子域未就绪时锁死用户。
五、上线检查清单
- 用 SSL Labs(ssllabs.com/ssltest)评分,目标 A 以上;常见扣分项是未启用 TLS1.3、证书链不完整(fullchain 一定要用对)。
- 检查所有子域(api、img、m)都在证书覆盖范围内。
- 微信内访问测试:微信对证书链不完整的站点会直接白屏。
- 小程序服务器域名配置(request/uploadFile 域名)必须为 HTTPS 且备案有效。
HTTPS 已经不是加分项而是底线。把证书自动化续期跑通、把混合内容清零,一次投入长期受益。