SSL证书介绍
SSL (Secure Sockets Layer) 证书(更准确的名称是TLS证书)是保障网站安全、建立用户信任的数字凭证。它如同网站的“数字身份证”,由受信任的证书颁发机构(CA)签发,主要有两个作用:
数据加密:在用户的浏览器和网站服务器之间建立一条加密通道,确保传输的密码、信用卡号等敏感信息不会被窃听或篡改。
身份验证:验证网站的真实身份,防止用户访问到仿冒的钓鱼网站。
部署SSL证书后,网站地址会从 http:// 变为 https://,浏览器地址栏会显示一个安全锁标志(目前,2026年3月,Chrome地址栏中的安全锁标志已更换为其他标志)
SSL工作原理
SSL通过结合“非对称加密”和“对称加密”两种技术,在保证安全的同时兼顾了传输效率。
身份验证与密钥交换(非对称加密)
当你访问一个HTTPS网站时,服务器会将其SSL证书(内含公钥)发送给您的浏览器。
浏览器会验证证书的有效性(是否过期、域名是否匹配、是否由可信CA签发)。
验证通过后,浏览器会生成一个临时的“会话密钥”,并用服务器的公钥加密后发送给服务器。服务器再用自己持有的私钥解密,从而双方都获得了同一个会话密钥。
数据传输(对称加密)
握手完成后,浏览器和服务器之间的所有通信都将使用刚才协商好的“会话密钥”进行快速的对称加密和解密,确保数据高效、安全地传输。
证书分类
按照验证等级分类
不同等级的证书在身份审核的严格程度与信任层级上存在显著差异。无论选择何种验证级别,SSL 证书所提供的 TLS 加密强度均保持一致;其核心区别仅在于证书颁发机构(CA)对申请组织进行身份核验的深度与广度。
按保护域名的数量分类
单域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 目录
配置服务器网络环境
检查服务器的防火墙,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 端口。
在阿里云控制台中的安全组配置中开放 443 端口。
在服务器防火墙中开放 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 模块
检查 Nginx 是否安装了 SSL 模块
执行以下命令,如果输出了 --with-http_ssl_module 则说明已安装 SSL 模块,否则需进行安装。
nginx -V 2>&1 | grep -o -- '--with-http_ssl_module'
在 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 ok 和 test is successful 则表示测试通过,否则需根据提示修正配置,直至测试通过。
sudo nginx -t -c /etc/nginx/nginx.conf
重启 Nginx 服务
执行以下命令可重新加载 Nginx 配置文件,无需重启服务进程且不中断现有连接。如重载失败
nginx -s reload
以上步骤是我根据阿里云官网文档修改的,细则可以参见 在Nginx或Tengine服务器安装SSL证书(Linux)