文档中心
NginxHTTPS璇佷功瀵煎叆鍏ㄦ敾鐣ユ墜鎶婃墜鏁欎綘閰嶇疆瀹夊叏鍔犲瘑缃戠珯
时间 : 2025-09-27 16:25:58浏览量 : 2

在今天的互联网环境中,HTTPS已经不再是可选项,而是保护用户数据和提升网站可信度的必备措施。作为最流行的Web服务器之一,Nginx的HTTPS配置是每个运维和安全人员的必修课。本文将用最通俗易懂的方式,带你一步步完成Nginx的HTTPS证书导入全过程。
一、HTTPS证书基础知识
在开始操作前,我们需要了解几个关键概念:
1. SSL/TLS证书:就像网站的"身份证",证明"你访问的确实是xx银行官网,而不是钓鱼网站"。常见的证书类型包括DV(域名验证)、OV(组织验证)和EV(扩展验证)。
2. 证书链:想象成"信任链条",你的证书需要被上级CA(证书颁发机构)签名,而CA的证书又需要被更高级的CA签名,直到根证书。
3. 密钥对:包括公钥(可以公开)和私钥(必须严格保密)。就像一把锁和钥匙的关系,公钥加密的数据只能用对应的私钥解密。
二、获取HTTPS证书的三种方式
1. 商业CA购买
比如DigiCert、GlobalSign等机构颁发的证书。特点是浏览器100%信任,但需要付费。适合企业官网、电商平台等场景。
2. Let's Encrypt免费证书
通过ACME协议自动签发,每90天需要续期一次。技术社区的最爱,适合个人博客和小型网站。示例命令:
```bash
sudo certbot --nginx -d example.com
```
3. 自签名证书
自己当CA给自己发证(就像自己写奖状给自己)。浏览器会显示警告,仅适用于内部测试环境。生成命令示例:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/selfsigned.key \
-out /etc/ssl/certs/selfsigned.crt
三、Nginx配置HTTPS详细步骤
假设我们已经获得了以下文件:
- `example.com.crt`(主证书文件)
- `example.com.key`(私钥文件)
- `ca_bundle.crt`(中间证书链文件)
步骤1:合并证书链
将主证书和中间证书合并成一个文件(顺序很重要):
cat example.com.crt ca_bundle.crt > combined.crt
步骤2:上传文件到服务器
推荐存放路径:
/etc/ssl/certs/combined.crt
合并后的证书
/etc/ssl/private/example.com.key
私钥
?? 安全提示:确保私钥权限设置为600(仅root可读写):
chmod 600 /etc/ssl/private/example.com.key
步骤3:修改Nginx配置
编辑站点配置文件(通常在`/etc/nginx/sites-available/`目录下):
```nginx
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/combined.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;
TLS协议优化配置
ssl_protocols TLSv1.2 TLSv1.3;
禁用不安全的TLS1.0/1.1
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
HSTS头(强制HTTPS)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
...其他配置...
}
步骤4:HTTP强制跳转HTTPS
在80端口的server块中添加跳转规则:
listen 80;
return 301 https://$host$request_uri;
步骤5:测试并重载配置
先测试配置是否正确:
sudo nginx -t
无误后重载Nginx:
sudo systemctl reload nginx
四、常见问题排查指南
? 问题1:"SSL_ERROR_RX_RECORD_TOO_LONG"错误
?? 原因:可能把HTTP流量发到了HTTPS端口或反之
?? 解决:检查listen指令是否有ssl关键字
? 问题2:"NET::ERR_CERT_AUTHORITY_INVALID"
?? 原因:中间证书缺失或不完整
?? 解决:用SSL Labs工具检测并修复证书链
? 问题3:"SSL handshake failed"
?? 原因:客户端和服务端支持的TLS版本不匹配
?? 解决:调整ssl_protocols配置项
五、高级安全加固建议
1. 启用OCSP Stapling :减少客户端验证延迟的同时保护隐私
```nginx
ssl_stapling on;
ssl_stapling_verify on;
```
2. 使用更安全的密钥算法 :Ed25519优于RSA2048
```bash
openssl genpkey -algorithm ED25519 -out privkey.pem
3. 定期轮换密钥 :即使私钥未被泄露也应定期更换
4. 监控到期时间 :用脚本自动检测即将过期的证书
通过以上步骤,你的Nginx服务器就已经武装上了行业标准的HTTPS防护。记住在网络安全领域,"不安全的默认值"是最大的敌人之一——每个安全特性都需要我们主动去开启和配置!
TAG:Nginx.+https证书导入,nginx证书链,nginx部署ssl证书,nginx配置cer证书