文档中心
Nginx閰嶇疆HTTPS鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘鐢熸垚SSL璇佷功骞堕儴缃?txt
时间 : 2025-09-27 16:27:25浏览量 : 2

作为一名网络安全工程师,我深知HTTPS配置的重要性。今天我就用最通俗易懂的方式,带你从零开始完成Nginx的HTTPS配置全过程。
为什么需要HTTPS?
想象一下你寄信的场景:HTTP就像寄明信片,内容谁都能看;HTTPS则像挂号信+保险箱,既安全又可靠。具体来说:
1. 加密传输:防止中间人窃听(比如咖啡厅WiFi)
2. 身份验证:确保你访问的是真银行网站
3. 数据完整:防止内容被篡改(比如下载软件时)
去年某电商就因未启用HTTPS导致用户支付信息泄露,损失惨重。现在连谷歌都优先展示HTTPS网站了!
SSL证书类型选择
证书就像网站的"身份证",主要分三类:
1. DV证书(域名验证):
- 最基础款
- 10分钟快速签发
- 适合个人博客(年费约100元)
2. OV证书(组织验证):
- 需要营业执照
- 显示公司名称
- 适合企业官网(年费1000元左右)
3. EV证书(扩展验证):
- 绿色地址栏显示公司名
- 银行/支付专用
- 审核严格(年费3000元以上)
小技巧:Let's Encrypt提供免费DV证书,我们待会就用它演示。
OpenSSL自签名证书实战
先教大家用OpenSSL自己制作测试证书:
```bash
生成2048位的RSA私钥
openssl genrsa -out myserver.key 2048
生成CSR证书请求文件(会交互提问)
openssl req -new -key myserver.key -out myserver.csr
Country Name (2 letter code) []:CN
State or Province Name []:Beijing
Organization Name []:MyTestCompany
Common Name (域名) []:test.com
生成有效期365天的自签名证书
openssl x509 -req -days 365 -in myserver.csr -signkey myserver.key -out myserver.crt
```
这样就得到了:
- `myserver.key`:私钥文件 ??
- `myserver.crt`:公钥证书 ??
注意:浏览器会警告这种自签名证书,仅限测试使用!
Let's Encrypt免费证书实战
生产环境推荐Certbot自动获取Let's Encrypt证书:
Ubuntu安装示例
sudo apt install certbot python3-certbot-nginx
一键获取并配置(需提前解析好域名)
sudo certbot --nginx -d example.com -d www.example.com
自动续期测试
sudo certbot renew --dry-run
Certbot会自动:
1. 验证域名所有权 ?
2. 下载证书到`/etc/letsencrypt/live/`
3. 修改Nginx配置 ??
4. 设置自动续期 ?
Nginx完整HTTPS配置示例
来看一个强化安全的配置模板:
```nginx
server {
listen 443 ssl http2;
server_name example.com;
SSL基础配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
TLS协议优化(禁用不安全的SSLv3)
ssl_protocols TLSv1.2 TLSv1.3;
SSL会话优化
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
HSTS头(强制HTTPS)
add_header Strict-Transport-Security "max-age=63072000" always;
OCSP装订提升性能
ssl_stapling on;
ssl_stapling_verify on;
location / {
root /var/www/html;
index index.html;
}
}
HTTP强制跳转HTTPS
listen 80;
return 301 https://$host$request_uri;
关键安全参数说明:
- `http2`:提升加载速度 ??
- `TLSv1.3`:最新最安全的协议 ??
- `HSTS`:防止SSL剥离攻击 ???
HTTPS常见问题排查
遇到问题别慌,试试这些诊断命令:
SSL握手测试(替换为你的域名)
openssl s_client -connect example.com:443 | openssl x509 -noout –text
TLS协议支持检测(推荐工具)
nmap --script ssl-enum-ciphers example.com
Qualys SSL Labs评分(在线检测)
https://www.ssllabs.com/ssltest/
常见报错解决方案:
? "NET::ERR_CERT_AUTHORITY_INVALID"
→ CA根证书未正确安装
→ Let's Encrypt需要包含fullchain.pem
? "SSL handshake failed"
→ Nginx版本过旧不支持TLSv1.2
→ Ubuntu需升级到18.04+
? "ERR_TOO_MANY_REDIRECTS"
→ HTTPS跳转死循环
→检查是否有多个301重定向
HTTPS性能优化技巧
很多人担心HTTPS影响性能,其实做好这些优化后差距不足5%:
1?? 会话复用减少TLS握手:
```nginx
ssl_session_tickets on;
ssl_session_timeout 24h;
2?? OCSP装订免去客户端查询:
```nginx
ssl_stapling on;
ssl_stapling_verify on;
resolver [8.8.8.8](http://8.8.8.8);
3?? HTTP/2支持多路复用:
listen [443](https://example.com:443) ssl http2;
4?? 密钥轮换策略提升安全性:
```bash
certbot renew --pre-hook "service nginx stop" \
--post-hook "service nginx start" \
--renew-hook "/script/reload-services.sh"
Web安全最佳实践补充
最后分享几个容易被忽视的安全点:
?? 禁用弱密码套件:
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384';
??? 预防点击劫持:
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
?? 日志监控建议:
log_format ssl_log '$remote_addr $ssl_protocol $ssl_cipher';
access_log /var/log/nginx/ssl.log ssl_log;
记得定期检查日志中的异常TLS连接!
希望这篇指南能帮你轻松搞定Nginx HTTPS配置。如果有任何问题欢迎留言讨论~网络安全无小事,从一张SSL证书开始筑牢你的第一道防线!
TAG:nginx配置https 生成证书,nginx证书链,nginx配置证书链,nginx生成ssl证书,nginx ssl证书申请,nginx证书申请