文档中心
Nginx涓婂畨瑁匰SL璇佷功鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘瀹炵幇HTTPS鍔犲瘑
时间 : 2025-09-27 16:26:24浏览量 : 3
为什么你的网站需要SSL证书?

想象一下你正在咖啡馆用公共Wi-Fi登录银行账户——如果没有SSL加密,你的账号密码就像写在明信片上邮寄一样危险。SSL证书就是给这个"明信片"装上了防弹保险箱,让数据在传输过程中变成只有接收方才能解密的乱码。
Google早在2025年就将HTTPS作为搜索排名的重要因素,Chrome浏览器也会给没有SSL证书的网站打上"不安全"的红色警告。更实际的是,现在很多Web API(比如微信小程序的后端接口)都强制要求HTTPS连接。
SSL证书类型选购指南
就像买车有经济型、豪华型和超跑一样,SSL证书也有不同档次:
1. DV(域名验证)证书:最基础款,只需验证域名所有权。适合个人博客和小网站。Let's Encrypt提供免费的DV证书,我自己的技术博客就用它。
2. OV(组织验证)证书:会验证企业真实性,证书里会显示公司信息。适合企业官网。价格从几百到几千不等。
3. EV(扩展验证)证书:最高级别,会让浏览器地址栏变绿并显示公司名称。银行、电商首选。价格通常上万。
*真实案例*:某电商平台曾因使用自签名证书(类似自己刻的公章),导致支付页面被浏览器拦截,当天损失订单金额超50万。
实战Nginx配置SSL完整流程
环境准备阶段
假设我们有一个云服务器(CentOS 7),已经安装了Nginx 1.20.1。就像装修房子要先买好材料:
```bash
安装必备工具
yum install -y openssl openssl-devel
```
证书获取方式对比
| 方式 | 适用场景 | 有效期 | 成本 |
||-|--||
| Let's Encrypt | 个人项目/测试 | 90天 | 免费 |
| 商业CA购买 | 企业生产环境 | 1-2年 | ¥300起 |
| OpenSSL自签 | 内网测试 | 自定义 | 免费 |
*建议*:生产环境推荐使用TrustAsia或DigiCert等知名CA机构,避免某些小众CA不被主流设备信任。
Let's Encrypt免费证书实战
用Certbot工具可以像自动售货机一样简单获取证书:
安装Certbot
yum install epel-release -y
yum install certbot python2-certbot-nginx -y
一键获取并配置(替换yourdomain.com)
certbot --nginx -d yourdomain.com -d www.yourdomain.com
这个命令会自动:
1. 验证域名所有权(会在网站根目录创建临时文件)
2.下载证书到/etc/letsencrypt/live/yourdomain.com/
3.修改Nginx配置
Nginx核心配置详解
手动配置的精华部分长这样:
```nginx
server {
listen 443 ssl;
server_name yourdomain.com;
SSL核心配置
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLS1.0/1.1
HTTPS优化参数
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 70;
(其他业务配置...)
}
关键点说明:
- `fullchain.pem`是证书链文件,包含你的证书+中间CA证书
- `privkey.pem`是私钥文件,相当于保险箱钥匙要严格保密
- TLSv1.3是最新协议,比TLSv1.2性能提升约30%
HTTP强制跳转HTTPS
在80端口的server块中加入301跳转:
listen 80;
return 301 https://$host$request_uri;
永久重定向
SSL安全加固进阶技巧
HSTS头配置
在Nginx添加这个header可以让浏览器记住"以后只走HTTPS":
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
*效果*:即使用户手动输入http://也会被强制转成https://
OCSP装订优化
像快递员提前把签收单带在身上而不是每次去邮局取:
ssl_stapling on;
ssl_stapling_verify on;
resolver [8.8.8.8](http://8.8.8.8) [8.8.4.4](http://8.8.4.4) valid=300s;
这可以减少客户端验证证书吊销状态的时间约200-500ms。
HTTPS性能优化方案
很多人担心HTTPS拖慢网站速度,其实通过以下方法可以做到几乎零开销:
1.会话复用:像咖啡店的熟客不用每次出示会员卡
```nginx
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
```
2.启用TLSv1.3:比TLSv.12减少一次RTT握手时间
3.HTTP/2支持:在同一个连接上并行传输多个请求
```nginx
listen [443](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) ssl http2;
实测数据:某新闻站点启用上述优化后:
- TTFB(首字节时间)从320ms降到210ms
- Google PageSpeed评分从72提升到89
SSL状态监控与维护
安全不是一劳永逸的事,需要定期检查:
```bash
查看当前使用的协议和加密套件
openssl s_client -connect yourdomain.com:[443](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)
检查HSTS等安全头
curl -I https://yourdomain.com
Let's Encrypt自动续期(加到crontab)
certbot renew --quiet --post-hook "systemctl reload nginx"
推荐使用Qualys SSL Labs的在线测试工具([https://www.ssllabs.com](https://www.ssllabs.com))进行全方位体检。
FAQ高频问题解答
Q:为什么Chrome还是显示不安全?
A:可能原因有:
- CSS/Javascript等资源仍用HTTP加载(需要把所有资源链接改成//开头或https://)
- SHA-算法过时(应使用SHA-256)
Q:如何解决ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误?
A:通常是客户端不支持你配置的协议版本:
```nginx
ssl_protocols TLSv1. TLSv1.3;
兼容更多设备可以加上TLSv**
Q:多域名怎么配置?
A:Nginx支持SNI扩展:
server { listen [443](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) ssl; server_name site**com; ... }
server { listen [443](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) ssl; server_name site**com; ... }
HTTPS的未来趋势
随着量子计算机的发展,现有的RSA算法可能在未来10-年被破解。行业正在向:
-ECC椭圆曲线加密(同样安全强度下密钥更短)**
-Post-quantum Cryptography抗量子密码学
建议现在生成私钥时就可以选择更先进的算法:
openssl ecparam -genkey -name prime256v** -out privkey.pem
TAG:nginx上安装ssl证书,nginx部署ssl证书,nginx ssl_ciphers,nginx添加ssl证书

