隐私安全2026-03-20 8 分钟

HTTPS 证书那些事:从加密原理到免费部署

2026 年了,还有人不知道怎么给网站免费上 HTTPS?这篇从原理到实操,一次搞定。

我第一次配 HTTPS 的时候,还是在用自签名证书。那会儿浏览器弹出「不安全」的大红警告,用户吓得不敢访问,客户直接打电话过来问是不是被黑了。后来有了 Let's Encrypt,免费、自动、三行命令搞定,我才意识到:配 HTTPS 根本就不应该是个困难的事情,是之前的流程太反人类了。

最离谱的是有些云厂商至今还在卖天价 SSL 证书——一个通配符证书一年要几千块。你不告诉客户 Let's Encrypt 完全免费,然后在控制台的证书购买入口做得比免费证书入口醒目十倍。技术上这两种证书提供的加密强度完全一样,区别只在于 EV 证书会显示公司名(现在主流浏览器也不显示了)。除了极少数合规场景需要 OV/EV 证书外,绝大多数网站用 Let's Encrypt 就够了。

1. HTTPS 到底做了什么?

HTTPS = HTTP + TLS(Transport Layer Security)。TLS 在 TCP 和 HTTP 之间加了一层,提供三个核心保障:

加密

传输内容被加密,中间人无法窃听。即使在公共 WiFi 下,也无法被抓包看到明文。

认证

证书证明你访问的确实是目标服务器,防止 DNS 劫持把你导到钓鱼网站。

完整性

数据在传输过程中无法被篡改。运营商不能再往你的页面里注入广告了。

没有 HTTPS 的时代有多混乱?运营商劫持 HTTP 流量注入广告是家常便饭,你打开一个正规网站右下角突然弹出个赌博广告。公共 WiFi 下用 HTTP 登录,密码直接明文传输,旁边的人用 Wireshark 抓包就能看到。HTTPS 基本终结了这些乱象。

2. TLS 握手:1 个 RTT 建立安全连接

TLS 1.3(当前主流版本)将握手简化到了 1-RTT(一个来回),比 TLS 1.2 的 2-RTT 快了一倍。大致过程:

Client→ ClientHello:支持的密码套件列表 + 随机数 + 密钥共享参数
Server→ ServerHello:选定的密码套件 + 随机数 + 密钥共享参数 + 证书 + 签名验证
双方→ 各自用 ECDHE 算法计算出相同的会话密钥(对称密钥)
之后→ 所有 HTTP 数据都用这个对称密钥加密传输(AES-GCM)

核心思想是:用非对称加密(RSA/ECDSA)验证身份、协商密钥;再用对称加密(AES)加密实际数据。非对称加密安全但慢,对称加密快但需要共享密钥——TLS 握手就是用前者安全地交换后者。

3. 证书链:浏览器凭什么信任你

SSL/TLS 证书本质是一个「数字签名的身份证明」。浏览器验证证书的过程就是沿着证书链往上追溯,直到找到一个预装在系统中的根证书(Root CA)。

Root CA

预装在操作系统/浏览器中,自签名

Intermediate CA

由 Root CA 签发,用于签发终端证书

你的证书

由 Intermediate CA 签发,绑定你的域名

常见的坑:服务器只配了终端证书,没有配中间证书。部分浏览器会自动补全中间证书(Chrome),但有些不会(某些旧版安卓)。结果就是「我这里正常,用户那里报不安全」。解决方案:始终在 Nginx 配置中包含完整的证书链(fullchain.pem)。

4. Let's Encrypt:免费证书实操

Let's Encrypt 是一个免费、自动化的证书颁发机构(CA),全球超过 3 亿个网站在使用它。通过 ACME 协议自动验证域名所有权并签发证书,90 天有效期,支持自动续期。

# 使用 Certbot 一键部署(最常用的方式)

# 安装 Certbot
sudo apt install certbot python3-certbot-nginx

# 自动获取证书并配置 Nginx
sudo certbot --nginx -d example.com -d www.example.com

# 测试自动续期
sudo certbot renew --dry-run

# Certbot 会自动添加 crontab/systemd timer
# 证书到期前 30 天自动续期

适合使用 Let's Encrypt

  • • 个人博客、开源项目网站
  • • 中小企业官网和 Web 应用
  • • API 服务器的 HTTPS 加密
  • • 通配符证书(*.example.com)

可能需要付费证书

  • • 金融行业合规要求 OV/EV 证书
  • • 需要显示组织名称(部分旧浏览器)
  • • 企业级 SLA 和担保需求
  • • 代码签名证书(不同类型)

5. 现代部署:你可能根本不需要自己配证书

如果你使用现代的部署平台,HTTPS 通常是自动配置的,完全不需要手动折腾证书:

Vercel / Netlify / Cloudflare Pages

绑定域名后自动签发和续期证书,零配置。如果你的项目是纯前端(SPA/SSG),首选这些平台。

Cloudflare CDN

在 CDN 层面提供 HTTPS。即使你的源站是 HTTP,用户到 CF 边缘节点这段也是加密的(Flexible 模式)。但最佳实践是全链路加密(Full Strict)。

Docker + Caddy

Caddy 是唯一自动 HTTPS 的 Web 服务器。只要配置了域名,它会自动从 Let's Encrypt 获取证书并续期。Nginx 需要手动配 Certbot,Caddy 完全自动。

6. 上了 HTTPS 之后还要做什么?

配好证书只是第一步。还有几个安全相关的配置经常被忽略:

# Nginx 推荐安全配置

# 强制 HTTPS(301 重定向)
server {
    listen 80;
    return 301 https://$host$request_uri;
}

# HSTS:告诉浏览器以后都用 HTTPS 访问
add_header Strict-Transport-Security
    "max-age=31536000; includeSubDomains" always;

# 防止降级攻击:禁用不安全的 TLS 版本
ssl_protocols TLSv1.2 TLSv1.3;

# 优先使用服务端密码套件
ssl_prefer_server_ciphers on;

# OCSP Stapling:加速证书验证
ssl_stapling on;
ssl_stapling_verify on;

HSTS 预加载列表:你可以将域名提交到 hstspreload.org,让浏览器在第一次访问时就强制 HTTPS(而不是等 301 重定向)。但这是不可逆的操作——一旦加入预加载列表,移除需要数月时间。确认你不会再需要 HTTP 后再提交。

OneKit 全面使用 HTTPS

OneKit 部署在 Cloudflare Pages 上,自动配置了 HTTPS 和 HSTS。更重要的是,我们的所有工具都在浏览器本地处理数据——你的文件不会经过任何网络传输,从技术层面保障了 数据隐私安全