ysf
ysf
Published on 2026-03-31 / 55 Visits
4

如何在阿里云申请使用免费SSL证书并在Nginx服务器部署

SSL证书介绍

SSL (Secure Sockets Layer) 证书(更准确的名称是TLS证书)是保障网站安全、建立用户信任的数字凭证。它如同网站的“数字身份证”,由受信任的证书颁发机构(CA)签发,主要有两个作用:

  • 数据加密:在用户的浏览器和网站服务器之间建立一条加密通道,确保传输的密码、信用卡号等敏感信息不会被窃听或篡改。

  • 身份验证:验证网站的真实身份,防止用户访问到仿冒的钓鱼网站。

部署SSL证书后,网站地址会从 http:// 变为 https://,浏览器地址栏会显示一个安全锁标志(目前,2026年3月,Chrome地址栏中的安全锁标志已更换为其他标志)

SSL工作原理

SSL通过结合“非对称加密”和“对称加密”两种技术,在保证安全的同时兼顾了传输效率。

  1. 身份验证与密钥交换(非对称加密)

    • 当你访问一个HTTPS网站时,服务器会将其SSL证书(内含公钥)发送给您的浏览器。

    • 浏览器会验证证书的有效性(是否过期、域名是否匹配、是否由可信CA签发)。

    • 验证通过后,浏览器会生成一个临时的“会话密钥”,并用服务器的公钥加密后发送给服务器。服务器再用自己持有的私钥解密,从而双方都获得了同一个会话密钥。

  2. 数据传输(对称加密)

    • 握手完成后,浏览器和服务器之间的所有通信都将使用刚才协商好的“会话密钥”进行快速的对称加密和解密,确保数据高效、安全地传输。

证书分类

  1. 按照验证等级分类

不同等级的证书在身份审核的严格程度与信任层级上存在显著差异。无论选择何种验证级别,SSL 证书所提供的 TLS 加密强度均保持一致;其核心区别仅在于证书颁发机构(CA)对申请组织进行身份核验的深度与广度。

证书类型

验证内容

适用场景

签发时间

DV (域名型)

仅验证域名所有权

个人博客、测试环境、小型展示网站

1-15分钟

OV (企业型)

验证域名所有权 + 企业真实身份

企业官网、中小型电商平台、SaaS应用

约5个自然日

EV (企业增强型)

最严格的企业身份和法律存在性审核

银行、金融、大型电商、政府平台

约5个自然日

  1. 按保护域名的数量分类

  • 单域SSL证书 (Single Domain SSL certificate):适用于一个域名,而且仅适用于这一个域名。它不能用于认证任何其他域名,甚至不能认证为其所对应的域的子域名。域上的所有页面也受证书保护;例如,如果 example.com 拥有有单域证书,则该证书也涵盖 example.com/learning(学习中心主页)。

  • 通配符SSL证书 (Wildcard SSL certificate):适用于单个域名及其所有子域名。子域名从属于主域名。子域名的地址通常以“www”之外的其他地址开头。例如,www.example.com 有许多子域,如 blog.example.com、support.example.com 和 developers.example.com 等。各自都是 example.com 主域下的一个子域。单个通配符 SSL 证书可以应用于所有这些子域。任何子域都将列在 SSL 证书中。

  • 多域名SSL证书 (Multi-Domain SSL certificate, MDC):多域 SSL证书在一个证书上列出多个不同的域名。使用 MDC,彼此不是子域名的域名可以共享证书。

SSL证书申请流程

首先,登陆阿里云控制台,搜索“SSL 证书”或“数字证书管理服务”

点击“数字证书管理服务(原 SSL 证书)”,进入后,点击下图中的“登录控制台”

进入控制台后,点击下图左侧菜单的“SSL 证书管理 V2.0”,然后选择“个人测试证书(原免费证书)”

这里我已经申请了一个免费证书,所以证书列表中有一个证书订阅实例,要申请证书,点击“购买证书”按钮,进入下面的界面:

按照上面的选择,点击立即购买进入支付页面点击支付即可(实际支付 0 元)。

支付成功后返回 "证书控制台“完成证书申请

可以看到已经多了一个待申请的证书订阅实例,点击“申请证书”,填写以下信息(下图):

  • 证书绑定域名:输入你的域名,个人测试证书只能填写单个域名,不能使用通配符。

  • 域名验证方式:推荐选自动 DNS 验证

  • 联系人、所在地:这两项表单会自动填充,不用管。

  • 密钥算法:选默认的就行

  • CSR 生成方式:选择系统生成

上面表单填写完后,点击“提交审核”。

提交审核后会出现下面这个页面:

注意:如果选择自动 DNS 验证,系统通常会自动配置解析记录。若提示验证失败,前往“云解析 DNS”手动添加 _dnsauth 开头的解析记录,待生效后重新点击“验证”。

下面演示如何手动添加DNS解析记录:

进入云解析 DNS 功能模块,查看是否有 _dnsauth.* 主机记录,如果没有,则点击添加,然后填写上图中的 DNS 解析记录

