导读:网站从 HTTP 升级到 HTTPS 已经是标配,但真正上线时总会遇到各种问题:证书部署后浏览器仍报不安全、证书到期忘记续期、HTTPS 页面里的 HTTP 资源被拦截。本文记录一套完整的 HTTPS 证书管理流程:申请部署、自动续期与混合内容排查。
一、HTTPS 解决什么问题
HTTP 是明文传输,账号密码、表单数据在链路中可被窃听或篡改;HTTPS 在 HTTP 与 TCP 之间加入 TLS 层,解决三件事:
加密:数据传输不可被窃读;
完整性:内容无法被中间人篡改;
身份认证:证书证明你访问的确实是目标站点。
现代浏览器对纯 HTTP 站点会标记"不安全",HTTPS 也是 HTTP/2、很多新 Web API 的前置条件。
二、证书申请与部署
证书申请的关键是证明域名所有权,常见方式有 DNS 解析验证与文件验证。拿到证书后在 Web 服务器配置。Nginx 示例:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/ssl/example.com.pem;
ssl_certificate_key /etc/ssl/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://127.0.0.1:8080;
}
}同时保留 80 端口并 301 跳转到 HTTPS,避免用户手动输协议:
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}三、自动续期:别让证书过期
免费证书有效期通常只有 90 天,靠人工续期迟早出事。推荐用 acme 客户端自动续期:
# 测试续期流程(不实际更换证书)
acme.sh --renew -d example.com --dry-run
# 写入定时任务,每天检查、临近过期自动续期并重载服务
0 3 * * * /root/.acme.sh/acme.sh --cron --home /root/.acme.sh续期后必须 reload(不是 restart)Web 服务让新证书生效。建议再加一层外部监控:定时检测证书到期时间,剩余 20 天时告警,双保险。
四、混合内容排查
页面升级到 HTTPS 后,如果里面引用了 HTTP 的图片、脚本、接口,浏览器会拦截或告警,这就是混合内容。排查方法:
打开浏览器控制台,查看 Mixed Content 警告,逐条定位;
静态资源统一改成协议相对路径或直接写 https://;
第三方资源只引用支持 HTTPS 的版本,不支持的资源下载到自己的同源地址托管;
用内容安全策略头自动升级简单资源:
响应头:Content-Security-Policy: upgrade-insecure-requests
注意:upgrade-insecure-requests 只能兜底,第三方接口本身不支持 HTTPS 时仍然要换源。
五、常见踩坑清单
证书链不完整:只配了站点证书没配中间证书,部分老浏览器报证书错误,需要拼接完整链;
域名不匹配:证书覆盖 example.com 但访问 www.example.com,申请时把需要的域名都列入 SAN;
续期后没重载服务:文件换了但内存里还是旧证书,外部检测仍旧;
测试环境漏配:测试站用了自签证书,联调时接口被浏览器拦截,测试环境也应用统一证书策略。
六、纳入发布流程的运维建议
证书申请、服务器配置与续期定时任务是一项持续性运维工作,建议纳入发布流程:新域名上线时同步申请证书,部署后配置自动续期与到期告警,并用清单定期巡检。如果网站基于成型的建站平台搭建(如乔拓云企业网站),证书的申请、部署与续期通常在域名管理流程中一并完成,运维侧只需确认域名绑定与 HTTPS 开关状态正确。
七、复盘清单
上线后:用浏览器与在线检测工具各测一次,确认证书链完整、协议版本合规;
运维侧:确认自动续期任务与到期告警都生效;
页面侧:控制台无混合内容警告,所有资源走 HTTPS。
结语
HTTPS 不是"配一次就结束"的工作:部署解决有没有,自动续期解决会不会掉,混合内容排查解决页面是否真正安全。把这三件事流程化,网站的安全基线才算稳固。本文仅作技术分享,各平台功能以官方实时信息为准。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。