SSL 证书管理 #

SSL 概述 #

什么是 SSL? #

SSL(Secure Sockets Layer)证书用于加密网站与用户之间的通信:

text
┌──────────────────────────────────────────────────────┐
│                                                      │
│  用户浏览器                                          │
│      │                                               │
│      │  HTTPS 加密通信                               │
│      ▼                                               │
│  ┌─────────┐                                         │
│  │ SSL 证书 │  ←  验证身份 + 加密数据                │
│  └────┬────┘                                         │
│       │                                              │
│       ▼                                              │
│  Vercel 服务器                                       │
│                                                      │
└──────────────────────────────────────────────────────┘

HTTPS 的好处 #

好处 说明
数据加密 保护敏感信息不被窃取
身份验证 确保用户访问的是真实网站
SEO 优化 搜索引擎优先 HTTPS 网站
浏览器信任 避免安全警告
现代功能 PWA、Service Worker 等需要 HTTPS

Vercel SSL 特性 #

自动 SSL #

text
┌─────────────────────────────────────────┐
│        Vercel SSL 特性                  │
├─────────────────────────────────────────┤
│  自动配置    →  添加域名后自动配置       │
│  免费证书    →  Let's Encrypt 证书       │
│  自动续期    →  无需手动续期             │
│  通配符支持  →  支持 *.example.com       │
└─────────────────────────────────────────┘

证书提供商 #

Vercel 使用 Let’s Encrypt 提供免费 SSL 证书:

text
Let's Encrypt 特点:
├── 免费
├── 自动化
├── 开放透明
└── 90 天有效期(自动续期)

SSL 配置流程 #

自动配置 #

text
添加域名 → DNS 验证 → 自动申请证书 → 配置完成
text
┌──────────────────────────────────────────────────────┐
│                                                      │
│  1. 添加自定义域名                                   │
│       │                                              │
│       ▼                                              │
│  2. 配置 DNS 记录                                    │
│       │                                              │
│       ▼                                              │
│  3. Vercel 自动检测域名                              │
│       │                                              │
│       ▼                                              │
│  4. 自动申请 SSL 证书                                │
│       │                                              │
│       ▼                                              │
│  5. HTTPS 生效                                       │
│                                                      │
└──────────────────────────────────────────────────────┘

查看证书状态 #

text
Project Settings → Domains → SSL
text
┌─────────────────────────────────────────┐
│  SSL Certificate                        │
├─────────────────────────────────────────┤
│  Status: Valid ✓                        │
│  Issuer: Let's Encrypt                  │
│  Valid From: 2024-01-01                 │
│  Valid To: 2024-04-01                   │
│  Auto-renewal: Enabled                  │
└─────────────────────────────────────────┘

证书状态说明 #

状态 说明 操作
Valid 证书有效 无需操作
Pending 正在申请 等待完成
Failed 申请失败 检查 DNS 配置
Expired 已过期 自动续期中

强制 HTTPS #

启用强制 HTTPS #

text
Project Settings → Domains → HTTPS
text
┌─────────────────────────────────────────┐
│  Force HTTPS                            │
├─────────────────────────────────────────┤
│  ☑ Redirect all HTTP traffic to HTTPS   │
│                                         │
│  [Save]                                 │
└─────────────────────────────────────────┘

通过配置文件 #

json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Strict-Transport-Security",
          "value": "max-age=31536000; includeSubDomains"
        }
      ]
    }
  ]
}

HSTS 配置 #

text
Strict-Transport-Security 响应头:
├── max-age=31536000     →  有效期 1 年
├── includeSubDomains    →  包含子域名
└── preload              →  加入浏览器预加载列表

自定义证书 #

上传自定义证书 #

Vercel 支持上传自定义 SSL 证书:

text
Project Settings → Domains → SSL → Upload Certificate
text
┌─────────────────────────────────────────┐
│  Upload Custom Certificate              │
├─────────────────────────────────────────┤
│  Certificate (PEM format)               │
│  ┌─────────────────────────────────┐    │
│  │ -----BEGIN CERTIFICATE-----     │    │
│  │ ...                             │    │
│  │ -----END CERTIFICATE-----       │    │
│  └─────────────────────────────────┘    │
│                                         │
│  Private Key (PEM format)               │
│  ┌─────────────────────────────────┐    │
│  │ -----BEGIN PRIVATE KEY-----     │    │
│  │ ...                             │    │
│  │ -----END PRIVATE KEY-----       │    │
│  └─────────────────────────────────┘    │
│                                         │
│  [Upload]                               │
└─────────────────────────────────────────┘