填写完成后,点击确定,等待 DNS 解析生效。

PS:可能还需要去“申请证书”那个页面的“验证 DNS 信息是否填写正确”下方点击验证按钮。验证通过后,等待 CA 审核签发证书即可。

证书部署

证书申请通过后,证书状态会显示为“已签发”:

这时候,证书还需要在服务器上进行一些配置。

点击相应证书右侧的下载按钮:

根据你使用的服务器类型,下载对应的证书。我使用的是 Nginx 服务器,下载下来是一个 zip 格式的压缩包,解压后里面是以你域名命名的两个文件:

随后按照阿里云官方文档—— 在Nginx或Tengine服务器安装SSL证书(Linux) 的指引,配置刚才下载的证书。

在 Ngnix 安装证书大概就以下几步:

准备SSL证书

将刚才下载的证书文件上传到服务器的 etc/ssl/cert 目录

配置服务器网络环境

  1. 检查服务器的防火墙,443 端口是否已经开放

在服务器终端执行以下命令,检查 443 端口开放情况:

command -v nc > /dev/null 2>&1 || sudo yum install -y nc
# 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP
sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443

如果输出 Ncat: Connected to <当前服务器公网 IP>:443,则表明 443 端口已开放。否则需在安全组和防火墙中开放 443 端口。


  1. 在阿里云控制台中的安全组配置中开放 443 端口。


  1. 在服务器防火墙中开放 443 端口

首先执行以下命令,识别当前系统的防火墙服务类型:

if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
    echo "firewalld"
elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
    echo "ufw"
elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
    echo "nftables"
elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
    echo "iptables"
elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
    echo "iptables"
else
    echo "none"
fi

在我的机器上执行的输出结果为 iptables,即我的 CentOS 中使用的是 iptables 防火墙,接下来执行下面的命令开放 443 端口:

sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

/为了避免 iptables 规则在系统重启后失效,执行下面的命令持久化 iptables 规则:

对于 RedHat 系 Linux ,执行:

sudo yum install -y iptables-services
sudo service iptables save

对于 Deb 系 Linux,执行:

sudo yum install -y iptables-services
sudo service iptables save

安装SSL 证书到 Nginx服务器

首先,要确保Nginx中安装了 SSL 模块

  1. 检查 Nginx 是否安装了 SSL 模块

执行以下命令,如果输出了 --with-http_ssl_module 则说明已安装 SSL 模块,否则需进行安装。

nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'
  1. 在 Nginx 中配置 SSL 证书和私钥文件

使用 vim 打开配置文件:

sudo vim /etc/nginx/nginx.conf

添加监听 443 端口的 server 块:

将现有监听 80 端口的 server 块复制为新的配置块,修改其监听端口为 listen 443 ssl,并补充 SSL 证书配置(包括 ssl_certificate 和 ssl_certificate_key 指令),其余配置项维持不变。

# 原有监听 80 端口的 server 块
server {
    listen 80;
    server_name example.com www.example.com;
    
    # 301 重定向到 https,配置这个重定向时,需要将之前配置中反向代理注释掉,再在新增的 server 块中配置反向代理 
    return 301 https://$server_name$request_uri;

}

# 复制已有监听 80 端口的 server 块,新增为一个新的 server 块
server {
    # 将原有 listen 80 修改为 listen 80 改为 listen 443 ssl
    listen 443 ssl;
    # 原有 server_name,可继续新增更多当前证书支持的域名
    server_name example.com www.example.com;
    
    # ======================= 证书配置开始 =======================
    # 指定证书文件(中间证书可以拼接至该pem文件中),请将 /etc/ssl/cert/ssl.pem 替换为您实际使用的证书文件的绝对路径
    ssl_certificate /etc/ssl/cert/ssl.pem;
    # 指定私钥文档,请将 /etc/ssl/cert/ssl.key 替换为您实际使用的私钥文件的绝对路径
    ssl_certificate_key /etc/ssl/cert/ssl.key;
    # 配置 SSL 会话缓存,提高性能
    ssl_session_cache shared:SSL:1m;
    # 设置 SSL 会话超时时间
    ssl_session_timeout 5m;
    # 自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    # 指定允许的 TLS 协议版本,TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差
    ssl_protocols TLSv1.2 TLSv1.3;
    # 优先使用服务端指定的加密套件
    ssl_prefer_server_ciphers on;
    # ======================= 证书配置结束 =======================
   
    # 这里配置反向代理
    location / {
        proxy_pass http://127.0.0.1:8090;
    }
}

执行以下命令验证配置文件的合法性与正确性。若输出 syntax is oktest is successful 则表示测试通过,否则需根据提示修正配置,直至测试通过。

sudo nginx -t -c /etc/nginx/nginx.conf

重启 Nginx 服务

执行以下命令可重新加载 Nginx 配置文件,无需重启服务进程且不中断现有连接。如重载失败

nginx -s reload

以上步骤是我根据阿里云官网文档修改的,细则可以参见 在Nginx或Tengine服务器安装SSL证书(Linux)