一、TLS1.2与TLS1.3核心版本差异
TLS是HTTPS加密通信的核心,TLS1.3在TLS1.2基础上做了握手流程、加密算法、安全机制的深度优化,是当前生产环境的首选版本,两者核心差异如下:
| 对比维度 | TLS1.2 | TLS1.3 | 核心优化价值 |
|---|---|---|---|
| 握手时延 | 2次RTT(客户端-服务器四次交互) | 1次RTT,支持0-RTT会话恢复 | 大幅缩短连接建立时间,适配高时延/移动端网络 |
| 加密算法 | 支持含弱算法(SHA-1、3DES),算法协商复杂 | 移除所有弱算法,仅保留安全算法(AES-GCM、ChaCha20-Poly1305等) | 规避安全风险,减少算法协商开销 |
| 密钥协商 | 支持RSA/ECDHE,协商在握手后期完成 | 仅支持ECDHE椭圆曲线算法,协商与握手同步 | 密钥生成更快、长度更短,安全强度更高 |
| 握手加密 | 部分握手数据(密钥协商参数)明文传输 | 全程握手数据加密 | 防止握手信息被窃取分析,提升整体安全性 |
| 0-RTT支持 | 不支持 | 原生支持 | 二次连接无需握手,直接传输数据,提升访问速度 |
| 服务器兼容性 | 全版本兼容,老旧服务器可用 | Nginx1.13.0+/Apache2.4.36+支持 | 牺牲少量老旧兼容,换取性能与安全 |
握手流程图