使用场景 #

text
┌─────────────────────────────────────────┐
│        自定义证书使用场景                │
├─────────────────────────────────────────┤
│  企业证书    →  组织内部信任             │
│  EV 证书     →  绿色地址栏               │
│  通配符证书  →  多子域名                 │
│  多域名证书  →  多个域名                 │
└─────────────────────────────────────────┘

通配符证书 #

自动配置 #

Vercel 自动为通配符域名配置 SSL:

bash
vercel domains add '*.example.com'

DNS 验证 #

text
类型: TXT
名称: _acme-challenge
值: [Vercel 提供的验证值]

使用场景 #

text
*.example.com SSL 覆盖:
├── app.example.com
├── api.example.com
├── blog.example.com
└── 任意子域名

证书续期 #

自动续期 #

text
┌─────────────────────────────────────────┐
│        证书续期流程                      │
├─────────────────────────────────────────┤
│  证书到期前 30 天                       │
│       │                                 │
│       ▼                                 │
│  Vercel 自动续期                        │
│       │                                 │
│       ▼                                 │
│  验证域名所有权                         │
│       │                                 │
│       ▼                                 │
│  签发新证书                             │
│       │                                 │
│       ▼                                 │
│  自动部署新证书                         │
└─────────────────────────────────────────┘

手动续期 #

如果自动续期失败,可以手动触发:

bash
vercel domains renew example.com

续期失败处理 #

text
检查项:
├── DNS 记录是否正确
├── 域名是否已过期
├── 是否有 DNS 验证记录
└── 联系 Vercel 支持

SSL 验证 #

在线验证工具 #

命令行验证 #

bash
openssl s_client -connect example.com:443 -servername example.com
bash
curl -vI https://example.com

查看证书详情 #

bash
echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -dates
text
notBefore=Jan  1 00:00:00 2024 GMT
notAfter=Apr  1 00:00:00 2024 GMT

常见问题 #

证书申请失败 #

text
常见原因:
├── DNS 记录未正确配置
├── DNS 传播未完成
├── 域名被防火墙阻止
├── 已有其他证书冲突
└── Let's Encrypt 速率限制

混合内容警告 #

text
问题:HTTPS 页面加载 HTTP 资源

解决方案:
├── 确保所有资源使用 HTTPS
├── 使用相对协议 //example.com/resource.js
├── 配置 CSP 升级不安全请求

CSP 配置:

json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Content-Security-Policy",
          "value": "upgrade-insecure-requests"
        }
      ]
    }
  ]
}

证书链不完整 #

text
问题:某些设备不信任证书

解决方案:
├── 确保证书链完整
├── 包含中间证书
└── 使用 SSL Labs 测试

Cloudflare SSL 配置 #

如果使用 Cloudflare:

text
Cloudflare SSL 模式:
├── Off          →  不推荐
├── Flexible     →  不推荐
├── Full         →  可用
└── Full (Strict) →  推荐

SSL 最佳实践 #

安全配置清单 #

text
┌─────────────────────────────────────────┐
│        SSL 安全配置清单                  │
├─────────────────────────────────────────┤
│  ✓ 启用强制 HTTPS                       │
│  ✓ 配置 HSTS                            │
│  ✓ 使用 TLS 1.2+                        │
│  ✓ 禁用弱加密算法                        │
│  ✓ 启用 OCSP Stapling                   │
│  ✓ 配置 CSP 策略                        │
└─────────────────────────────────────────┘

安全响应头配置 #

json
{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        {
          "key": "Strict-Transport-Security",
          "value": "max-age=31536000; includeSubDomains; preload"
        },
        {
          "key": "X-Content-Type-Options",
          "value": "nosniff"
        },
        {
          "key": "X-Frame-Options",
          "value": "DENY"
        },
        {
          "key": "X-XSS-Protection",
          "value": "1; mode=block"
        }
      ]
    }
  ]
}

下一步 #

SSL 配置完成后,接下来学习 预览部署 了解 Vercel 的预览功能!

最后更新:2026-03-28