首页 / 知识中心 / 运维知识
运维知识

SSL 证书详解:为什么每个网站都需要 HTTPS

SSL 证书详解:为什么每个网站都需要 HTTPS

HTTPS 早不是加分项而是及格线:浏览器会标"不安全",小程序与支付接口强制要求,搜索引擎也把它当基础信号。免费 DV 证书对绝大多数站点已经够用。

先说结论:HTTPS 现在不是"高级配置",是及格线——Chrome 会对 HTTP 页面标"不安全",微信小程序和支付接口强制要求 HTTPS,搜索引擎也把它作为基础信号。对绝大多数企业站,免费的 DV 证书完全够用,没必要买几千上万的 EV 证书(浏览器早已不再为 EV 显示绿色地址栏)。真正需要付费 OV/EV 的,主要是金融、医疗等有明确合规要求的场景。

一、三种证书的区别

类型验证什么签发时间价格适合
DV(域名验证)只验证你控制这个域名几分钟到几小时免费 – 几百元/年绝大多数企业站、博客、小程序后端
OV(组织验证)额外验证企业真实存在1–3 个工作日几百 – 几千元/年需要向客户证明企业身份的 B 端站点
EV(扩展验证)最严格的企业审核3–7 个工作日几千 – 上万元/年金融、医疗等有监管要求的场景

需要说清楚的一点:过去浏览器会为 EV 证书显示绿色地址栏加公司名,这个特性主流浏览器已经取消。也就是说,普通访客看不出 DV 和 EV 的区别,都能看到锁形图标。为"显得更可信"而买 EV,在体验上已经买不到对应的效果了。

二、为什么必须上 HTTPS

  • 浏览器警告:Chrome、Edge、Safari 对 HTTP 页面会在地址栏标"不安全",表单页面还会额外提示,直接损伤信任
  • 功能强制:微信小程序的服务器域名、微信支付回调、很多第三方 API(地图、支付、推送)都要求 HTTPS
  • SEO 信号:搜索引擎明确把 HTTPS 作为排名的基础信号之一
  • 数据完整性:HTTP 明文传输,用户的手机号、留言内容在中间链路上可被读取或篡改

最后一条对留资表单尤其重要。客户在你网站上填的手机号,走 HTTP 就是在公网上裸奔。

三、免费的够不够用

够。Let's Encrypt 提供三个月有效期的免费 DV 证书,配合自动续期脚本可以完全无人值守;国内云厂商也普遍提供免费的 DV 证书(通常一年期,需手动续)。

唯一要注意的是自动续期必须真的配上。见过太多站点因为忘记续证书,在某天早上突然变成"不安全",而负责人根本不知道发生了什么。建议做法:

  • 用 certbot 之类的工具配置自动续期,并设置续期后自动重载 nginx
  • 加一个到期监控(很多免费监控服务支持检查证书剩余天数)
  • 把到期日写进运维日历

四、配置时最容易出问题的四件事

1. 证书链不完整。只部署了站点证书,没带中间证书。桌面浏览器通常能自动补全,但安卓旧版本、部分小程序环境和 API 调用会直接失败。用 SSL 检测工具查一下"证书链是否完整"。

2. 混合内容。页面是 HTTPS,但里面的图片、脚本、样式还写着 http://。浏览器会拦截或降级提示。解决办法是全站资源改用相对协议或直接写 https://,改完在控制台看有没有 mixed content 警告。

3. 没有强制跳转。用户访问 http:// 时应该 301 跳到 https://,而不是两个版本都能打开——后者会造成同一内容两套 URL,对 SEO 不利。

4. HSTS 开得太急。Strict-Transport-Security 能让浏览器之后只用 HTTPS 访问,但如果配错(比如子域名有纯 HTTP 服务),会导致整站无法访问且用户端难以回退。建议先用较短的 max-age(如 300 秒)验证,确认无误后再逐步加长。

五、一份 Nginx 配置参考

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}
server {
    listen 443 ssl http2;
    server_name www.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;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 1d;
    add_header Strict-Transport-Security "max-age=300" always;
}

注意 fullchain.pem 而不是 cert.pem——前者包含中间证书,就是上面说的"证书链完整"。

六、自签名证书不要用在生产

开发环境用自签名证书没问题,但绝对不要放到线上。浏览器会显示整页红色警告,用户需要手动点"高级 → 继续访问",转化率基本归零,而且搜索引擎会把它当作无效证书处理。

七、检查清单

  • 全站 HTTPS,HTTP 301 跳转到 HTTPS
  • 证书链完整(用在线工具验证,模拟安卓客户端)
  • 无混合内容,控制台无相关警告
  • 自动续期已配置并验证过一次真实续期
  • 有到期监控
  • 只启用 TLS 1.2 / 1.3,关闭 TLS 1.0 / 1.1
  • HSTS 从短 max-age 起步
  • 子域名(如 api、static)也覆盖了证书

携手微众,共创未来

有新项目,或想找长期技术伙伴,都可以直接聊。

周一至周五 9:00-18:00 即时响应

微信客服二维码

添加微信客服,1 对 1 沟通