云和 CDN
Azure App Service 添加 SSL 证书
Azure App Service 配置 SSL 分三步:创建免费托管证书(或上传自己的 PFX),把证书以 SNI SSL 绑定到自定义域名,再开启“仅 HTTPS”并把最低 TLS 版本设为 1.2。托管证书免费,到期自动续期。
示例域名是 www.example.com(可选 example.com),以截至 2026 年 11 月的 Azure App Service(多租户)为准,门户和 Azure CLI 都能操作。用世纪互联运营的 Azure(俗称 Azure 中国区)的,先看下一节。
全球版和世纪互联运营的 Azure 有什么不同
配置 SSL 的位置和命令基本一样,但中国区是另一套独立环境,备案和证书来源都要单独考虑。
- 独立运营:由世纪互联运营的 Azure 是位于中国境内、物理隔离的独立云实例,由世纪互联旗下的上海蓝云网络科技有限公司独立运营和销售。账户、订阅和门户都和全球版分开,门户地址是
portal.azure.cn。 - CLI 要切换云环境:Azure CLI 默认连接全球版,操作中国区前先执行
az cloud set --name AzureChinaCloud,然后重新az login。下文的az webapp命令本身不用改。 - 默认域名不同:中国区应用的默认域名是
<应用名>.chinacloudsites.cn,不是azurewebsites.net,下文配置 CNAME 时要相应替换。 - 必须备案并绑定自定义域名:按 Azure 中国的备案说明,所有在中国大陆运行、涉及域名解析的网站都要做 ICP 备案;在中国区创建 Web 应用后,要立即绑定已完成备案的自定义域名并通过它访问,从互联网访问默认域名会被封堵。所以中国区的 HTTPS 一定是配在自定义域名上的。
- 免费托管证书没有文档:docs.azure.cn 上的证书文档只列出 Key Vault 导入、上传私有证书和上传公共证书,没有全球版的“创建免费托管证书”章节。同为世纪互联运营的 Azure Front Door 文档则明确写着只支持自带证书。中国区建议直接走第一步里的“上传 PFX”或 Key Vault 路线,证书可以来自国内云厂商、商业 CA 或 Let's Encrypt。
前提条件
自定义域名必须已经添加到应用上。
- App Service 应用在 Basic、Standard、Premium 或 Isolated 定价层。
- 已在 Custom domains(自定义域)里添加域名:
www.example.com用 CNAME 直接指向<应用名>.azurewebsites.net(中国区是chinacloudsites.cn),或者example.com用 A 记录指向应用的 IP(另加 TXT 验证记录)。 - 根域名不要设置访问限制。
- 如果有 CAA 记录,要允许 DigiCert,可以用 CAA 检查 确认。
- 想用命令行的话,装好 Azure CLI 并
az login。
第一步:创建免费托管证书
托管证书在门户或 CLI 里都能创建。门户里打开应用 → Settings → Certificates → Managed certificates → Add certificate,选择自定义域名,点 Validate,再点 Add(菜单名按英文界面写,中文界面是对应的译名)。也可以用 CLI:
az webapp config ssl create --resource-group my-rg --name my-app --hostname www.example.com
要用自己的证书(中国区建议这样做),改走 Bring your own certificates (.pfx) → Add certificate,上传带密码、包含完整证书链的 PFX,导出参数见常见问题。也可以把证书放进 Key Vault 再导入,续期后 App Service 会自动同步。中国区的 Key Vault 地址以 .vault.azure.cn 结尾,写自动化脚本时不要照搬全球版的地址。证书来源不限,阿里云、腾讯云签发的证书和 Let's Encrypt 证书都可以先转成 PFX 再上传。
第二步:把证书绑定到域名
证书创建后要绑定到域名才会生效。在 Custom domains 里为 www.example.com 选择 Add binding,选中证书,类型选 SNI SSL。用 CLI 时先按域名查出证书指纹:
THUMB=$(az webapp config ssl list --resource-group my-rg \
--query "[?subjectName=='www.example.com'].thumbprint | [0]" -o tsv)
az webapp config ssl bind --resource-group my-rg --name my-app \
--certificate-thumbprint "$THUMB" --ssl-type SNI
没有绑定时,访问域名会看到 *.azurewebsites.net 的证书。
第三步:强制 HTTPS 并设置最低 TLS 版本
开启“仅 HTTPS”后,App Service 把 HTTP 请求跳转到 HTTPS;最低 TLS 版本设为 1.2 后,更老的协议无法连接:
az webapp update --resource-group my-rg --name my-app --https-only true
az webapp config set --resource-group my-rg --name my-app --min-tls-version 1.2
门户里对应 Settings → Configuration → General settings 里的 HTTPS Only(仅 HTTPS)和 Minimum inbound TLS version(最低入站 TLS 版本)。
验证
绑定生效后,域名返回自己的证书而不是 *.azurewebsites.net 的证书,HTTP 请求跳转到 HTTPS。用 SSL 证书检查 检查域名,或在终端运行:
curl ssl.sh/www.example.com
curl -sI http://www.example.com | grep -iE '^(HTTP|location)'
在 Azure 里列出证书和到期时间:
az webapp config ssl list --resource-group my-rg --query "[].{name:subjectName,expires:expirationDate,thumb:thumbprint}" -o table
自动续期
托管证书会自动续期,App Service 也会自动更新绑定,前提是条件没变:CNAME 仍然直接指向应用,根域名 A 记录仍然指向它,没有 IP 限制挡住验证,CAA 仍然允许 DigiCert。从 Key Vault 导入的证书(包括 App Service 证书)续期后会在 24 小时内同步到应用。上传的 PFX 永远不会自动续期:要上传新证书,用 Update binding 换上,再删除旧证书。
2026 年 3 月 15 日起公网证书最长 200 天,2027 年 3 月 15 日起 100 天,手动上传 PFX 的频率会越来越高。全球版优先用托管证书或 Key Vault;中国区用 Key Vault 加自动化脚本,把续期后的证书导入 Key Vault,让 App Service 自己同步。无论哪种,都建议把域名加到 ssl.sh 监控(开发中)。
常见问题排查
- 创建托管证书时验证失败:CNAME 经过了中间域名(比如 CDN),或者根域名 A 记录指向了别处,改好 DNS 再试。
- CAA 报错:允许 DigiCert,见 CAA 记录阻止签发。
- **浏览器显示的是 .azurewebsites.net 的证书*:没有添加绑定,见 NET::ERR_CERT_COMMON_NAME_INVALID。
- PFX 上传被拒:用 OpenSSL 3 默认参数导出或缺少证书链,按常见问题重新导出,或用 SSL 格式转换 转换。
- 中国区应用无法通过默认域名访问:这是备案要求下的正常现象,绑定已备案的自定义域名后再访问。
- 调高最低 TLS 版本后老客户端连不上:见 ERR_SSL_VERSION_OR_CIPHER_MISMATCH。
常见问题
App Service 能免费申请通配符证书吗?
托管证书不支持通配符。需要通配符可以买 App Service 证书(付费)、从 Key Vault 导入,或者上传其他 CA 签发的 PFX,比如用 acme.sh 的 DNS API 申请的 Let's Encrypt 通配符证书。
托管证书为什么续期失败?
续期会重新走一遍最初的验证,前提条件变了就会失败:CNAME 改成经过了中间域名(比如套了 CDN)、根域名的 A 记录指向了别处、IP 访问限制挡住了验证、CAA 记录不再允许 DigiCert。另外 Azure 在 2025 年 7 月调整过托管证书的签发方式,详见 Microsoft Learn 页面上的说明。
上传用的 PFX 怎么做?
把证书和中间证书合成一个文件,连同私钥用 openssl pkcs12 -export 导出。OpenSSL 3 要按微软文档的建议加上 -keypbe PBE-SHA1-3DES -certpbe PBE-SHA1-3DES -macalg SHA1,否则 App Service 可能读不了。也可以用 SSL 格式转换。
中国区的 App Service 能用免费托管证书吗?
官方文档没有提供这个选项。截至 2026 年 11 月,docs.azure.cn 上的证书文档只介绍了从 Key Vault 导入、上传私有证书和上传公共证书三种方式,没有全球版文档里“创建免费托管证书”这一节,能否创建以门户实际显示为准。规划时按上传 PFX 或 Key Vault 准备更稳妥。
资料来源
- Microsoft Learn: Add and manage TLS/SSL certificates in Azure App Service
- Microsoft Learn: Secure a custom DNS name with a TLS/SSL binding
- Microsoft Learn: Azure operated by 21Vianet service availability
- Microsoft Learn: Azure cloud management with the Azure CLI
- Azure China docs: Add and manage TLS/SSL certificates
- Azure China docs: Secure a custom DNS name with a TLS/SSL binding
- Azure 中国:Web 应用 ICP 备案说明