给网站启用HTTPS,大概是投入最小、收益最直接的一项安全改进。浏览器对纯HTTP页面会显示“不安全”提示,访客看到后多半会犹豫要不要继续访问。阿里云提供免费的单域名DV证书,申请、验证和部署都可以在控制台完成。这篇文章用一个个人博客迁移的例子,讲清楚阿里云https证书申请的完整流程,以及几个容易卡住的地方。

申请前先确认四件事
- 域名实名:域名需要已完成实名认证。服务器在中国大陆的话,还要有有效的ICP备案,否则网站本身可能就无法正常访问。
- 账号实名:阿里云账号需要完成实名认证,否则证书申请入口可能无法使用。
- DNS修改权限:确认你能修改这个域名的解析记录。域名如果托管在阿里云云解析里,后面的验证步骤会省很多事。
- 443端口:服务器需要部署好网站,并且443端口能被外网访问。这一项后面出问题最多,建议现在就用手机流量之类的外部网络测一下。
免费证书能覆盖什么
免费证书是DV类型,只验证你对域名的控制权,不审核企业身份。个人博客、工具站、普通业务系统一般够用。它通常只绑定一个域名。像 *.example.com 这样的泛域名证书,或者一张证书绑定多个域名,需要付费购买。如果是企业官网,希望访客在证书里看到公司主体信息,就要考虑OV或EV证书。
在控制台申请证书
- 登录阿里云控制台,进入“数字证书管理服务”,也就是常说的SSL证书控制台。
- 在证书列表里找到免费证书的申请入口,填写要绑定的域名,比如 blog.example.com。这里填的应该是访客实际输入的那个地址。
- 选择验证方式。域名在阿里云解析里,选DNS验证最省事;域名在其他服务商,也可以选文件验证。
- 提交后状态会先显示为“待验证”,这时还没有签发,需要继续完成验证。
完成域名验证
DNS验证需要添加一条TXT记录。控制台会给出主机记录和记录值,照填即可。主机记录只写前缀,比如 blog,不要把 blog.example.com 整个写进去,这是最常见的错误之一。复制记录值时留意首尾空格。记录生效时间取决于TTL设置,一般几分钟到几十分钟不等。如果等了很久还没变化,可以用dig命令或在线解析工具确认记录是否已经生效。
文件验证的做法是把控制台给出的验证文件放到网站指定路径,然后确认能通过HTTP正常访问。如果网站设置了跳转或访问限制,这一步很容易失败。验证通过后,证书状态会变成“已签发”。
部署证书的两种方式
方案A:部署到阿里云产品
如果网站前面挂着CDN、负载均衡或对象存储,直接在对应产品的HTTPS设置里选择已签发的证书即可。部署由控制台完成,不需要登录服务器,改起来也快。
方案B:部署到自建Nginx
在证书详情页下载Nginx格式的压缩包,解压后会得到一个 .pem 文件和一个 .key 私钥文件。配置时,ssl_certificate 填 .pem 文件的路径,它已经包含中间证书链;ssl_certificate_key 填 .key 文件的路径。把两个文件上传到服务器,比如 /etc/nginx/ssl/ 目录,然后在对应的 server 块里完成以下设置:
- 监听443端口并开启SSL,例如 listen 443 ssl;
- 填写 ssl_certificate,指向 .pem 文件。
- 填写 ssl_certificate_key,指向 .key 文件。
改完配置先执行 nginx -t 检查语法,通过后再 reload。私钥文件要收紧权限,比如设为600并归root所有,别让其他用户读到。私钥一旦泄露,证书就得重新签发。如果希望HTTP自动跳转到HTTPS,还需要在80端口的 server 块里加一条301跳转。
一个示意案例:个人博客从HTTP迁到HTTPS
下面这个案例是示意的,用来说明几个常见的坑。个人博客 blog.example.com 部署在阿里云ECS上,系统是Ubuntu,Web服务是Nginx,域名也托管在阿里云云解析里。迁移时遇到三个问题。
- 验证一直不通过。第一次添加TXT记录时,主机记录里多写了域名后缀,DNS查询自然匹配不上。改成只写前缀后,大约10分钟,状态变成“已签发”。
- 部署后HTTPS打不开。Nginx配置没有问题,但ECS安全组没有放行443端口,请求在网络层就被拦住了。在安全组里加上入方向规则后恢复正常。这类问题看起来像证书故障,排查时应该先确认端口能不能通。
- www地址证书报错。博客同时用www和裸域名访问,而免费证书只绑定了 blog.example.com,所以www版本会提示证书不匹配。可以为www地址单独申请证书,也可以在Nginx里把一个域名301跳转到另一个,统一入口。
处理完之后,地址栏出现加密标识,HTTP请求也会跳转到HTTPS。之后可以用公开的SSL检测工具看一下证书链和协议配置,确认没有缺失的中间证书或过时的协议版本。
证书生效和续期要注意什么
- 已签发但没有生效:先检查Nginx有没有执行reload,再看CDN是否已经部署了新证书。很多时候是旧配置还在运行。
- 验证超时:确认TXT记录值没有多余空格,或者文件验证路径能从公网访问。内网地址,或者被防火墙拦住的路径,验证都会失败。
- 提示配额不足:免费证书每个账号有数量上限。不用的证书可以删除以腾出名额,确实需要更多时再考虑付费证书。
- 证书快到期:免费证书有效期有限,到期前要重新申请并替换。建议在到期前两周设一个日历提醒。如果证书部署在CDN或负载均衡上,要确认它已经同步到新证书。手动部署在Nginx上的,续期后要重新上传文件并reload。