# 阿里云 CDN 配置 HTTPS 证书：强制跳转、HSTS 与自动更新

> 在阿里云 CDN 上开启 HTTPS：选择数字证书管理服务证书或上传证书，配置强制跳转、HSTS、TLS 版本和 HTTPS 回源，并用 acme.sh 自动更新证书。

Source: https://ssl.sh/zh/guides/aliyun-cdn-https/
Last updated: 2026-11-10

阿里云 CDN 的 HTTPS 在加速域名的“HTTPS 配置”里开启：先选证书，再设置强制跳转、HSTS、TLS 版本和 HTTPS 回源。自定义上传的证书不会自动续期，可以用 acme.sh 的 `ali_cdn` 钩子在每次续期后自动推送到 CDN。

示例加速域名是 `cdn.example.com`（或 `www.example.com`）。菜单名称以截至 2026 年 11 月的阿里云 CDN 控制台为准。

## 前提条件

开启 HTTPS 前，加速域名要已经能通过 HTTP 正常访问。

- 已在阿里云 CDN 添加加速域名，CNAME 已指向 CDN 分配的地址，HTTP 访问正常。
- 加速区域包含中国内地的，域名已完成 ICP 备案。
- 一张覆盖该域名的证书：数字证书管理服务里的证书（见 [阿里云 SSL 证书申请](https://ssl.sh/zh/guides/aliyun-ssl-certificate/)），或者自己的 PEM 证书和私钥（例如 [acme.sh 签发的证书](https://ssl.sh/zh/guides/acme-sh-dnspod-aliyun-dns/)）。
- 页面里没有写死的 `http://` 资源。

## 第一步：打开 HTTPS 配置

在 CDN 控制台的域名管理页面找到加速域名，点 **管理 → HTTPS 配置**。在 HTTPS 证书一栏点“修改配置”，打开 HTTPS 安全加速开关。

## 第二步：选择证书来源

证书可以从数字证书管理服务里选，也可以自定义上传；前者在服务里续期后能同步到 CDN。

- **数字证书管理服务证书**：直接选择已签发的证书，证书在该服务里续期或替换后可以同步更新。
- **自定义上传**：证书一栏粘贴完整证书链（站点证书在前，中间证书在后），私钥一栏粘贴 PEM 格式私钥。

控制台还可能提供其他证书来源（例如免费证书），具体选项和额度以控制台为准。确认后提交，配置通常几分钟内在全网生效。

## 第三步：设置强制跳转、HSTS 和 TLS 版本

强制跳转、HSTS 和 TLS 版本都在同一个 HTTPS 配置页面里设置：

- **强制跳转**：选择 HTTP → HTTPS，跳转状态码选 301。
- **HSTS**：确认全站 HTTPS 正常后再开启，过期时间先设短一些，原理见 [开启 HSTS](https://ssl.sh/zh/guides/enable-hsts/)。
- **TLS 版本控制**：只保留 TLSv1.2 和 TLSv1.3，除非必须兼容很老的客户端。
- **HTTP/2**：建议开启。

## 第四步：设置 HTTPS 回源

在 **回源配置** 里把回源协议设为 HTTPS（或“协议跟随”），并确认源站在 443 端口有覆盖回源 Host 的有效证书。回源走 HTTP 时，源站不要再做 HTTP 跳转 HTTPS，否则会死循环。

## 验证

配置生效后，CDN 返回的证书颁发者和到期时间与你配置的证书一致，`http://` 返回 301，开启 HSTS 后能看到对应响应头。用 [SSL 证书检查](https://ssl.sh/zh/tools/ssl-checker/) 和 [HSTS 检查](https://ssl.sh/zh/tools/hsts-checker/) 检查 CDN 域名，或在终端运行：

```bash
curl ssl.sh/cdn.example.com
curl -sI http://cdn.example.com | grep -iE '^(HTTP|location)'
curl -sI https://cdn.example.com | grep -i strict-transport-security
```

## 自动续期

CDN 不会替你续期自定义上传的证书。可选的自动化方式：

- 证书来自数字证书管理服务的，在该服务里使用其自动续费/部署能力（是否可用以控制台为准）。
- 证书来自 acme.sh 的，用自带的 `ali_cdn` 部署钩子，续期成功后自动推送到 CDN：

```bash
export Ali_Key="your-access-key-id"
export Ali_Secret="your-access-key-secret"
export DEPLOY_ALI_CDN_DOMAIN="cdn.example.com"
acme.sh --deploy -d example.com --deploy-hook ali_cdn
```

执行一次后 acme.sh 会记住部署钩子，以后每次续期都会自动运行。RAM 子账号需要 CDN 证书配置的权限（具体权限策略以阿里云文档为准）。2027 年 3 月 15 日起证书最长 100 天，手动上传容易漏掉，要改成自动推送，并把域名加到 [ssl.sh 监控](https://ssl.sh/zh/monitor/)（开发中）。

## 常见问题排查

- **证书与私钥不匹配**：上传的私钥不是这张证书的，见 [nginx key values mismatch](https://ssl.sh/zh/errors/nginx-key-values-mismatch/)，用 [私钥匹配检查](https://ssl.sh/zh/tools/key-matcher/) 确认。
- **部分手机或小程序报证书链不完整**：证书一栏只粘贴了站点证书，补上中间证书，见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。
- **重定向次数过多**：源站和 CDN 都在跳转，见常见问题和 [HTTP 跳转 HTTPS](https://ssl.sh/zh/guides/redirect-http-to-https/)。
- **访问提示证书过期**：上传的证书到期没更新，见 [NET::ERR_CERT_DATE_INVALID](https://ssl.sh/zh/errors/net-err-cert-date-invalid/)。
- **HTTPS 正常但页面提示不安全**：页面里有 HTTP 资源，见 [混合内容警告](https://ssl.sh/zh/errors/mixed-content-warning/)。