核心总结
生产环境优先启用「TLS1.3+向下兼容TLS1.2」,彻底禁用TLS1.0/TLS1.1等不安全版本,兼顾性能、安全与基础兼容性。
二、自签名证书与权威CA证书核心区别
HTTPS证书是身份认证和密钥分发的核心,按颁发主体可分为两类,适用场景、信任度、配置方式差异显著,核心区别如下:
| 对比维度 | 自签名证书 | 权威CA证书(阿里云/Let's Encrypt) |
|---|---|---|
| 颁发主体 | 本地通过OpenSSL生成,无第三方认证 | 受浏览器/操作系统信任的权威机构,需身份审核 |
| 浏览器信任 | 默认不信任,弹出安全警告 | 默认信任,地址栏显示安全小锁,无警告 |
| 适用场景 | 本地测试、内网服务、Redfish硬件接口测试 | 生产环境、公网服务、对外接口/网站 |
| 生成/申请方式 | 免费,本地命令生成,即时可用 | 免费/付费,权威平台申请,需域名/企业审核 |
| 有效期 | 可自定义(1/3/5年) | 免费证书90天,付费证书1-3年,到期需续签 |
| 安全性 | 加密强度与CA一致,仅无第三方身份认证 | 加密强度高+第三方身份认证,防止域名伪造 |
| 配置复杂度 | 简单,生成后直接部署 | 需下载证书链/公钥/私钥,按服务器规范部署 |
核心总结
自签名证书适合「测试/内网场景」,免费便捷但无第三方信任;权威CA证书为「生产/公网场景」必选,阿里云提供免费单域名CA证书,可满足基础需求。
三、HTTPS性能优化核心手段
HTTPS因加密/解密、证书验证存在少量性能开销,以下为可直接落地的优化手段,按优先级排序,兼顾安全性与实用性:
- 协议层优化:启用TLS1.3+TLS1.2,彻底禁用TLS1.0/TLS1.1及以下版本,减少协议协商冗余,规避安全风险。
- 会话复用优化:开启「会话ID+会话票据」,缓存会话信息(默认1天),单服务器用会话ID,集群场景用会话票据,避免重复握手。
- 算法优化:优先使用ECDHE椭圆曲线算法,替代传统RSA算法,密钥生成速度快、长度更短,加密/解密效率提升30%以上。
- 连接优化:开启HTTP/2,实现单连接多路复用,同时配置TCP长连接(keepalive_timeout=65s),减少TCP连接建立开销。
- 证书优化:确保证书链完整,开启OCSP装订,减少浏览器证书验证的网络请求,缩短页面加载时间。
- 缓存优化:开启Nginx SSL缓存(建议10M容量),缓存证书验证和会话信息,减少重复计算开销。
四、前置准备(通用操作)
无论部署自签名证书还是权威CA证书,需先完成以下前置操作,确保环境合规:
- 验证Nginx版本:需1.13.0+(支持TLS1.3),执行命令验证:
nginx -v,版本过低需升级。 - 验证OpenSSL工具:Linux系统默认自带,执行命令验证:
openssl version,缺失需安装(yum install openssl -y/apt install openssl -y)。 - 创建证书目录:统一管理证书文件,避免配置混乱,执行命令:
# 创建证书目录(Linux推荐路径) ``mkdir -p /usr/local/nginx/ssl ``# 赋予目录权限,防止权限不足 ``chmod 755 /usr/local/nginx/ssl
五、实操1:自签名证书生成 + Nginx HTTPS配置(测试/内网)
5.1 一键生成自签名证书(OpenSSL脚本)
进入证书目录,执行以下命令,替换「CN=」后为服务器IP/内网域名,即时生成(有效期365天),无需审核:
bash
# 进入证书目录
cd /usr/local/nginx/ssl
# 生成RSA算法证书(通用型,兼容性强)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt \
-subj "/C=CN/ST=XX省/L=XX市/O=XX公司/CN=192.168.1.100" # CN替换为服务器IP/内网域名
# 可选:生成ECC椭圆曲线证书(性能更优,推荐)
openssl ecparam -genkey -name secp256r1 -out server-ecc.key
openssl req -x509 -nodes -days 365 -key server-ecc.key -out server-ecc.crt \
-subj "/C=CN/ST=XX省/L=XX市/O=XX公司/CN=192.168.1.100"
生成文件说明:server.key(服务器私钥,切勿泄露)、server.crt(RSA证书公钥);ECC算法对应server-ecc.key/crt。
5.2 Nginx HTTPS完整配置脚本(集成性能优化)
编辑Nginx主配置文件(默认路径:/usr/local/nginx/conf/nginx.conf 或 /etc/nginx/nginx.conf),替换服务器IP/域名,直接复制使用:
nginx
# 全局HTTPS性能优化配置(添加到http{}外或http{}开头)
ssl_protocols TLSv1.2 TLSv1.3; # 仅启用安全版本
ssl_prefer_server_ciphers on; # 优先使用服务器端加密算法
# 高效安全的加密算法套件(适配TLS1.2/1.3)
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_session_timeout 1d; # 会话超时时间1天
ssl_session_cache shared:SSL:10m; # 开启SSL缓存(10M容量)
ssl_session_tickets on; # 开启会话票据(适配集群场景)
ssl_stapling on; # 开启OCSP装订,减少证书验证耗时
ssl_stapling_verify on; # 验证OCSP装订信息
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65; # TCP长连接超时时间
# HTTPS核心服务配置
server {
listen 443 ssl http2; # 开启HTTP/2,提升并发性能
server_name 192.168.1.100; # 替换为服务器IP/内网域名
# 配置自签名证书路径(RSA版本)
ssl_certificate /usr/local/nginx/ssl/server.crt;
ssl_certificate_key /usr/local/nginx/ssl/server.key;
# 若使用ECC证书,替换为以下两行
# ssl_certificate /usr/local/nginx/ssl/server-ecc.crt;
# ssl_certificate_key /usr/local/nginx/ssl/server-ecc.key;
# 测试页面配置(验证HTTPS是否生效)
location / {
root html;
index index.html index.htm;
}
}
# 可选:HTTP强制重定向到HTTPS(推荐开启)
server {
listen 80;
server_name 192.168.1.100; # 与HTTPS的server_name保持一致
rewrite ^(.*)$ https://$host$1 permanent; # 301永久重定向,保留SEO权重
}
}
5.3 配置验证与Nginx重启
配置完成后,先验证语法正确性,无报错再重启Nginx,避免服务异常:
bash
# 验证Nginx配置语法(核心步骤,必须执行)
nginx -t
# 若提示「nginx: configuration file /xxx/nginx.conf test is successful」则无问题
# 重启Nginx使配置生效
nginx -s reload
5.4 验证效果
- 浏览器验证:访问「https://服务器IP/内网域名」,忽略安全警告后可正常加载页面。
- 终端验证:执行
curl -k https://服务器IP(-k参数跳过自签名证书验证),返回页面HTML内容即生效。 - TLS版本验证:执行
curl -k -v https://服务器IP 2>&1 | grep "TLS version",显示TLS1.3或TLS1.2即配置成功。
六、实操2:阿里云权威CA证书 + Nginx HTTPS配置(生产/公网)
6.1 阿里云免费CA证书申请与下载
- 登录阿里云SSL证书控制台:https://yundun.aliyun.com/ssl
- 点击「购买证书」,选择「免费版(Let's Encrypt)」,填写已备案的域名(无备案域名无法使用公网CA证书)。
- 完成域名验证:选择「DNS验证」或「文件验证」,阿里云解析用户可选择自动验证,无需手动操作。
- 审核通过后(通常10分钟内),点击「下载证书」,选择「Nginx」版本,下载得到压缩包,包含3个核心文件:xxx.pem(公钥+证书链)、xxx.key(私钥)、xxx_chain.pem(证书链)。
6.2 上传证书到服务器
将下载的pem和key文件上传到服务器的Nginx证书目录(/usr/local/nginx/ssl),推荐使用scp命令上传(本地→服务器):
bash
# 本地终端执行,替换括号内信息
scp 本地证书路径/xxx.pem 服务器用户名@服务器公网IP:/usr/local/nginx/ssl/
scp 本地证书路径/xxx.key 服务器用户名@服务器公网IP:/usr/local/nginx/ssl/
6.3 Nginx CA证书配置脚本(直接复制)
与自签名证书配置逻辑一致,仅修改证书路径和备案域名,性能优化项完全复用,配置脚本如下:
nginx
# 全局HTTPS性能优化配置(与自签名证书一致,无需修改)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets on;
ssl_stapling on;
ssl_stapling_verify on;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# HTTPS生产服务配置
server {
listen 443 ssl http2;
server_name www.xxx.com; # 替换为你的备案域名
# 配置阿里云CA证书路径(替换为实际文件名)
ssl_certificate /usr/local/nginx/ssl/xxx.pem; # 公钥+证书链
ssl_certificate_key /usr/local/nginx/ssl/xxx.key; # 私钥
# 业务页面配置(按实际需求调整root路径)
location / {
root html;
index index.html index.htm;
}
}
# 强制HTTP重定向到HTTPS(生产环境必开)
server {
listen 80;
server_name www.xxx.com; # 与HTTPS的server_name一致
rewrite ^(.*)$ https://$host$1 permanent;
}
}
6.4 配置验证与重启
bash
# 验证配置语法
nginx -t
# 重启Nginx生效
nginx -s reload
6.5 验证效果
- 浏览器验证:访问「https://你的备案域名」,地址栏显示安全小锁,无任何警告,页面正常加载。
- 终端验证:执行
curl https://你的备案域名(无需-k参数),返回页面内容即生效。 - 第三方检测:访问SSL Labs Server Test(https://www.ssllabs.com/ssltest/),输入域名检测,评分达到A+即为合规配置。